Pao*_*lia 3 c++ email cdo.message
在端口 587(使用 TLS 安全协议的端口)上使用 CDO 发送邮件有什么技巧吗?
\n这是我的 C++ 代码:
\nCDO::IMessagePtr iMsg(__uuidof(CDO::Message));\nCDO::IConfigurationPtr iConf = iMsg->GetConfiguration();\nCDO::FieldsPtr iFields;\n_bstr_t empty("");\niConf->Load(CDO::cdoIIS,empty); // this string constant from import\niFields = iConf->Fields;\n\niFields->Item["https://schemas.microsoft.com/cdo/configuration/smtpserver"]->Value = _variant_t(szServer);\niFields->Item["https://schemas.microsoft.com/cdo/configuration/smtpserverport"]->Value = _variant_t(587);\niFields->Item["https//schemas.microsoft.com/cdo/configuration/sendusing"]->Value = 2;\niFields->Item["https//schemas.microsoft.com/cdo/configuration/smtpauthenticate"]->Value = _variant_t(1); // Basic\niFields->Item["https//schemas.microsoft.com/cdo/configuration/sendusername"]->Value = _variant_t(szUser);\niFields->Item["https//schemas.microsoft.com/cdo/configuration/sendpassword"]->Value = _variant_t(szPassword);\n\nif(iUseSSLTLS == 2)\n iFields->Item["https//schemas.microsoft.com/cdo/configuration/sendtls"]->Value = _variant_t(true);\nelse\n iFields->Item["https//schemas.microsoft.com/cdo/configuration/smtpusessl"]->Value = _variant_t(true);\n\niFields->Update();\netc... etc...\n
Run Code Online (Sandbox Code Playgroud)\n如果我将此代码与以下内容一起使用smtp.gmail.com
:
我得到以下回复:
\n(抱歉...部分消息是意大利语,但请看一下粗体/斜体的消息)
\n显然,如果我使用相同的参数配置 Outlook 2010,它会完美运行。
\n还有一件事,如果我使用端口 465 和 SSL:
\n代码工作正常,但我需要配置 587 端口和 TLS。
\n我最终尝试smtpusessl
并sendtls
一起,将它们变为现实:
iFields->Item["https//schemas.microsoft.com/cdo/configuration/sendtls"]->Value = _variant_t(true);\niFields->Item["https//schemas.microsoft.com/cdo/configuration/smtpusessl"]->Value = _variant_t(true);\n
Run Code Online (Sandbox Code Playgroud)\n我收到以下错误:
\nPao*_*lia 10
两年多后,我找到了一个解决方案,嗯……不是一个解决方案,但现在我知道为什么它不起作用,或者为什么它永远不会起作用。CDO 库似乎存在一个错误:它可以在端口 25 上处理 STARTTLS 命令,但不能在端口 587 上处理。
正如我上面刚刚写的,这是一个错误,我认为微软永远不会纠正它。未来的建议是放弃 CDO 并使用“Power shell”或第三方组件。