Тело ответа, обусловленное почтовым ящиком, из которого оно отправлено

#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 учетная запись в моем почтовом ящике, я не могу ее должным образом протестировать