【问题标题】:Automated email generation not resolving multiple recipients自动生成电子邮件无法解析多个收件人
【发布时间】:2012-10-12 17:57:08
【问题描述】:

我有一个创建和保存草稿电子邮件的 VBA 脚本。要添加收件人,它会从链接的 Excel 表中提取一个字符串并将其添加到 Recipients 对象。

对于只有单个收件人的电子邮件,这就像一个魅力。用户需要做的就是打开草稿,花 5 秒钟时间查看它,然后点击发送。

多个联系人同时出现问题(例如“a@aol.com; b@aol.com; c@aol.com”)。当用户点击发送时,Outlook 将弹出一个没有任何建议的检查名称对话框。用户可以通过单击 To 字段并输入虚拟分号来触发自动解析来解决此问题。我想避免这种情况,因为此过程一次会创建超过一百封电子邮件,需要单独审核。

在网上环顾四周,我找到并尝试了返回 false 的 Recipients.ResolveAll。我怀疑原因是 Outlook 试图一次解析整个收件人字符串,而不是单独解析。所以我的问题是:如何让 Outlook 停止显示此检查名称对话框?我是否需要遍历我的电子邮件字符串并解析出各个电子邮件?

Sub CreateEmail(id as Integer)
    Dim OlApp As Outlook.Application
    Dim ObjMail As Outlook.MailItem
    Dim Recipients As Outlook.Recipients
    Dim CurrentRecipient As Outlook.Recipient

    Set OlApp = CreateObject("Outlook.Application")
    Set ObjMail = OlApp.CreateItem(olMailItem)
    Set Recipients = ObjMail.Recipients

    Dim StrEmailTo As String
    StrEmailTo = CurrentDb.OpenRecordset( _
        "Select [Emails] from LU_Contacts where id=" & id & ";").Fields(0)

    Set CurrentRecipient = Recipients.Add(StrConv(StrEmailTo, 3))
    CurrentRecipient.Type = olTo
    ...

    Objmail.Save

【问题讨论】:

    标签: ms-access outlook vba outlook-2007


    【解决方案1】:

    Recipients.Add 使用一个电子邮件地址。

    如果您希望有多个收件人,请为每个收件人致电Recipients.Add

    如果您的字符串以; 分隔格式返回,则类似于:

    dim EmailList as variant
    dim NumEmails as long
    dim AddEmailLoop as long
    
    EmailList=split(StrEmailTo,";")
    NumEmails=UBound(EmailList)
    
    For AddEmailLoop=0 to NumEmails
        Recipients.add(EmailList(AddEmailLoop))
    next
    

    应该允许你添加整个列表

    【讨论】:

    • 看起来很有希望。我会试一试,然后告诉你。
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 2022-12-17
    • 2016-08-21
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    相关资源
    最近更新 更多