1

我有 C++ 代码,它利用 CDO 根据触发事件发送电子邮件。我在下面包含了部分代码。问题是,当应用程序在带有嵌入式破折号(例如 SERVER-ABC-123)的服务器上运行时,客户站点的某些邮件服务器将拒绝请求,并显示 550 错误以表示中继被拒绝。HELO 数据包包含带有破折号的服务器名称,我认为这是问题的根本原因。

是否有强制 CDO 包含 FQDN 的方法?

这是 SMTP 跟踪信息

客户端 => 服务器:HELO SMCABUTELC03\x0d\x0a 服务器 => 客户端:250 int2.unimax.pvt 你好 sm-cabu-telc03.swna.wdpr.unimax.com [192.168.24.25],很高兴见到你\x0d\x0a客户端 => 服务器:MAIL FROM:\x0d\x0a 服务器 => 客户端:550 5.7.1 ... 中继被拒绝。发件人:corp.2n.admin@sm-cabu-telc03.swna.wdpr.unimax.com 不以 SMCABUTELC03\x0d\x0a 结尾

CDO::IMessage* cdoMessage = NULL;
CDO::IConfiguration* cdoConfiguration = NULL;

cdoConfiguration->get_Fields(&cdoFields);

cdoFields->get_Item( _variant_t( cdoSendUsingMethod), &cdoField1);
cdoField1->put_Value( _variant_t( (long) CDO::cdoSendUsingPort));
cdoField1->Release();
cdoField1 = NULL;

cdoFields->get_Item( _variant_t( cdoSMTPServer), &cdoField2);
cdoField2->put_Value( _variant_t( emailHostName.gets()));
cdoField2->Release();
cdoField2 = NULL;

cdoFields->get_Item( _variant_t( cdoSMTPServerPort), &cdoField3);
cdoField3->put_Value( _variant_t( emailHostPort));
cdoField3->Release();
cdoField3 = NULL;

cdoFields->get_Item( _variant_t( cdoSMTPAuthenticate), &cdoField4);
if ( emailUserName.size() == 0 )
{
    cdoField4->put_Value( _variant_t( (long) CDO::cdoAnonymous));
}
else
{
    cdoField4->put_Value( _variant_t( (long) CDO::cdoBasic));
}
cdoField4->Release();
cdoField4 = NULL;
4

0 回答 0