0

我制作了以下程序,该程序从 MS Access 的表格中获取电子邮件地址列表,并向每个人发送一封测试电子邮件。这是代码:

'Get data back from field birth date
    Set fld = rcdSet.Fields("Email Address")

    'Subject
    olMailItem.Subject = "Mailing List Test"

    'Loop through the records
    For i = 0 To intNumRecords
        'Recipient/s
        olMailItem.To = fld.Value

        'Body of email
        olMailItem.Body = strBodyText

        'Automatically send the email
        olMailItem.Send

       'Reset email item otherwise it won't work
        Set olMailItem = olFolder.Items.Add("IPM.Note")

        'Move to the next record
        rcdSet.MoveNext
    Next

是的,我打开了一个记录集,但没有包含上面的代码。所以这是我的问题:

  1. 我上面的方法正确吗?我必须在循环中重置,olMailItem否则它会返回一个Type Error. 有没有更好的方法来发送多封电子邮件?

  2. 我输入了一封无效的电子邮件,看看会发生什么——它会导致另一个Type Error. 有没有办法检测到退回(Outlook 发送给您的电子邮件,通知您这是一个错误的地址)电子邮件并向Immediate Window(此时出于开发目的)发送消息

谢谢

注 - 增加了邮件申报

'Create Outlook object
Dim olApp As Outlook.Application

'Namespace
Dim olNS As Outlook.NameSpace
Dim olFolder As Outlook.MAPIFolder

'Create a reference to the email item you will use to send the email
Dim olMailItem As Outlook.MailItem

Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")

Set olFolder = olNS.GetDefaultFolder(olFolderInbox)
Set olMailItem = olFolder.Items.Add("IPM.Note")

如果我没有在 for 循环中重新设置 olMailItem,.To则程序的一部分会发生错误 - 上述Type Error

4

1 回答 1

1

我不明白您声明了一个 IPM.Note 类型的对象并尝试发送它,而是声明一个 mailitem。

这应该工作

'Loop through the records
For i = 0 To intNumRecords
     Set olMailItem = olFolder.Items.Add
    'Subject
    olMailItem.Subject = "Mailing List Test"

    'Recipient/s
    olMailItem.To = fld.Value

    'Body of email
    olMailItem.Body = strBodyText

    'Automatically send the email
    olMailItem.Send

    'Release new mailitem
    Set olMailItem = Nothing

    'Move to the next record
    rcdSet.MoveNext

Next

结帐http://msdn.microsoft.com/en-us/library/office/bb220348(v=office.12).aspx以获取有关添加方法的更多信息。

编辑:查看完整循环

于 2013-08-23T13:44:38.443 回答