【问题标题】:Sending Email in Excel with VBA, no Outlook, 64 bit使用 VBA 在 Excel 中发送电子邮件,没有 Outlook,64 位
【发布时间】:2016-12-24 21:40:42
【问题描述】:

我正在使用下面的代码尝试使用 VBA 在 Excel 中发送电子邮件。我不断收到错误消息:

运行时错误“-2147220973 (80040213)”: 传输无法连接到服务器。

我尝试过更改端口(25、465、587)、更改电子邮件服务器(smtp.gmail.com、smtp.live.com),同时尝试了 gmail 和 Hotmail,在两个 gmail 帐户上都启用了不太安全的功能,甚至设置了 Outlook并在 Avast 中禁用了防火墙。

代码如下:

Sub CDO_Mail_Small_Text()
    Dim iMsg As Object
    Dim iConf As Object
    Dim strbody As String
    Dim Flds As Variant



    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")

    iConf.Load -1    ' CDO Source Defaults
    Set Flds = iConf.Fields
    With Flds
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 '587 '465 '25
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdoBasic
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xyz@gmail.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "123456"
        .Update
    End With

    strbody = "Hi there" & vbNewLine & vbNewLine & _
        "This is line 1" & vbNewLine & _
        "This is line 2" & vbNewLine & _
        "This is line 3" & vbNewLine & _
        "This is line 4"

    With iMsg
        Set .Configuration = iConf
        .To = "charlie@gmail.com"
        .CC = ""
        .BCC = ""
        .From = "xyz@gmail.com"
        .Subject = "New figures"
        .TextBody = strbody
        .Send
    End With
End Sub

我现在开始认为这与我使用的是 Windows 10 64 位和 Office 2016 64 位这一事实有关。 - 只是预感,我是 64 位新手,喜欢它,但正在学习。

有人可以建议我是否走在正确的轨道上,以及如何才能让它飞起来。如果我没有走在正确的轨道上,还有什么可能是挂断?

我搜索了搜索问答,但没有找到任何具体内容。

【问题讨论】:

  • 运行时错误是网络相关错误,无法连接到指定的邮件服务器。尝试使用 ssl 连接,看看我的回答它应该可以工作。

标签: excel vba email 32bit-64bit cdo.message


【解决方案1】:

运行时错误是网络相关的错误,无法连接到指定的邮件服务器,尝试使用 ssl connection = True

.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False

【讨论】:

  • Om3r - 感谢您的建议 - 尝试了真假,完全相同的错误。在某种程度上,我也有一个小更新。我确实得到了另一个代码(与此处发布的代码大不相同)可以使用 Outlook 工作,但我使用 Hotmail 帐户作为发件人(Hotmail 帐户是通过 Outlook 设置的)。我们确定以上内容适用于 64 位吗?我看过一些相关的帖子,表明它不是,但我不确定
  • @awsmitty 您不需要 Outlook,我刚刚使用 GMail 设置在 Excel 2010 上进行了测试。它有效 - 确保 From 或 Sender 字段相同。
  • Om3r - 您使用的是 64 位。我真的不想使用 Outlook。如果您使用的是 64 位操作系统和 Office,请告诉我
  • 我使用的是 Excel 2010 32 位,我家有 64 位,稍后测试。你在 2010 年吗?
  • 没有 Windows 10、64 位和 Office 2016、64 位。请让我知道会发生什么。当我在谷歌上搜索 Microsoft CDO for Windows 2000 时,我确实看到一些线程表明参考库不适用于 64 位,因此我无法解决这个问题。那个帖子我再也找不到了
【解决方案2】:

在 Google 的 GMail 网站上,您必须打开此功能才能使 CDO 工作。

在您的 Gmail 页面点击:

设置 - 帐户和导入 - 其他 Google 帐户设置 - [在页面的最底部] 允许安全性较低的应用程序

第一次使用电子邮件时,您必须根据记忆单击电子邮件中的链接(已经有几年了)。

【讨论】:

  • 库尔特 - 感谢您的回复。我仔细检查了两个帐户上不太安全的应用程序设置,两者都设置为不太安全。我在两个帐户上从一个帐户向另一个帐户发送了一封电子邮件,然后打开了电子邮件(我假设这就是您所说的“单击链接”的意思),然后运行了代码。结果相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 2018-07-24
相关资源
最近更新 更多