【问题标题】:email using Access and VBA without MAPI使用没有 MAPI 的 Access 和 VBA 发送电子邮件
【发布时间】:2011-03-01 22:30:21
【问题描述】:

我想使用 VBA 在无人值守的情况下从 Microsoft Access 发送电子邮件。我知道内置方法“SendObject”使用 MAPI 表示安全提示和类似 Outlook 的配置。由于我想使用任务计划程序来启动不同的报告,因此我倾向于远离 MAPI,并希望使用其他解决方案。不是运输申请,而是内部申请。想法?

【问题讨论】:

    标签: ms-access email vba ms-access-2007 mapi


    【解决方案1】:

    这是我使用 CDO 和 gmail 的测试代码。

    Sub mtest()
    
    Dim cdoConfig
    Dim msgOne
    
    Set cdoConfig = CreateObject("CDO.Configuration")
    With cdoConfig.Fields
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = 465
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "gmailname"
    .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "yourpw"
    
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    
    .Update
    End With
    
    Set msgOne = CreateObject("CDO.Message")
    Set msgOne.Configuration = cdoConfig
    msgOne.To = "target@target.com"
    msgOne.From = "I@dontThinkThisIsUsed.com"
    msgOne.Subject = "Test email"
    msgOne.TextBody = "It works just fine"
    msgOne.send
    End Sub
    

    【讨论】:

    • 一直在寻找与 gmail 完美配合的代码。我搞砸了 smtpauthenticate 配置。谢谢!
    【解决方案2】:

    您需要一个允许您发送电子邮件的 SMTP 服务器。那么就需要使用CDO消息对象了。

    【讨论】:

    • 我认为 CDO 是随 IIS 一起提供的 - 我在客户端上使用它?对于 SMTP 服务器,我可以使用 gmail 之类的东西吗?
    • 是的,在 VBA 中使用它。我还没有发现任何将其限制为 IIS 甚至 Exchange 的内容,但您的提供商可能存在问题。我对gmail的了解还不够。我猜他们是否允许您通过 SMTP 与 Outlook 连接(我知道您不想对您的应用程序执行此操作,但这将是一个很好的连接测试。)。
    • 我确实是用gmail做例子的;我认为他们使用了一个不寻常的端口或其他东西。我会试试 CDO。
    【解决方案3】:

    您可能会发现 Tony Toews 的 Access EMail FAQ 很方便。

    【讨论】:

    • 我投了反对票,因为答案是一个存根,并且您链接到的页面有非工作代码和一些不针对解决方案的建议(即使在 2009 年)。
    【解决方案4】:

    我是这样做的,注意,你必须安装 Outlook 才能工作。

    
    Sub btnSendEmail_Click()
        Dim OutApp As Object
        Dim OutMail As Object
    
        Application.ScreenUpdating = False
        Set OutApp = CreateObject("Outlook.Application")
        OutApp.Session.Logon
    
        strBody = "<html><head></head><body>"
        strBody = strBody & "Your message goes here"
        strBody = strBody & "</body></html>"
    
        Set OutMail = OutApp.CreateItem(0)
    
        OutMail.To = "name@example.com"
        OutMail.BCC = "bcc@example.com"
        OutMail.Subject = "Test message"
        OutMail.HTMLBody = strBody
    
    
        OutMail.Send  'Send | Display
        Set OutMail = Nothing
    End Sub
    

    【讨论】:

    • 我不想使用 Outlook,因为它可能会在未安装 Outlook 的帐户中无人看管地运行。
    【解决方案5】:

    Outlook Redemption 是免费的并且使用非常广泛:http://www.dimastr.com/redemption/

    它非常接近原始的 Outlook 对象模型,因此学习曲线很简单:)

    【讨论】:

      猜你喜欢
      • 2021-02-14
      • 2011-09-28
      • 2021-11-21
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      相关资源
      最近更新 更多