使用 MS Access VBA 发送 Outlook 电子邮件

问题描述 投票:0回答:1

我正在尝试使用 MS Access VBA 发送 Outlook 电子邮件。我添加了 Outlook 16.0 参考。

代码返回:

应用程序定义的对象定义错误。

.ReplyRecipients.Add

如果我注释掉该行,则会在

.Send
上出错。

如果我在 Outlook 中运行代码,我会得到同样的错误。

Sub TestSend()
    Call SendEmailOutlook("[email protected]", "Test message", "Test message.")
End Sub

Public Sub SendEmailOutlook(strTo As String, strSubject As String, strBody As String)
    
    On Error GoTo SendEmailOutlookErr
    
    Dim strEmail As String
    Dim strMsg As String
    Dim oLook As Object
    Dim oMail As Object
    
    Set oLook = CreateObject("Outlook.Application")
    Set oMail = oLook.createitem(0)
    With oMail
        .ReplyRecipients.Add "[email protected]"
        .to = strTo
        .htmlbody = strBody
        .Subject = strSubject
        .Send
    End With
    Set oMail = Nothing
    Set oLook = Nothing
    Exit Sub
    
SendEmailOutlookErrExit:
        Exit Sub
    
SendEmailOutlookErr:
        MsgBox Err.Description, vbOKOnly, Err.Source & ":" & Err.Number
        Resume SendEmailOutlookErrExit
End Sub
vba email ms-access outlook
1个回答
1
投票

代码中使用了后期绑定技术,所以COM引用是可选的。但是,如果您已经添加了 Outlook COM 引用,则可以声明所有 Outlook 对象,而不仅仅是在声明中包含该对象。它可以提供帮助。在在自动化中使用早期绑定和后期绑定文章中了解有关后期和早期绑定的更多信息。

以下代码行还包含多个属性和方法调用

With oMail
  .ReplyRecipients.Add "[email protected]"

代码有效。但在单独的代码行中声明每个属性或方法是有意义的,这样您就可以轻松找到出错的地方 - 错误发生的确切位置。

MailItem.ReplyRecipients 属性返回一个 Recipients

 集合,表示 Outlook 项目的所有回复收件人对象。使用 
Add
 方法创建一个新的 
Recipient
 对象并将其添加到 
Recipients
 对象。新收件人对象的 
Type
 属性设置为关联的 
AppointmentItem
JournalItem
MailItem
TaskItem
 对象的默认值,并且必须重置以指示其他收件人类型。

Set myItem = Application.CreateItem(olMailItem) Set myRecipient = myItem.Recipients.Add ("Jon Grande") myRecipient.Type = olCC
另一个方面是 Outlook 如何配置为信任客户端计算机上的应用程序,当 Outlook 在没有任何 UI 的情况下实现自动化时,使用 Outlook 对象模型访问某些数据或执行某些操作的应用程序可能会调用安全警告或引发错误。根据程序尝试访问或执行的信息或操作的类型,应用程序可以通过对象模型防护调用三种不同的安全提示:地址簿警告、发送消息警告和执行操作警告。请阅读

Outlook 对象模型安全警告文章了解更多相关信息。

© www.soinside.com 2019 - 2024. All rights reserved.