マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

メール送信・受信処理について

詳細

送信処理

メール送信処理は、.NETの標準的なAPIを使用して処理可能である。

SmtpClient?

★ Obsoleteになっている。MailKitが後継。

// messageオブジェクトを生成
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();

// 送信者を設定
message.From = new System.Net.Mail.MailAddress("xxxxx@yyyyy.co.jp", "西野 大介");
message.Sender = new System.Net.Mail.MailAddress("xxxxx@yyyyy.co.jp", "西野 大介");

// 件名を設定
message.SubjectEncoding = Encoding.GetEncoding("UTF-8"); 
message.Subject = "テスト メール";

// メッセージボディを設定
message.BodyEncoding = Encoding.GetEncoding("UTF-8");
message.Body = "本文\r\n本文\r\n本文\r\n本文\r\n本文\r\n本文\r\n本文\r\n本文\r\n本文\r\n本文\r\n本文\r\n";

// 添付ファイルを設定 --------------------------------------------------
message.Attachments.Add(
  new System.Net.Mail.Attachment(@"C:\新規テキスト ドキュメント.txt",
  new System.Net.Mime.ContentType("test/plain; charset=UTF-8")));

message.Attachments.Add(
  new System.Net.Mail.Attachment(@"C:\新規Microsoft Word 文書.doc",
  new System.Net.Mime.ContentType("test/plain; charset=UTF-8")));

message.Attachments.Add(
  new System.Net.Mail.Attachment(@"C:\新規ビットマップ イメージ.bmp",
  new System.Net.Mime.ContentType("test/plain; charset=UTF-8")));

// ---------------------------------------------------------------------

// addressコレクションオブジェクトを生成 -------------------------------
message.To.Add("xxxxx@yyyyy.co.jp");
message.CC.Add("xxxxx@yyyyy.co.jp");
message.Bcc.Add("xxxxx@yyyyy.co.jp");

// ---------------------------------------------------------------------

// その他、オプション --------------------------------------------------

// 優先度
message.Priority = System.Net.Mail.MailPriority.Normal;

// フォーマット
message.IsBodyHtml = false;

// 送信失敗時、レスを受信するかどうか
message.DeliveryNotificationOptions
  = System.Net.Mail.DeliveryNotificationOptions.OnSuccess;

// ---------------------------------------------------------------------

// SmtpClientオブジェクトを作成
System.Net.Mail.SmtpClient client
  = new System.Net.Mail.SmtpClient("xxx.xxx.xxx.xxx");

// ネットワーク経由
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;

// タイムアウト値(ミリ秒))
client.Timeout = 5000;

// 認証(デフォルト)
client.UseDefaultCredentials = true;

//// 認証(カスタム)
//client.Credentials = new System.Net.NetworkCredential("username", "password");

// メッセージを送信
client.Send(message);

MailKit?

SmtpClientの後継。

  • 次の3つのメールクライアントAPIを提供している。
    • SMTPクライアント
    • POP3クライアント
    • IMAP4クライアント
  • 対応している主なプラットフォーム
    • .NET Framework 4.5以降
    • .NET Standard 1.3以降
      • .NET Core 1.0以降
      • UWP 10.0.12040以降
    • Xamarin.Android/Xamarin.iOS

SendGrid?

  • クラウド型のメール配信サービス
  • WebAPIでメール送信処理を実装可能。
  • 大規模なメール配送を安全に行うには特別なノウハウがあり罠も多い。
    辛い自前運用を、お金(サービス)で解決できる。
  • 最大送信量に合わせたインフラの確保
  • IPアドレスのウォームアップ(IPウォームアップ)が必要
  • 開封率やクリック率の追いかけを効率化
  • その他
    Amazon SES、Mailchimp、Mandrill

受信処理

  • メール受信処理は複雑なため、メール受信処理をシステム内に組み込まないようにするか、若しくは、専用の製品を使用して処理を実装する。
  • ただし、Dynamicsなどの最近のパッケージでは、メール受信処理(メールボックスの監視サービスなど)も実装している。さすがという感じ。

MailKit

POP3クライアントを実装するので受信処理も実装可能。

その他

携帯メールアドレス

  • 携帯向けにメール送信する場合は、携帯メールアドレス(RFCに準拠しないメールアドレス)に対応する必要があるか確認する。
  • .NETでは、RFCに準拠しないメール アドレスをMailAddress?クラスに設定すると
    例外となることがある(これを利用して、RFCに準拠しないメール アドレスをチェックできる)。
  • この場合、MailMessage?クラスのToプロパティ(MailAddressCollection?クラス)にAddすると例外としないで処理できる。
  • 必要であるなら、携帯メールアドレス対応のコンポーネントを導入する
  • 当該アドレスにSMTPが対応していないケースもあるようである(Exchange 2000 Server、Server 2003)

IPウォームアップ

  • メルマガ配信などを行う、マーケティング領域のシステムなどで一般的な用語。
  • メールが確実に届くように、IPアドレスのレピュテーションを上げること。

レピュテーション

(IPアドレスの)レピュテーション

  • メール配信の重要な評価指標、メール送信元の信頼度。
  • ISPはメールの送信者の正当性を、レピュテーションで判断。
  • レピュテーションが低い場合、送信したメールは
    迷惑メールであると見なされ、受信拒否さ れる可能性が高くなる。
  • 新しいIPアドレスにはレピュテーションがないので、
    • 新しいIPアドレスからメールが配信されてもISPは、
      メール送信元の正当性を判断できず、メールが確実に届かない恐れがある。
    • メールを確実に届けるために、IPウォームアップで新しいIPアドレスのレピュテーションを上げる。

参考

参考

MailKit?

SendGrid?

SlideShare?

Qiita


Tags: :インフラストラクチャ, :通信技術


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-28 (金) 15:08:29 (21d)