【问题标题】:Error Code: 80040213 Source CDO.Message.1 Failed to connect错误代码:80040213 源 CDO.Message.1 连接失败
【发布时间】:2016-02-14 06:24:28
【问题描述】:

这实际上只是我的第二个 VBS 脚本,所以要温柔...我确实删除了任何与个人或公司相关的内容,我相信所有这些字段都是正确的。 SMTP 服务器是正确的,我与提供商再次核对过,因为这是我在其他网站上发现的第 1 个原因。该脚本还将从某个单元格中提取信息并将其粘贴到正文中......任何帮助将不胜感激!它还说错误在第 46 行,即“ObjSendMail.Send”。一切正常,除了电子邮件部分...

    Dim ObjSendMail
Set ObjSendMail = CreateObject("CDO.Message")
Set objExcel = CreateObject("Excel.Application")
StopDate = DateAdd("d", -1 - Weekday(Date), Date)
StartDate = StopDate-13

Dim xlApp
Dim xlWkb
Dim monthEnd
Set xlApp = CreateObject("excel.application")

Set xlWkb = xlApp.Workbooks.Open("******")
xlWkb.RunAutoMacros 1
xlApp.Run ("UpdateAll")
monthEnd = xlApp.cells(2,7).value
xlApp.ActiveWorkbook.SaveAs strSaveFile & "Monthly Revenue Report " & Year(Now) & "." & Month(Now) & "." & Day(Now) & ".xls", 56 

xlApp.Quit
Set xlWkb = Nothing
Set xlApp = Nothing

WScript.Sleep 10000
mailSubject = "Monhtly Revenue Report " & PrevMonthName
mailBody = "The Monthly Revenue Report is no ready. Month End: " & monthEnd

ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 240
ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "********"
ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "********"
ObjSendMail.Configuration.Fields.Update

ObjSendMail.To = "*********"
ObjSendMail.Subject = mailSubject
ObjSendMail.From = "*******"
'ObjSendMail.HTMLBody = "this is the body"
ObjSendMail.TextBody = mailBody
ObjSendMail.Send


'Set ObjSendMail = Nothing

【问题讨论】:

    标签: excel vbscript cdo.message


    【解决方案1】:

    如有疑问,请阅读documentation。 Office365 使用提交端口(587/tcp)进行邮件提交。替换这个:

    ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    

    用这个:

    ObjSendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
    

    并且错误应该会消失(前提是您的网络上允许到端口 587/tcp 的出站连接)。

    您可以使用nmap、scanline 或PortQry 等端口扫描器测试端口的可访问性,或使用telnet 手动测试:

    telnet smtp.office365.com 587
    

    到端口 25/tcp 的出站连接很可能被您的提供商阻止,作为防止/减少僵尸网络垃圾邮件的措施。

    【讨论】:

    • 好的,我最喜欢你的回答...但是对于一个踢球者来说,我们在运行 Office 2003 的旧服务器上使用旧 CDO 下载对其进行了测试,它按原样运行良好...需要什么更改为与 2007/2013 一起使用?新版本不支持 VBS 中使用的 CDO 吗?
    • @ELewis:您是否检查过 smtp.office365.com:25 是否可以从两个主机访问?
    • 刚刚通过 telnet 测试,得到了“220 sn2pr10ca0004.outlook.office365.com Microsoft ESMTP MAIL 服务准备在...”后面是 datetime
    • 没关系...您先生是个天才。我做的第一个 telnet 是你列出的那个,所以端口 587 工作但不是 25。但是在我测试 telnet 后的脚本上仍然得到相同的错误 -.- 代码 8004213 源 CDO.Message.1 我更改了 ObjSendMail.Configuration.Fields。项目 ("schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
    • 已修复。在我正确配置了 sonicwall 后,Sonicwall 阻止了来自除一个 ipaddress 端口 25 之外的所有其他人的 SMTP 电子邮件访问。不过感谢您的帮助!
    【解决方案2】:

    以下代码适用于 smtp.office365.com。您确实指示 smtpusessl=true,但您没有指定端口,否则您会收到错误 5.7.57。

        Sub SMPTTest2()
        Set emailObj = CreateObject("CDO.Message")
    
        emailObj.From = "name@myaddress.com"
        emailObj.To = "name@youraddress.com"
        emailObj.Subject = "Test CDO"
        emailObj.TextBody = "Test CDO"
        'emailObj.AddAttachment "c:\windows\win.ini"
    
        Set emailConfig = emailObj.Configuration
    
    
        emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
        'Exclude the following line    
        'emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
        emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "name@myaddress.com"
        emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mypassword"
        emailConfig.Fields.Update
    
        emailObj.Send
    
        If Err.Number = 0 Then MsgBox "Done"
        End Sub
    

    【讨论】:

    • 在更改 ISP 时,我发现 CDO 无法成功指定端口 587 而不会导致错误。它只能使用默认端口 25。Office/365 接受端口 25,但许多 ISP 默认阻止此端口。我上面的代码在切换 ISP 时出错,然后当我们要求新的 ISP 解除对端口 25 的阻塞时再次工作。
    【解决方案3】:

    来自Unknown email code from CDO.Message send method

    CDO_E_FAILED_TO_CONNECT 0x80040213L The transport failed to connect to the server.
    

    如果使用 SSL,端口通常为 465。

    【讨论】:

    • 谷歌说office.microsoft.com/en-us/outlook-help/…。注意不使用 SSL 并使用端口 587。但 CDO 不执行 TLS。有些人声称如果使用 set ssl to 0 并使用端口 25 它可以工作(标准 smtp)。让我们知道它是否有。
    • 端口 465/tcp 是 SMTPS,现在已经过时了。大多数服务器改为使用提交(端口 587/tcp)。
    • 不是 Gmail。您指的是哪些服务器,次要服务器。
    • 如果我们在具有旧版 Outlook 和 CDO 的旧版本服务器上运行端口 25,则它可以工作。我想问题是需要改变什么才能在当前设置上工作?考虑在运行 Office 2013 或 2007 的 2008 服务器上运行它
    • @phd443322:是的,Gmail 也是。不过,它们仍然支持旧客户端的 SMTPS。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多