Skip to main content.

Saturday, October 21, 2006

C#でのメール送信サンプル

MS Visual C# 2005 Express Editionでのメール送信サンプルです

.NET Framework2.0では、SMTPを利用してメールを送信するSmtpClientクラスが新たに追加になりました。これは以前のバージョンのSmtpMailクラスに変わるものです。SmtpMailクラスは、CDO(Collaboration Data Objects for Windows 2000)を利用してメールを送信していましたが、SmtpClientクラスは、CDOを利用しません。これにより、OSに依存することはなくなりました。

このSmtpClientを利用したサンプルです。基本的なメール送信機能の他にPOP Before SMTPの機能を実装しました。以前のBASP21を利用したメール送信の記事でも書きましたが、POP Before SMTPでは通常、実際にメールを受信するのではなく、ユーザ名、パスワードを指定して、STATコマンドを実行します。C#(.NET Framwork2.0)では、メール受信というクラスはないようで、単純にSocketのTcpClientクラスでSTATコマンドを実行します。

TcpClientでのメール受信については、たとえばですが参考サイトが参考になるかと思います。メール受信に関して詳細な説明とプログラムがあります。

実行画面


以下、プログラムの一部です。プログラム全体は、お手数ですが、ダウンロードしてご覧下さい。

private void cmdSend_Click(object sender, EventArgs e)
{
  //砂時計
  Cursor.Current = Cursors.WaitCursor;

  //POP Before SMTPの実行
  if(chkPOP.Checked) 
  {
    bool bret = execPOPStat();
    if(!bret)
    {
      return;
    }
  }

  //メール送信
  try
  {
    SmtpClient client = new SmtpClient(txtSMTPServer.Text);
    MailMessage mess = new MailMessage(txtFrom.Text, txtTo.Text);

    mess.Subject = txtTitle.Text;
    mess.SubjectEncoding = Encoding.GetEncoding("ISO-2022-JP");

    mess.Body = txtBoxBody.Text;
    mess.BodyEncoding = Encoding.GetEncoding("ISO-2022-JP");

    //添付ファイル
    foreach (ListViewItem viewitem in lstAttch.Items)
    {
      Attachment attache = new Attachment(viewitem.Text);
      mess.Attachments.Add(attache);
    }

    //送信
    client.Send(mess);

  }catch(Exception ex)
  {
    MessageBox.Show(ex.Message);
    Cursor.Current = Cursors.Default; //マウスカーソル

    return;
  }

  //マウスカーソル
  Cursor.Current = Cursors.Default;

  MessageBox.Show("送信完了");
}

Visual C# 2005 Express Editionのファイル一式を以下に置きました。
プロジェクトファイル一式

動作確認しましたが、動作は保証できません。このプログラムを利用しての不具合、不利益には一切の責任を負いかねます。ご了承ください。

参考サイト
十兵衛のブログ:メールを受信する


Windowsプログラミング関連記事