注意:ここで紹介しているコードを実際に使用する場合は、SMTPサーバー、送信者、送信先、CC、BCCなどを必ず変更してください。
ここでは、メールを送信する時に、CC、BCCを複数指定する、添付ファイルを指定する、HTMLメールとして送る、優先順位を指定するなどの方法紹介します。
注意:SmtpClientクラスは、.NET Framework 2.0以降でしか使用できません。また、ここではSmtpClientクラスについて詳しくは説明しませんので、まずは「SmtpClientクラスを使ってメールを送信する」をご覧ください。
.NET Framework 2.0以降でサポートされているSmtpClientクラスを使用する具体例を以下に示します。ここでは、CC、BCC、ReplyTo、Sender、優先順位、添付ファイル、配達の通知を設定しています。
'MailMessageの作成 Dim msg As New System.Net.Mail.MailMessage() '送信者 msg.From = New System.Net.Mail.MailAddress("sender@xxx.xxx") '宛先 msg.To.Add(New System.Net.Mail.MailAddress("recipient@xxx.xxx")) 'あて先をもう一人追加 msg.To.Add(New System.Net.Mail.MailAddress("sato@xxx.xxx")) 'CC msg.CC.Add(New System.Net.Mail.MailAddress("cc@xxx.xxx")) 'BCC msg.Bcc.Add(New System.Net.Mail.MailAddress("bcc@xxx.xxx")) 'ReplyTo msg.ReplyToList.Add(New System.Net.Mail.MailAddress("replyto@xxx.xxx")) '.NET Framework 3.5以前では、以下のようにする 'msg.ReplyTo = New System.Net.Mail.MailAddress("replyto@xxx.xxx") 'Sender msg.Sender = New System.Net.Mail.MailAddress("master@xxx.xxx") '件名 msg.Subject = "こんにちは" '本文 msg.Body = "こんにちは。" + vbCrLf + vbCrLf + "それではまた。" '優先順位を「重要」にする msg.Priority = System.Net.Mail.MailPriority.High 'メールの配達が遅れたとき、失敗したとき、正常に配達されたときに通知する msg.DeliveryNotificationOptions = _ System.Net.Mail.DeliveryNotificationOptions.Delay Or _ System.Net.Mail.DeliveryNotificationOptions.OnFailure Or _ System.Net.Mail.DeliveryNotificationOptions.OnSuccess '"C:\test\1.gif"を添付する Dim attach1 As New System.Net.Mail.Attachment("C:\test\1.gif") msg.Attachments.Add(attach1) 'さらに、"C:\test\2.gif"も添付する Dim attach2 As New System.Net.Mail.Attachment("C:\test\2.gif") msg.Attachments.Add(attach2) 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(); //送信者 msg.From = new System.Net.Mail.MailAddress("sender@xxx.xxx"); //宛先 msg.To.Add(new System.Net.Mail.MailAddress("recipient@xxx.xxx")); //あて先をもう一人追加 msg.To.Add(new System.Net.Mail.MailAddress("sato@xxx.xxx")); //CC msg.CC.Add(new System.Net.Mail.MailAddress("cc@xxx.xxx")); //BCC msg.Bcc.Add(new System.Net.Mail.MailAddress("bcc@xxx.xxx")); //ReplyTo msg.ReplyToList.Add(new System.Net.Mail.MailAddress("replyto@xxx.xxx")); //.NET Framework 3.5以前では、以下のようにする //msg.ReplyTo = new System.Net.Mail.MailAddress("replyto@xxx.xxx"); //Sender msg.Sender = new System.Net.Mail.MailAddress("master@xxx.xxx"); //件名 msg.Subject = "こんにちは"; //本文 msg.Body = "こんにちは。\r\n\r\nそれではまた。"; //優先順位を「重要」にする msg.Priority = System.Net.Mail.MailPriority.High; //メールの配達が遅れたとき、失敗したとき、正常に配達されたときに通知する msg.DeliveryNotificationOptions = System.Net.Mail.DeliveryNotificationOptions.Delay | System.Net.Mail.DeliveryNotificationOptions.OnFailure | System.Net.Mail.DeliveryNotificationOptions.OnSuccess; //"C:\test\1.gif"を添付する System.Net.Mail.Attachment attach1 = new System.Net.Mail.Attachment("C:\\test\\1.gif"); msg.Attachments.Add(attach1); //さらに、"C:\test\2.gif"も添付する System.Net.Mail.Attachment attach2 = new System.Net.Mail.Attachment("C:\\test\\2.gif"); msg.Attachments.Add(attach2); 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();
上記のコードを実行すると、次のようなデータがサーバーに送信されます。なお、添付ファイルのデータ部分は、省略しています。
mime-version: 1.0 from: sender@xxx.xxx to: recipient@xxx.xxx, sato@xxx.xxx cc: cc@xxx.xxx reply-to: replyto@xxx.xxx x-priority: 1 priority: urgent importance: high date: 21 Jan 2007 23:15:46 +0900 subject: =?utf-8?B?44GT44KT44Gr44Gh44Gv?= content-type: multipart/mixed; boundary=--boundary_0_e758f355-57db-43f5-9ffc-75cbc412a123 ----boundary_0_e758f355-57db-43f5-9ffc-75cbc412a123 content-type: text/plain; charset=utf-8 content-transfer-encoding: base64 44GT44KT44Gr44Gh44Gv44CCDQoNCuOBneOCjOOBp+OBr+OBvuOBn+OAgg== ----boundary_0_e758f355-57db-43f5-9ffc-75cbc412a123 content-type: application/octet-stream; name=test1.gif content-transfer-encoding: base64 (省略) ----boundary_0_e758f355-57db-43f5-9ffc-75cbc412a123 content-type: application/octet-stream; name=test2.gif content-transfer-encoding: base64 (省略) ----boundary_0_e758f355-57db-43f5-9ffc-75cbc412a123-- .
DeliveryNotificationOptionsプロパティは、RCPTのオプションである「RCPT TO:<メールアドレス> NOTIFY=SUCCESS,DELAY,FAILURE」をつけるための設定です。これにより、メールの配信通知(Delivery Status Notification)を受け取ることができます。ただし、サーバーが対応している必要があります。
なお、「フィードバック: SMTPClient Not setting DeliveryNotificationOptions for each message sent」によると、以前はこの機能が正常に機能せず、複数のメールを送信するとはじめのメールだけが有効になるようでしたが、現在では修正されたそうです。
.NET Framework 1.1以前では、SmtpMailクラスを使ってメールを送信します。SmtpMailクラスを使ってメールを送信する基本的な方法は、「SMTPでメールを送信する」をご覧ください。
早速ですが、以下に具体的なコードを示します。
Dim mm As New System.Web.Mail.MailMessage() Dim attachment As System.Web.Mail.MailAttachment '送信者 mm.From = "sender <sender@xxx.xx.com>" 'あて先 mm.To = "recipient1 <recipient1@xxx.xx.com>" 'CC(複数指定するときはセミコロンで区切る) mm.Cc = "cc1 <cc1@xxx.xx.com>; cc2 <cc2@xxx.xx.com>; cc3@xxx.xx.com" 'BCC(複数指定するときはセミコロンで区切る) mm.Bcc = "bcc1@xxx.xx.com; bcc2@xxx.xx.com" '件名 mm.Subject = "テスト" '本文 mm.Body = "こんにちは。これはテストです。" '本文の文字コードを指定する(ここではJIS) mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220) '添付ファイルの指定(UUEncodeでエンコードされる) attachment = New System.Web.Mail.MailAttachment("test1.jpg") 'Base64でエンコードするときは次のようにする 'attachment = New System.Web.Mail.MailAttachment("test1.jpg", _ ' Web.Mail.MailEncoding.Base64) 'Attachmentsに追加する mm.Attachments.Add(attachment) '同様にして複数の添付ファイルを追加できる 'HTMLメールとして送るときは次のようにする 'mm.BodyFormat = Web.Mail.MailFormat.Html 'メールの優先順位を指定する(ここでは優先順位を高くする) mm.Priority = Web.Mail.MailPriority.High 'SMTPサーバーを指定する System.Web.Mail.SmtpMail.SmtpServer = "(SMTPサーバーを指定する)" '送信する System.Web.Mail.SmtpMail.Send(mm)
System.Web.Mail.MailMessage mm = new System.Web.Mail.MailMessage(); System.Web.Mail.MailAttachment attachment; //送信者 mm.From = "sender <sender@xxx.xx.com>"; //あて先 mm.To = "recipient1 <recipient1@xxx.xx.com>"; //CC(複数指定するときはセミコロンで区切る) mm.Cc = "cc1 <cc1@xxx.xx.com>; cc2 <cc2@xxx.xx.com>; cc3@xxx.xx.com"; //BCC(複数指定するときはセミコロンで区切る) mm.Bcc = "bcc1@xxx.xx.com; bcc2@xxx.xx.com"; //件名 mm.Subject = "テスト"; //本文 mm.Body = "こんにちは。これはテストです。"; //本文の文字コードを指定する(ここではJIS) mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220); //添付ファイルの指定(UUEncodeでエンコードされる) attachment = new System.Web.Mail.MailAttachment("test1.jpg"); //Base64でエンコードするときは次のようにする //attachment = new System.Web.Mail.MailAttachment("test1.jpg", // System.Web.Mail.MailEncoding.Base64); //Attachmentsに追加する mm.Attachments.Add(attachment); //同様にして複数の添付ファイルを追加できる //HTMLメールとして送るときは次のようにする //mm.BodyFormat = System.Web.Mail.MailFormat.Html; //メールの優先順位を指定する(ここでは優先順位を高くする) mm.Priority = System.Web.Mail.MailPriority.High; //SMTPサーバーを指定する System.Web.Mail.SmtpMail.SmtpServer = "(SMTPサーバーを指定する)"; //送信する System.Web.Mail.SmtpMail.Send(mm);
複数のファイルを添付する方法をもうすこし詳しく説明しましょう。複数の添付ファイルを送信するには、送信する添付ファイルごとにMailAttachmentオブジェクトを作成し、そのすべてをMailMessage.Attachmentsプロパティのコレクションに追加します。
次の例では、ファイル"test1.jpg"と"test2.jpg"の2つのファイルを添付ファイルとしたメールを送信しています。
Dim mm As New System.Web.Mail.MailMessage() Dim attachment As System.Web.Mail.MailAttachment '送信者 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) '添付ファイルの指定 attachment = New System.Web.Mail.MailAttachment("test1.jpg") 'Attachmentsに追加する mm.Attachments.Add(attachment) 'さらに添付ファイルを追加する attachment = New System.Web.Mail.MailAttachment("test2.jpg") mm.Attachments.Add(attachment) 'SMTPサーバーを指定する System.Web.Mail.SmtpMail.SmtpServer = "localhost" '送信する System.Web.Mail.SmtpMail.Send(mm)
System.Web.Mail.MailMessage mm = new System.Web.Mail.MailMessage(); System.Web.Mail.MailAttachment attachment; //送信者 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); //添付ファイルの指定 attachment = new System.Web.Mail.MailAttachment("test1.jpg"); //Attachmentsに追加する mm.Attachments.Add(attachment); //さらに添付ファイルを追加する attachment = new System.Web.Mail.MailAttachment("test2.jpg"); mm.Attachments.Add(attachment); //SMTPサーバーを指定する System.Web.Mail.SmtpMail.SmtpServer = "localhost"; //送信する System.Web.Mail.SmtpMail.Send(mm);