Как отправить электронную почту с помощью шаблона MS Outlook (.oft) в сочетании со значениями переменных, вставленными в тело электронной почты (через Excel или иным образом)

Пример: электронное письмо с подтверждением собеседования в Outlook.

Уважаемый [A],
Ваше интервью с [B] подтверждено для [C]. Адрес: [D].
Спасибо,
Джон Доу.

A – Имя
B – Название компании
C – Дата и время
D – Фактический адрес

Я видел, как люди используют для этого Excel, но я хочу иметь возможность просто где-нибудь ввести значения A, B, C и D, нажать «Отправить» и все.

Весь код, с которым я сталкивался, может достигать переменных коэффициентов, но вряд ли у кого-то из них были коды для тела электронного письма, а если и были, то НИ ОДИН из них не включал файлы .oft.


person B.McInnis    schedule 24.05.2019    source источник


Ответы (1)


Ваш вопрос подразумевает, что вы ожидали найти код, точно соответствующий вашим требованиям. Возможно, это несправедливая критика, но многие люди, кажется, ожидают, что их точное требование уже существует или что кто-то закодирует его для них.

Если у меня есть требование, требующее опыта работы с новой для меня функциональностью, я изучаю каждую область отдельно, а затем экспериментирую, прежде чем пытаться использовать свои новые знания для удовлетворения своих требований.

Первое знание, необходимое для вашего требования, — это создать файл шаблона электронной почты. Я предполагаю, что вы уже знаете, как это сделать, но если нет, есть много веб-сайтов, которые объясняют, как это сделать. Я сохранил свой шаблон под именем «StdMsg.oft». Вам нужно будет изменить мой макрос, чтобы использовать ваше имя для вашего шаблона.

Вы можете сохранить файл шаблона электронной почты в любом месте, но, вероятно, лучше использовать папку по умолчанию, чтобы все ваши шаблоны были вместе. Когда вы захотите открыть шаблон, ваш макрос должен будет знать, где он находится. Расположение по умолчанию для Windows 10 — «C:\Users\xxxxx\AppData\Roaming\Microsoft\Templates», где «xxxxx» — ваше имя пользователя. Вы можете ввести эту строку, но если вы хотите поделиться этим макросом с коллегами, вы можете запросить у системы текущее значение «xxxxx». Я легко нашел сайт, который дал мне местоположение по умолчанию, но найти сайт, который сказал мне, как получить значение «ххххх», было сложнее. Я нашел множество сайтов, которые рассказывали мне, как получить значение «ххххх», но большинство из них были неверными или предполагали знания, которых у читателя может не быть. У меня есть папка «Ресурсы» с такими подпапками, как Html, Css, VBAExcel, VBAOutlook и VBAGeneral. Эти подпапки содержат текстовые файлы, в которых записаны полезные фрагменты, которые я вряд ли запомню. Предлагаю вам создать аналогичную папку и записать, как я получил значение «ххххх».

Далее вам нужно открыть файл шаблона электронной почты. Я нашел множество сайтов, на которых показано, как это сделать из Excel, но я не нашел ни одного сайта, на котором было бы показано, как правильно сделать это из Outlook. Из Excel необходимо создать объект приложения Outlook. Из Outlook вы уже находитесь в объекте приложения Outlook, поэтому вам не нужно создавать еще один. На самом деле вы не можете создать новый объект приложения Outlook, потому что Outlook позволяет работать только одной своей версии. Если вы попытаетесь создать новый объект приложения Outlook, вам будет предоставлена ​​ссылка на уже запущенную копию. Опять же, вы можете записать эту информацию в папку ресурсов.

Я использовал InputBox для получения четырех значений от пользователя. Я бы использовал форму, если бы писал этот макрос для себя или клиента. Трудно показать, как создать форму, которая будет напрасной тратой усилий, если вы уже знаете.

Когда шаблон электронной почты открыт, у вас есть доступ ко всем его свойствам. На этом сайте и в других местах есть много ответов, которые показывают, как изменить html или текст сообщения электронной почты. Я предполагаю, что вы хотите отправлять электронные письма в формате html, поэтому я изменил тело html.

Мой макрос отображает отредактированное электронное письмо, но вы можете использовать Send вместо Display, если не хотите проверять электронное письмо перед его отправкой.

Sub SendStdMsgOft()

  Dim Address As String
  Dim CompanyName As String
  Dim DateAndTime As String
  Dim FirstName As String
  Dim NewEmail As MailItem
  Dim PathFileName As String

  PathFileName = Environ("AppData") & "\Microsoft\Templates\StdMsg.oft"

  Set NewEmail = CreateItemFromTemplate(PathFileName)

  FirstName = InputBox("First name")
  CompanyName = InputBox("Company name")
  DateAndTime = InputBox("Date And Time")
  Address = InputBox("Address")

  With NewEmail
    .HtmlBody = Replace(.HtmlBody, "[A]", FirstName)
    .HtmlBody = Replace(.HtmlBody, "[B]", CompanyName)
    .HtmlBody = Replace(.HtmlBody, "[C]", DateAndTime)
    .HtmlBody = Replace(.HtmlBody, "[D]", Address)
    .Display
  End With

End Sub
person Tony Dallimore    schedule 29.05.2019