Windows Live Hotmail のSMTPサーバー経由でメールを送信してみようと思ってサンプル作ったら意外とあっさり動いたので覚書を記載します。

開発と動作確認環境は次の通り

  • Visual Studio 2012 Ultimate
  • .NET 4.5 (サンプル自体は.NET 2.0でOKのはずです)
  • SMTPサーバーは Windows Live Hotmail の SMTPサーバー

今回のサンプルは SMTPクライアントは System.Net.Mail名前空間のSmtpClient を使用します。SmtpClient に設定をべた書きしてもよいのですが、SmtpClient は 構成ファイルの mailSetting 要素を解釈するため、なるべく設定ファイルにSMTPサーバーの設定を記述する方針でプログラムを作成しました。

1. サンプルプログラムの作成

Visual Studio を起動し、コンソールプロジェクトテンプレートを作成して ソリューションを新規作成します。

1.1 構成ファイルの設定

構成ファイルの設定を記述します。アプリケーション構成ファイル App.config に <sytem.net> 要素を追加します。サンプルでは次のように編集します。smtp 要素の deliveryMethod を Network に設定します。 from属性を指定していますが、 本設定はHotmail 経由でメールを送信する場合有効になりません。network 要素では enableSsl を true に設定し SSL を有効にします。 host とportには Windows Live Hotmail の SMTP サーバーのアドレスとポート番号を指定します。userName と password 属性には Windows Live Hotmail のユーザーアカウントとパスワードを設定します。

ユーザー名やパスワードは適当な文字列なので動作させる場合は 適切な値を設定するようにしてください。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- いろんな設定 -->
  <system.net>
    <mailSettings>
      <!-- hotmail の場合 from の設定は無視され network で認証されたHotmailユーザーが差出人になる -->
      <smtp deliveryMethod="Network" from="sample_xxxx@xxxx.xx">
        <network defaultCredentials="false" enableSsl="true" host="smtp.live.com" port="587" userName="aaaa@aaaa.cc" password="xxxxxx"/>
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

SMTPサーバーのポートは OB25PB(Outbound 25 port blocking) に対応するためサブミッションポートを指定しています。

1.2 メール送信プログラムの作成

既定で作成される Program.cs にメール送信を行うサンプルメソッドを記述します。プログラムでは宛先(to) とメールの件名、本文のみを設定しています。

        static void SendMailSample()
        {
            string to = "test@test.jp";
            SmtpClient client = new SmtpClient();
            MailMessage message = new MailMessage();
            message.IsBodyHtml = false;
            message.To.Add(to);
            // hotmail 経由ではFROM偽装はできない.
            //message.From = new MailAddress("aaa@sample.ex", "ダミーユーザー");
            message.Subject = "件名001";
            message.Body = "本文001";


            client.Send(message);
        }

2.まとめ

説明は以上です。ちょっと苦労するかなとおもったらさっくり動きました。

間違いや指摘点などあればご連絡ください。