「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
メール送信・受信処理について
                    ┌──────  (SMTP)  ──────┐
                    │                                │
Mail Box ← MDA ← MTA(内) ⇔ MTA(外) ⇔ MTA(外) ⇔ MTA(内) → MDA → Mail Box 
   ↓               ↑                                ↑                ↓
  MRA              MSA                               MSA               MRA
   ↓               ↑                                ↑                ↓
 (POP)            (SMTP)                            (SMTP)            (POP)
   ↓               ↑                                ↑                ↓
  MUA  ───────┘                                └───────  MUA
| # | 項目 | 概要 | |
| 1 | Return-Path: メアド | エラーメールの返信先。 通常From。詐称可能。  | |
| 2 | Received: from MTA by MTA for メアド | 転送経路をスタックする | |
| 2-1 | from HELO コマンド値 (逆引値 [xxx.xxx.xxx.xxx])  | メールを送信したMTA ・HELO コマンド値(※ 詐称可) ・逆引値(※ 詐称不可)  | |
| 2-2 | by | メールを受信したMTA | |
| 2-3 | for | 送信先メアド | |
| 3 | From: メアド | 送信元メアド(HELO コマンド値 ※ 詐称可) | |
| 4 | To: メアド | 送信先メアド | |
| # | 略号 | 名称 | ソフトウェア | |
| 1 | MUA | Mail User Agent. | OutlookなどのメーラーでMRA、MSAのクライアント | |
| 2 | MTA | Mail Transfer Agent | Exchangeなどのメールサーバで、MDA、MRA、MSAを同梱 | |
| 2-1 | MDA | Mail Delivery Agent | 着信メールをユーザのMail Boxにファイルする機能 | |
| 2-2 | MRA | Mail Retrieval Agent | POPやIMAPのメール受信の機能 | |
| 2-3 | MSA | Message Submission Agent | SMTPのメール送信の機能 | |
メールの送受信を行う。
着信メールをユーザのMail Boxにファイルする
POPやIMAPで認証し、Mail Boxのメールを取り出す。
電子メールで使われるプロトコル
などもある。
などもある。
などもある。
サーバとクライアントの双方が対応してなければ利用できない拡張だが、
切り替えが進められ、近年では多くのサービスで必須となっている。
| # | コマンド | 説明 | 
| 1 | AUTH LOGINコマンド | 平文 | 
| 2 | AUTH PLAINコマンド | 平文(RFCに無いので実装が異なるケースがある) | 
| 3 | AUTH CRAM-MD5コマンド | チャレンジ&レスポンス認証 | 
| 4 | AUTH DIGEST-MD5コマンド | ダイジェスト認証 | 
送信(元)ドメイン認証とも言い、認証された場合に次の転送処理を継続する。
SPFに加え、Resent-Sender, Resent-From, Sender, Fromなどの
メールアドレスPRA(Purported Responsible Address)の
ドメイン部分の正当性を、SPFと同じ仕組みで検証する。
公開鍵を交換する必要がある。
-メール中に暗号化された共通鍵を同梱-
メール送信処理は、.NETの標準的なAPIを使用して処理可能である。
★ 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);
SmtpClientの後継。
POP3クライアントを実装するので受信処理も実装可能。
(IPアドレスの)レピュテーション
Tags: :インフラストラクチャ, :通信技術