イベントのトリガーに基づいて電子メールを送信するために CDO を利用する C++ コードがあります。以下のコードの一部を含めました。問題は、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;