注意:ここで紹介しているコードを実際に使用する場合は、SMTPサーバー、送信者、送信先、Reply-Toなどを必ず変更するようにしてください。
ここでは、メールを送信する時に、Reply-To、Sender、X-Mailerなどのヘッダを追加する方法を紹介します。
注意: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を追加してメールを送信する例を示します。
'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()
//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();
上のコードにより送信されるメールのデータは、次のようになります。
x-mailer: DOBON Mailer mime-version: 1.0 from: from@xxx.xxx to: to@xxx.xxx date: 22 Jan 2007 00:12:49 +0900 subject: =?utf-8?B?6aGM5ZCN?= content-type: text/plain; charset=utf-8 content-transfer-encoding: base64 5pys5paH .
上を見て分かるように、このように追加されたヘッダは、先頭に追加されるようです。
補足:MailMessageの他のプロパティで指定できるヘッダや、"Date"などをHeaders.Addで加えても、無視されるようです(位置は、先頭になる)。
SmtpMailクラスでReply-To(メールの返信先)、Sender(メールの実際の送信者)、X-Mailer(メーラーの種類)などのヘッダを追加してメールを送信するには、MailMessageオブジェクトのHeadersプロパティにこれらの項目を追加してから、SmtpMail.Sendメソッドでメールを送信します。
"From"などのMailMessageオブジェクトのプロパティで設定できるヘッダをHeadersプロパティに追加すると、Headersプロパティの値が優先されるようです。しかし、"Date"などはHeadersプロパティに設定しても無視されるようです。
次のコードでは、Reply-ToとX-Mailerをヘッダに追加してメールを送信しています。
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)
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);