#vba #outlook #conditional #signature
#vba #outlook #условные операторы #подпись
Вопрос:
Итак, у меня есть несколько почтовых ящиков в моей учетной записи Outlook, и я пытаюсь заставить их сгенерировать шаблон ответа на основе почтового ящика, из которого я отвечаю (один частный, один общий). Я попытался установить условие на основе имени отправителя и адреса электронной почты, но безрезультатно (ответное электронное письмо генерируется с извлеченным содержимым предыдущего электронного письма, но текст, который я намереваюсь поместить перед ним, отсутствует; причина в том, что значение oReply .SenderEmailAddress пуст, поскольку предложение Else запишет материал по назначению).
(и да, есть фрагменты кода, позволяющие отвечать с вложениями)
Sub ReplyWithAttachments()
Dim oReply As Outlook.MailItem
Dim oItem As Object
Dim sSignature As String
Set oItem = GetCurrentItem()
If Not oItem Is Nothing Then
Set oReply = oItem.Reply
If oReply.SenderEmailAddress = "mailbox.private@something.com" Then
sSignature = "Hello and welcome!"
ElseIf oReply.SenderEmailAddress = "mailbox.shared@something.com" Then
sSignature = "Go to hell!"
End If
CopyAttachments oItem, oReply
oReply.HTMLBody = sSignature amp; oReply.HTMLBody
oReply.Display
oItem.UnRead = False
End If
Set oReply = Nothing
Set oItem = Nothing
End Sub
Редактировать:
итак, мне удалось куда-то добраться с
Set oReply = oItem.Reply
sMailBox = oReply.Sender.GetExchangeUser.Address
If sMailBox = "mailbox.private@something.com" Then
sSignature = "whatever"
ElseIf sMailBox = "mailbox.shared@something.com" Then
sSignature = "bla bla bla"
Else
sSignature = "Something"
Код работает так, как задумано для общего почтового ящика, но для частного он выдает ошибку с переменной объекта или с переменной блока, не заданной, указывающей на .Отправитель
sMailBox = oReply.Sender.GetExchangeUser.Address
Комментарии:
1. Когда вы говорите, безрезультатно , что это на самом деле делает? не соответствует ли оно ни одному из указанных вами электронных писем? если нет, то какой адрес электронной почты
oReply.SenderEmailAddress
возвращается?
Ответ №1:
У меня есть кое-что, что я использую для получения электронной почты отправителя (поскольку это зависит от вашего обмена электронной почтой)
Dim strSendersEmailAddress As String
If oItem.SenderEmailType = "EX" Then
strSendersEmailAddress = oItem.Sender.GetExchangeUser.PrimarySmtpAddress
Else
strSendersEmailAddress = oItem.SenderEmailAddress
End If
Вам нужно будет получить адрес электронной почты, прежде чем Set oReply = oItem.Reply
Комментарии:
1. Привет, спасибо за ответ, однако это возвращает адрес отправителя исходного электронного письма. По сути, я пытаюсь получить мой собственный адрес отправителя (почтовый ящик, с которого я намерен отправить ответ) и использовать его для определения соответствующего содержимого почты.
2. Привет! на самом деле это имело некоторые преимущества! Я смог использовать это для объекта oReply и получить адрес электронной почты общего почтового ящика (есть некоторая проблема для частного, но я думаю, что смогу решить ее в конечном итоге).).
3. Попробуйте это
oReply.Sendusingaccount.smtpaddress
4. При этом всегда извлекается адрес частного почтового ящика (оба почтовых ящика находятся под одной учетной записью). Обновление вопроса с учетом текущего прогресса.
5. Быстро просмотрел и нашел это:
oReply.Session.Accounts.Item(1).DisplayName
. Я думаю, что, поскольку дляoReply
сеанса будет только 1 учетная запись, она должна предоставить вам адрес электронной почты. Говоря, что, поскольку у меня есть только 1 учетная запись в моем почтовом ящике, я не могу ее должным образом протестировать