Vba 如何使用SenderEmailAddress检查收到的电子邮件?

Vba 如何使用SenderEmailAddress检查收到的电子邮件?,vba,outlook,Vba,Outlook,我有一个循环来检查来自乔·多伊的特定主题的电子邮件。该循环工作并保存来自Joe Doe的附件 If (Msg.SenderName = "Doe, Joe") And _ (Msg.Subject = "Test: Smartsheet") And _ (Msg.Attachments.Count >= 1) Then 我想使用SenderEmailAddress而不是SenderName I tested below codes: If (Ms

我有一个循环来检查来自乔·多伊的特定主题的电子邮件。该循环工作并保存来自Joe Doe的附件

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


第二段新代码肯定不起作用,因为
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
运行宏后,立即窗口将包含Joe Doe电子邮件的发件人电子邮件地址列表,以便您可以检查它们是否符合预期

建议2:

使比较不区分大小写,以便:

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

请记住,
MailItem.SenderEmailAddress
MailItem.SenderName
是Outlook对象模型中的只读属性。还请注意,在MAPI级别上,大约有六个与发件人相关的属性,其中最重要的是发件人条目id(用于回复)。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
如果使用是一个选项,则允许设置所有与发件人相关的属性

  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

Debug.Print Msg.SenderEmailAddress是否与您认为的匹配?如果没有,则使用该结果。什么是
Msg
?您能展示一下您是如何设置
Msg