SMTPサーバーを利用してプログラムからメールを送信する - C#

SMTPサーバーを利用してプログラムからメールを送信するコードを紹介します。

概要

C#でSMTPサーバーを利用してメールを送信するコードを紹介します。
この記事ではポート25番を利用して認証が不要なSMTPサーバーでメールを送信する例を紹介します。現在ほとんどのプロバイダーでは、OP25Bが適用されているため、この記事のコードを利用して、ポート25を利用してメールを送信できるSMPサーバーは限られていることに注意してください。 (回線を契約しているプロバイダー、イントラネット、ローカルネットワークに構築されたSMTPサーバー等に限られます。)
インターネットに公開されているSMTPサーバーを利用する場合はサブミッションポート(ポート587)を利用する必要があり、送信時にはSMTP Auth, POP before SMTP などの認証が必要になります。
SMTP Authを利用してメールを送信する場合はこちらの記事を、GmailのSMTPサーバーを利用する場合のコードについてはこちらの記事を参照してください。

プログラム例

Windows Formアプリケーションを新規に作成します。

UI

下図のUIを作成します。ボタンと複数行のテキストボックスを配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Mail;

namespace SimpleSmtp
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      MailMessage msg = new MailMessage();
      msg.From = new MailAddress("auto@ipentec.net", "自動送信メール");
      msg.To.Add(new MailAddress("ipentec.sample.email@gmail.com", "SampleMan"));
      msg.Subject = "メッセージ件名";
      msg.Body = "メール本文です。";
      
      SmtpClient sc = new SmtpClient();

      sc.Host = "mail.xxxxxxxx.ne.jp";
      sc.Port = 25;
     
      sc.Send(msg);
      msg.Dispose();

      textBox1.Text+="メールを送信しました\r\n";
    }
  }
}

解説

メールのメッセージ、送信先、送信者などメールの送信データはMailMessageオブジェクトを利用します。
下記のコードではMailMessageオブジェクトを作成し、Fromプロパティにメールの送信者を、Toプロパティにメールの宛先を、Subjectプロパティにメールのサブジェクトを、Bodプロパティにメールメッセージの本文を設定しています。
  MailMessage msg = new MailMessage();
  msg.From = new MailAddress("auto@ipentec.net", "自動送信メール");
  sg.To.Add(new MailAddress("ipentec.sample.email@gmail.com", "SampleMan"));
  msg.Subject = "メッセージ件名";
  msg.Body = "メール本文です。";

メールの送信処理はSmtpClientオブジェクトを利用します。接続先のSMTPサーバーのホスト名や接続するポート番号などをSmtpClientオブジェクトに設定します。
  SmtpClient sc = new SmtpClient();

  sc.Host = "mail.xxxxxxxx.ne.jp";
  sc.Port = 25;

メールの送信はSmtpoClientオブジェクトのSendメソッドを呼び出します。引数に送信するメールのMailMessageオブジェクトを与えます。送信後MailMessageオブジェクトのDisposeメソッドを呼び出しオブジェクトを破棄します。
  sc.Send(msg);
  msg.Dispose();

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。メールが送信されます。送信が完了すると「メールを送信しました」の文字列がテキストボックスに表示されます。


メールを確認します。コードに設定した送信元が「自動送信メール」のメールが届いています。


メールの本文を確認します。コードで記述した本文と同じ内容でメールが届いています。


プログラムから、SMTPを利用してメールを送信できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2018-05-26
作成日: 2018-05-22
iPentec all rights reserverd.