Outlook无法识别一个或多个名称

时间:2014-07-08 17:31:50

标签: vba email outlook

我有以下vba代码,它读取邮箱并向任何发送无效代码的用户发送回复作为对邮箱的回复,但有时会收到运行时错误(Outlook无法识别一个或多个名称)。我的问题是,

  1. 是否会创建新的MAPI配置文件解决此问题,或者我是否需要添加解析该地址的代码,如果电子邮件ID不再存在则忽略该代码。如果是的话我该怎么做?
  2. 另外一般情况下,参数不发送特定条件的电子邮件吗?
  3. 以下是我们目前的代码:

          Sub ResponseCodeError(Item As Outlook.MailItem)
          'If not a valid code then send email to the User
          If (Left(Item.Subject, 2) <> "S;" And Left(Item.Subject, 2) <> "N;") Then
          Dim outobj, mailobj
          Set outobj = CreateObject("Outlook.Application")
          Set mailobj = outobj.CreateItem(0)
          With mailobj
         .To = Item.SenderEmailAddress
         .Subject = "Invalid Code"
         .Body = "Please use a valid CODE"
         .Send
          End With
         'Move Email to Error Folder
         mailboxNameString = "mailboxname"
         FolderName = "Error"
    
         Dim olApp As New Outlook.Application
         Dim olNameSpace As Outlook.NameSpace
         Dim olCurrExplorer As Outlook.Explorer
         Dim olCurrSelection As Outlook.Selection
         Dim olDestFolder As Outlook.MAPIFolder
    
         Set olNameSpace = olApp.GetNamespace("MAPI")
         Set olCurrExplorer = olApp.ActiveExplorer
         Set olCurrSelection = olCurrExplorer.Selection
         Set olDestFolder = olNameSpace.Folders(mailboxNameString).Folders(FolderName)
    
         Item.Move olDestFolder
    
         End If
    
         Set outobj = Nothing
         Set mailobj = Nothing
         End Sub
    

5 个答案:

答案 0 :(得分:3)

我曾经遇到同样的错误,我在代码中疯狂搜索了5个小时后就解决了。但它更简单:1个电子邮件地址错误地丢失了域名中的。(点)。

答案 1 :(得分:2)

不是设置To属性,而是调用MailItem.Recipients.Add(返回Recipient对象)。调用Recipient.Resolve - 如果名称无法解析,则返回false。

答案 2 :(得分:1)

问题可能是由于Item的某些属性中的名称,额外字符或空格不正确(特别是To,BCC,CC或集体财产收件人)

也可能是由于在发送邮件之前尚未解析的名称。我不确定,但会认为错误是由于尝试在发送邮件时解析名称而可能由于某些问题而无法解决它们。在发送邮件之前明确解析下面代码这样的名称可以解决问题。

Item.Recipient.ResolveAll可用于在发送邮件之前解析名称。如果所有名称都已成功解析,则返回true。

代码:(Reference

 If Not myRecipients.ResolveAll Then 

 For Each myRecipient In myRecipients 

 If Not myRecipient.Resolved Then 

 MsgBox myRecipient.Name 

 End If 

 Next 

 End If

我测试了代码而没有添加和解析收件人1乘1.(Dmitry建议)

我使用了Item.To,Item.BCC属性。然后使用ResolveAll并仅在所有名称都已解析时发送邮件。

答案 3 :(得分:0)

我刚遇到这个错误;已经工作多年的代码突然触发了&#34; Outlook无法识别一个或多个名称&#34;错误。 我发现收件人是Outlook共享文件夹名称,即。 &#34;我的共享文件夹&#34;无论是Access 2016还是Outlook问题,该名称都无法再解析为其关联的电子邮件地址。将收件人更改为&#34; mysharedfolder@blahblah.com"为我解决了这个问题。

答案 4 :(得分:0)

已解决在我的Outlook中,我有多个联系人使用同一封电子邮件(两家公司由一个联系人/一封电子邮件运行),这造成了问题。我删除了一个联系人,因此Outlook中的联系人列表中没有重复发送电子邮件,现在它可以正常工作了。请注意,我的批次仍向该联系人发送两次电子邮件,该电子邮件是我想要的每个公司的信息。