Простые шаблоны писем в Outlook VBA

в 20:06, , рубрики: Песочница, метки:

Небольшая заметка для чайников, которые хотят упростить жизнь не-айтишному персоналу без особых трудозатрат.

Задача: девочка на ресепшене периодически отправляет официальные анонсы всей компании. При этом дизайн, нарисованный дизайнером есть, а процесс отправки находится в состоянии вплоть до «отыскать старое письмо в отправленных, переслать всем, поправить все поля».

Есть два способа:
Шаблоны — подойдет для простых вариантов, когда все поля статичны
VBA — под катом рассмотрим пример создания простейшего шаблона


VBA можно настроить как угодно, вдобавок, в отличие от шаблонов, макросы можно добавить прямо в ленту Outlook, пользователю сложнее «запороть» шаблон, и не нужно его искать — он всегда перед глазами.

Простейший код, который создает письмо, аттачит две картинки с логотипами, форматирует html-тело письма, прописывает поля письма.

Итак:

  • Запускаем редактор макросов в Outlook (Alt+F11)
  • Создаем новый модуль
    image
  • Пишем код
    Attribute VB_Name = "Announce"
    Option Explicit
    Sub CreateAnnounce()
        Dim htmlBody As String
        Dim fileAttach As Outlook.Attachment
        
        Dim newMail As Outlook.MailItem
        Set newMail = Application.CreateItem(olMailItem)
        
        ' Аттачим два файла, к которым из html-тела можно обратиться как src="cid:<имя файла>"
        ' Третий параметр (position) установлен в 0, чтобы аттачи не отображались отдельными файлами и не портили "внешний вид"
        Set fileAttach = newMail.Attachments.Add("c:imageslogo1.png", , 0)
        Set fileAttach = newMail.Attachments.Add("c:imageslogo2.png", , 0)
        Set fileAttach = Nothing // освобождаем память
        
        ' формируем тело письма. Таблица, два ряда - в верхнем две картинки, в нижнем текст. Немного стиля и форматирования.
        htmlBody = "<table align=center style='width:650;border:solid #316AA5 6.0pt;background=white;padding:0'>" + _
            "<tr height=150>" + _
            "<td style='padding:20;width:200' valign=top><img src='cid:logo1.png' height=150></td>" + _
            "<td style='padding:20;width:200' align=right valign=top><img src='cid:logo2.png' height=150></td></tr>" + _
            "<tr><td colspan=2 valign=top style='padding:80'> <h3>Уважаемые коллеги, </h3><br><br>" + _
            "SCIgen — компьютерная программа, генерирующая случайный текст, напоминающий научную статью, содержащую иллюстрации, графики и примечания. Заявленное назначение: «автоматически генерировать тезисы для конференций, подозреваемых в низком цензе приёма»." + _
            "<br><br>Благодарим за ваше внимание.<br><br><hr>С уважением, служба охраны труда<br><br></tr></table>"
        
        With newMail
            .Subject = "[Announce] " + Format(Date, "dd.mm.yyyy, dddd")
            .To = "test@example.com"
            .BodyFormat = olFormatHTML
            .htmlBody = htmlBody
            .Display
        End With
        Set newMail = Nothing
    End Sub
    
  • 4. Добавляем вызов данного макроса в ленту Outlook
  • 5. Профит
    image

Как можно улучшить?
Например, через inputbox сразу запрашивать Subject, который добавлять к заранее заданному префиксу типа [Announce]
Например, добавить юзерформу с несколькими radio button и выбирать нужный подвид анонса

Да, это не ООП и не новомодные тенденции…
Но поинтересуйтесь, как именно в Вашей компании прямо сейчас рассылаются уведомления например о днях рождениях сотрудников?

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js