Access 2021程序发送邮件报错求助:SMTP传输失败
我在Access 2021开发的程序里,用CDO代码发送带错误日志附件的邮件时,突然出现错误:
-2147220975: The message could not be sent to SMTP server. The transport error code was 0x80040217. The server response was not available
账号登录outlook.com正常,之前代码能运行,现在带附件就出问题。以下是排查方向和解决步骤:
恢复SMTP端口配置
Office365的SMTP服务必须指定587端口(标准提交端口),你的代码注释掉了端口配置项,导致CDO可能使用默认25端口,而多数网络环境会封禁25端口,或Office365拒绝非标准端口连接。去掉注释,添加该配置:emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587检查附件路径与权限
确认C:\RDC-POS\Error Logs\ErrorLog.txt文件存在,且当前运行Access的用户有读取权限。若文件不存在或权限不足,CDO处理附件时可能触发底层错误,间接导致SMTP连接失败(错误信息可能不准确)。可先替换成系统路径文件测试,比如取消注释c:\windows\win.ini,验证是否能发送成功,排除路径问题。验证Office365认证方式
若账号开启了MFA(多重身份验证),CDO的基本认证无法使用原密码登录,必须生成应用密码替换代码中的sendpassword值。登录outlook.com时若需要验证码,说明已开启MFA,需在微软账号设置中生成应用密码。检查网络端口连通性
确认运行程序的电脑能访问smtp.office365.com的587端口,用命令行测试:telnet smtp.office365.com 587若连接失败,说明网络防火墙或路由器封禁了该端口,需联系网络管理员开放。
补充CDO超时配置
增加SMTP连接超时设置,避免因网络延迟导致连接失败:emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
内容的提问来源于stack exchange,提问作者juricta

