System.Web.Mailが機能するところでSystem.Net.Mailが失敗する理由
質問
System.Net.MailとSystem.Web.Mailの両方をGMailで動作させることはできますが、両方をsmtp.att.yahoo.comで動作させることはできません。
自分のWeb.configキーからSMTP設定を取得します。これらの設定は、System.Web.Mailを使用して送信すると機能しますが、System.Net.Mailで失敗します。
<add key="SmtpServer" value="smtp.att.yahoo.com"/>
<add key="SmtpServerAuthenticateUser" value="ctrager@sbcglobal.net"/>
<add key="SmtpServerPort" value="465"/>
<add key="SmtpUseSSL" value="1"/>
<add key="SmtpServerAuthenticatePassword" value="MY PASSWORD"/>
ここに私の設定を取得し、GMailで動作し、att.yahooで失敗するコードを示します:
SmtpClient smtp;
if (!string.IsNullOrEmpty(Util.get_setting("SmtpServer", "")))
{
smtp = new SmtpClient(Util.get_setting("SmtpServer", ""));
}
else
{
smtp = new SmtpClient();
}
if (!string.IsNullOrEmpty(Util.get_setting("SmtpServerAuthenticatePassword", "")))
smtp.Credentials = new System.Net.NetworkCredential(
Util.get_setting("SmtpServerAuthenticateUser", ""),
Util.get_setting("SmtpServerAuthenticatePassword", ""));
if (!string.IsNullOrEmpty(Util.get_setting("SmtpServerPort", "")))
smtp.Port = int.Parse(Util.get_setting("SmtpServerPort", ""));
if (Util.get_setting("SmtpUseSSL", "0") == "1")
smtp.EnableSsl = true;
smtp.Send(message);
これは私の問題ですか?
解決
答えを学びました。答えは:
System.Net.Mailは「暗黙的」をサポートしていないためSSL、「明示的」のみSSL。
他のヒント
System.Net.Mailを介した暗黙的および明示的なSSL接続に関する以前の回答は、まったく正しいものです。私がこの障害を乗り越えることができた方法は、現在廃止されているSystem.Web.Mailを使用する必要なく、CDO(Collaborative Data Objects)を使用することでした。
詳細と別のスタックオーバーフローポストの例を示しました( Gmail SMTP by C#.Net errors on all ports )興味がある場合。それ以外の場合は、 http://support.microsoft.com/kb/310212のKB記事に直接アクセスできます。 。
これがお役に立てば幸いです!
Gimelの答えは、最初から最後までです。彼は新しいSystem。 Net .Mailライブラリを使用すると言いますが、問題はSystem。 Net .MailがSystemのようなポート465のSSLに対して機能しないことです。 Web .Mailは動作しました/動作しました!
終日、同じ設定で頭を打ちましたSystem。 Web .Mail WORKS、およびSystem。 Net .Mailは動作しません(少なくとも私がテストしていたSMTPサーバーの場合)、そしてここで私は人生で最高のものを得るために常にマイクロソフトの最新の製品にアップグレードすべきだと考えていました。 :-(
M $ブログへのリンクはすべてを述べているようです。 &quot; System.Net.Mailは&#8220;明示的なSSL&#8221;のみをサポートしています。&quot;そして、私がテストしているSMTPサーバーは暗黙的なSSLを必要としていると仮定しています(これはYahooサーバーです)。
「アップグレード」以来、新しいAPIを使用すると、暗黙的なSSLを必要とするサーバーを使用しているユーザーの機能が疑いなく機能しなくなる可能性があります。この場合。それでも警告のみでコンパイルできる場合は、それらの警告を無効にして(覚えている場合は0618)、トラックを続けます。ああ、あなたはあなたのアプリケーションが常に設定ファイル経由でビルドしてテストした.NETフレームワークバージョンに対して実行されることを保証したいと思うかもしれません。もしM $が古いAPIをリッピングした場合、あなたのアプリケーションは安全です。