QA@IT

C# SMTPでメールが送れない

16160 PV

おはようございます。
お休み中のところすいません。プログラムからのメール送信ができなくて、困っています。

OSはWindows8.1、Visual Studioは2013です。

以下のようなコードです。

 MailMessage objMsg = new MailMessage(_strFromAddress, _strToAddress, _strSubject, _strBody);
            SmtpClient objClient = new SmtpClient();

            objClient.Host = "***.***.ne.jp";
            objClient.Port = 587;
            objClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            objClient.Credentials = new NetworkCredential("id", "pass");


            try
            {
                objClient.Send(objMsg);
            }
            catch(Exception ex)
            {
                throw ex;
            }
            finally
            {
                objMsg.Dispose();
                objClient.Dispose();
            }

実行すると、
「SMTP サーバーにセキュリティで保護された接続が必要であるか、またはクライアントが認証されていません。 サーバーの応答:5.7.0 Authentication required」
とのエラーが出てしまいます。(Outlookのアカウント設定を見ながら、設定したのですが・・・)
あまり関係ないかもしれませんが、プロバイダはso-netを使っています。
何が問題で、どうすれば送信できるようになるのか、わかりません。
Yahooメールなどのサーバーを使えばよいのでしょうか?(Yahooメールのサーバー等の指定の仕方もわかりませんが)
初心者なので、質問の仕方に不手際があったら、ごめんなさい。
よろしくお願いします。

回答

so-netのサイトを見ると、SSL/TLSを使用する設定にしろとありますので、
http://faq.so-net.ne.jp/app/answers/detail/a_id/2065

以下のサイトを参考に

sc.EnableSsl = true;

を付け加えて送信してください。

http://dobon.net/vb/dotnet/internet/smtpssltls.html

編集 履歴 (0)
  • 早速の返信ありがとうございます。
    私もdobonさんのそのページは読みまして、やってはみたのですが、上手くいかなくて質問させて頂きました。(そのことも質問に書くべきだったと思います。すいません)
    -
  • 無事送信できるようになりました。ありがとうございました。 -
  • 「そのページ見てたけどダメだった→できるようになった」の経緯がちょっとわからないですが、最初に参考にしてたのは http://dobon.net/vb/dotnet/internet/smtpclient.html こっちだったってことでしょうかね? -
  • 質問とは関係ないですが変数名のハンガリアン記法は .NETではやめましょう。 -

ご自分の環境(OS, .NET, Visual Studio のバージョンなど)を最初に書いてください。特に SmtpClient の実装は .NET のバージョンで違うところがあるので注意が必要です。

SMTP 認証を行う場合、SmtpClient では以下の問題で、うまく行かないケースがあります。

(1) SmtpClient は AUTH SMTP は LOGIN しかサポートしていない。

(2) LOGIN 認証の方法は標準化されておらず、SMTP サーバーによってはうまくいかない。

自分の経験では Biglobe の SMTP サーバーに対して LOGIN 認証方式を使ったケースが相性の問題でうまく行かなかったです。詳しくは以下のページを見てください。

Web アプリからメール送信
http://surferonwww.info/Hobby/Computer/PcPage7.aspx

上記のページに書いてあるように WireShark などのプロトコルアナライザを利用して、SMTP サーバーとのやりとりをキャプチャしてみることをお勧めします。

編集 履歴 (0)
  • 返信ありがとうございます。OS、Visual Studioのバージョンを追記させていただきました。
    Wiresharkなるツールのご紹介、ありがとうございます。私のスキルではかなり敷居が高そうですが、やってみます。
    -
  • 「特に SmtpClient の実装は .NET のバージョンで違うところがあるので注意が必要です。」と書いたのですが・・・ 今回の問題とは関係ないかもしれませんが、.NET のバージョンで件名のエンコーディングが変わったとかいろいろありますので。 -
  • flied_onion さんが紹介されたページの SSL/TLS の件ですが、その設定が必須で、かつ、それが STARTTLS ではなくて SMTP over SSL でなければならないとすると(so-net に確認してください)、SmtpClient は SMTP over SSL に対応してないのでお手上げです。別の手段を考えないとダメです。 -
  • ありがとうございました。flied_onionさんのアドバイスで、無事送信できました。
    オートバイ、カッコイイですね!私も学生の頃に乗っていました。250ccですけど。(関係ない話ですいません)
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。