Как проверить входящие письма, используя SenderEmailAddress? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть цикл для проверки входящих писем от Джо Доу с определенной темой. Этот цикл работает и сохраняет вложения от Джо Доу.

If (Msg.SenderName = "Doe, Joe") And _
        (Msg.Subject = "Test: Smartsheet") And _
        (Msg.Attachments.Count >= 1) Then

Я хочу использовать SenderEmailAddress вместо SenderName.

I tested below codes:

    If (Msg.SenderEmailAddress = "test@noreplay.com") And _
            (Msg.Subject = "Test: Smartsheet") And _
            (Msg.Attachments.Count >= 1) Then

И

    If (SenderEmailAddress = "test@noreplay.com") And _
            (Msg.Subject = "Test: Smartsheet") And _
            (Msg.Attachments.Count >= 1) Then

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Помните, что MailItem.SenderEmailAddress и MailItem.SenderName - это свойства только для чтения в объектной модели Outlook. Также обратите внимание, что на уровне MAPI существует около полудюжины свойств, связанных с отправителем, наиболее важным из которых является идентификатор записи отправителя (то есть то, что используется для ответов). То же самое для свойств SentRepresentingXYZ. Я не думаю, что MailItem.PorpertyAccessor.SetProperty позволит вам установить все эти свойства.

Если используется Погашение - это опция, она позволяет установить все связанные с отправителем свойства.

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set rdoMsg = Session.GetMessageFormID(Msg.EntryID)
  vSenderEntryId = Session.AddressBook.CreateOneOffEntryID("Joe The Sender", "SMTP", "joe@domain.demo", false, true)
  set vSender = Session.AddressBook.GetAddressEntryFromID(vSenderEntryId)
  rdoMsg.Sender = vSender
  rdoMsg.SentOnBehalfOf = vSender
  Msg.Save
0 голосов
/ 01 ноября 2018

Второй кусок нового кода определенно не будет работать, потому что SenderEmailAddress является свойством Msg.

Для возврата Msg.SenderEmailAddress = "test@noreplay.com" True должно быть точное совпадение. «Test@noreplay.com» или «test@NoReplay.com» или любое другое подобное изменение не вернет True.

Предложение 1:

Восстановить исходный код, но добавить дополнительный оператор

If (Msg.SenderName = "Doe, Joe") And _
   (Msg.Subject = "Test: Smartsheet") And _
   (Msg.Attachments.Count >= 1) Then
  Debug.Print Msg.SenderEmailAddress

После того, как вы запустите макрос, в Немедленном окне будет список адресов электронной почты отправителей писем Джо Доу, чтобы вы могли проверить, соответствуют ли они вашим ожиданиям.

Предложение 2:

Сделать сравнение без учета регистра, чтобы:

If (LCase(Msg.SenderEmailAddress) = "test@noreplay.com") And _
        (Msg.Subject = "Test: Smartsheet") And _
        (Msg.Attachments.Count >= 1) Then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...