DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

Reply-To、Sender、X-Mailerなどのヘッダを追加してメールを送信する

注意:ここで紹介しているコードを実際に使用する場合は、SMTPサーバー、送信者、送信先、Reply-Toなどを必ず変更するようにしてください。

ここでは、メールを送信する時に、Reply-To、Sender、X-Mailerなどのヘッダを追加する方法を紹介します。

SmtpClientクラスを使用する方法

注意:SmtpClientクラスは、.NET Framework 2.0以降でしか使用できません。また、ここではSmtpClientクラスについて詳しくは説明しませんので、まずは「SmtpClientクラスを使ってメールを送信する」をご覧ください。

.NET Framework 2.0以降でサポートされているSmtpClientクラスを使用する時は、Reply-To(メールの返信先)とSender(メールの実際の送信者)はそれぞれ、ReplyToList(.NET Framework 3.5以前では、ReplyTo)とSenderプロパティで指定できます。これらの具体例は、「CC、BCC、添付ファイル、優先順位などを指定してメールを送信する」をご覧ください。

X-Mailer(メーラーの種類)などのヘッダを追加してメールを送信するには、MailMessage.Headerプロパティにヘッダを追加します。

Headerプロパティに追加したヘッダは、文字コードUTF-8のBase64でエンコードされます。ただし、.NET Framework 4.0からは、MailMessage.HeadersEncodingプロパティでヘッダのエンコーディングを変更することができます。

以下に、X-Mailerを追加してメールを送信する例を示します。

VB.NET
コードを隠すコードを選択
'MailMessageの作成
Dim msg As New System.Net.Mail.MailMessage( _
    "from@xxx.xxx", "to@xxx.xxx", "題名", "本文")

'メールヘッダを追加
'X-Mailerを追加
msg.Headers.Add("X-Mailer", "DOBON Mailer")

Dim sc As New System.Net.Mail.SmtpClient()
'SMTPサーバーなどを設定する
sc.Host = "localhost"
sc.Port = 25
sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
'メッセージを送信する
sc.Send(msg)

'後始末
msg.Dispose()
'後始末(.NET Framework 4.0以降)
sc.Dispose()
C#
コードを隠すコードを選択
//MailMessageの作成
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(
    "from@xxx.xxx", "to@xxx.xxx", "題名", "本文");

//メールヘッダを追加
//X-Mailerを追加
msg.Headers.Add("X-Mailer", "DOBON Mailer");

System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
//SMTPサーバーなどを設定する
sc.Host = "localhost";
sc.Port = 25;
sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
//メッセージを送信する
sc.Send(msg);

//後始末
msg.Dispose();
//後始末(.NET Framework 4.0以降)
sc.Dispose();

上のコードにより送信されるメールのデータは、次のようになります。

上を見て分かるように、このように追加されたヘッダは、先頭に追加されるようです。

補足:MailMessageの他のプロパティで指定できるヘッダや、"Date"などをHeaders.Addで加えても、無視されるようです(位置は、先頭になる)。

SmtpMailクラスを使用する方法

SmtpMailクラスでReply-To(メールの返信先)、Sender(メールの実際の送信者)、X-Mailer(メーラーの種類)などのヘッダを追加してメールを送信するには、MailMessageオブジェクトのHeadersプロパティにこれらの項目を追加してから、SmtpMail.Sendメソッドでメールを送信します。

"From"などのMailMessageオブジェクトのプロパティで設定できるヘッダをHeadersプロパティに追加すると、Headersプロパティの値が優先されるようです。しかし、"Date"などはHeadersプロパティに設定しても無視されるようです。

次のコードでは、Reply-ToとX-Mailerをヘッダに追加してメールを送信しています。

VB.NET
コードを隠すコードを選択
Dim mm As New System.Web.Mail.MailMessage

'送信者
mm.From = "sender <sender@xxx.xx.com>"
'あて先
mm.To = "recipient1 <recipient1@xxx.xx.com>"
'件名
mm.Subject = "テスト"
'本文
mm.Body = "こんにちは。これはテストです。"
'本文の文字コードを指定する(ここではJIS)
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220)

'ヘッダを追加する
'Reply-Toを追加する
mm.Headers.Add("Reply-To", "replyto@xxx.xx.com")
'X-Mailerを追加する
mm.Headers.Add("X-Mailer", "DOBON Mailer")

'SMTPサーバーを指定する
System.Web.Mail.SmtpMail.SmtpServer = "(SMTPサーバーを指定する)"
'送信する
System.Web.Mail.SmtpMail.Send(mm)
C#
コードを隠すコードを選択
System.Web.Mail.MailMessage mm =
    new System.Web.Mail.MailMessage();

//送信者
mm.From = "sender <sender@xxx.xx.com>";
//あて先
mm.To = "recipient1 <recipient1@xxx.xx.com>";
//件名
mm.Subject = "テスト";
//本文
mm.Body = "こんにちは。これはテストです。";
//本文の文字コードを指定する(ここではJIS)
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220);

//ヘッダを追加する
//Reply-Toを追加する
mm.Headers.Add("Reply-To", "replyto@xxx.xx.com");
//X-Mailerを追加する
mm.Headers.Add("X-Mailer", "DOBON Mailer");

//SMTPサーバーを指定する
System.Web.Mail.SmtpMail.SmtpServer = "(SMTPサーバーを指定する)";
//送信する
System.Web.Mail.SmtpMail.Send(mm);
  • 履歴:
  • 2007/1/22 「.NET Framework 2.0以降で、SmtpClientクラスを使用する方法」を追加。
  • 2013/6/24 SmtpClient.Disposeを呼び出すようにしたなど。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。