Excel 错误代码:80040213源CDO。消息。1连接失败

Excel 错误代码:80040213源CDO。消息。1连接失败,excel,vbscript,cdo.message,Excel,Vbscript,Cdo.message,这真的只是我的第二个VBS脚本,所以要温柔。。。我做了****任何与个人或公司有关的事情,我相信所有这些字段都是正确的。SMTP服务器是正确的,我与提供商进行了双重检查,因为这是我在其他网站上找到的第一个原因。此脚本还将从某个单元格中提取信息并将其粘贴到正文中。。。任何帮助都将不胜感激!另外,它说错误出现在第46行,即“ObjSendMail.Send”。除了电子邮件部分,一切都正常 Dim ObjSendMail Set ObjSendMail = CreateObject("CDO.

这真的只是我的第二个VBS脚本,所以要温柔。。。我做了****任何与个人或公司有关的事情,我相信所有这些字段都是正确的。SMTP服务器是正确的,我与提供商进行了双重检查,因为这是我在其他网站上找到的第一个原因。此脚本还将从某个单元格中提取信息并将其粘贴到正文中。。。任何帮助都将不胜感激!另外,它说错误出现在第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

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

如有疑问,请阅读。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的出站连接)

您可以使用端口扫描器(如或)测试端口的可访问性,或使用
telnet
手动测试端口的可访问性:

telnet smtp.office365.com 587

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

以下代码适用于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

谷歌表示。注意:不使用SSL,而是使用端口587。但CDO不做TLS。有些人声称,如果使用将ssl设置为0,并使用端口25,则可以正常工作(标准smtp)。让我们知道它是不是。端口465/tcp是,现在已经过时了。大多数服务器使用提交(端口587/tcp),而不是Gmail。您指的是哪台服务器,小型服务器。如果我们在使用旧outlook和CDO的旧版本服务器上运行端口25,它就可以工作。我想问题是什么需要更改,以便在当前设置下工作?在运行office 2013或更高版本的2008服务器上运行2007@phd443322:是的,还有Gmail。他们仍然支持传统客户端的SMTPS。好的,我最喜欢你的答案。。。但是对于一个kicker来说,这是如何实现的呢?我们在一台运行Office2003的旧服务器上用旧的CDO下载对它进行了测试,它工作正常。。。2007/2013年it需要做哪些改变?较新版本是否不支持VBS中使用的CDO?@ELewis:您是否检查smtp.office365.com:25是否可从两台主机访问?刚刚通过telnet进行了测试,获得了“220 sn2pr10ca004.outlook.office365.com Microsoft ESMTP邮件服务就绪时间…”,然后是datetimeNevermind。。。先生,你是个天才。我做的第一个telnet是您列出的,所以587端口可以工作,但不是25端口。但是,在测试telnet后的脚本上,仍然收到相同的错误--代码8004213 Source CDO.Message.1我更改了ObjSendMail.Configuration.Fields.Item(“)=587已修复。Sonicwall阻止了来自除一个IP地址端口之外的所有IP地址端口的SMTP电子邮件访问。在我正确配置Sonicwall后,25最终仍能正常工作。但感谢您的帮助!更改ISP后,我发现CDO无法成功指定端口587而不会导致错误。它只能与默认端口25.Office一起工作/365接受端口25,但默认情况下许多ISP会阻止此端口。我上面的代码在切换ISP时出错,然后在我们要求新ISP取消阻止端口25时再次工作。
    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