マイクロソフト系技術情報 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

メールヘッダ

#項目概要
1Return-Path: メアドエラーメールの返信先。
通常From。詐称可能。
2Received: from MTA by MTA for メアド転送経路をスタックする
2-1from
 HELO コマンド値
 (逆引値 [xxx.xxx.xxx.xxx])
メールを送信したMTA
・HELO コマンド値(※ 詐称可)
・逆引値(※ 詐称不可)
2-2byメールを受信したMTA
2-3for送信先メアド
3From: メアド送信元メアド(HELO コマンド値 ※ 詐称可)
4To: メアド送信先メアド

機能

#略号名称ソフトウェア
1MUAMail User Agent.OutlookなどのメーラーでMRA、MSAのクライアント
2MTAMail Transfer AgentExchangeなどのメールサーバで、MDA、MRA、MSAを同梱
2-1MDAMail Delivery Agent着信メールをユーザのMail Boxにファイルする機能
2-2MRAMail Retrieval AgentPOPIMAPのメール受信の機能
2-3MSAMessage Submission AgentSMTPのメール送信の機能

MUA

メールの送受信を行う。

MTA

MDA

着信メールをユーザのMail Boxにファイルする

MRA

POPIMAPで認証し、Mail Boxのメールを取り出す。

MSA

MUAからメールを送信する際に、SMTP-AUTHを行う。

プロトコル

電子メールで使われるプロトコル

SMTP

POP

IMAP

認証関連

クライアント認証

SMTP-AUTH

サーバとクライアントの双方が対応してなければ利用できない拡張だが、
切り替えが進められ、近年では多くのサービスで必須となっている。

#コマンド説明
1AUTH LOGINコマンド平文
2AUTH PLAINコマンド平文(RFCに無いので実装が異なるケースがある)
3AUTH CRAM-MD5コマンドチャレンジ&レスポンス認証
4AUTH DIGEST-MD5コマンドダイジェスト認証

POP before SMTP

サーバー認証

送信(元)ドメイン認証とも言い、認証された場合に次の転送処理を継続する。

SPF(Sender Policy Framework)

Sender ID(Sender ID Framework)

SPFに加え、Resent-Sender, Resent-From, Sender, Fromなどの
メールアドレスPRA(Purported Responsible Address)の
ドメイン部分の正当性を、SPFと同じ仕組みで検証する。

DKIM(DomainKeys? Identified Mail)

署名・暗号化

鍵の利用

署名

暗号化

-メール中に暗号化された共通鍵を同梱-

鍵の交換

公開鍵を交換する必要がある。

S/MIME

(Secure/Multipurpose Internet Mail Extensions)

不特定多数とのやり取りで使用する。

PGP

(Pretty Good Privacy)

小規模なコミュニティで使用する。

プログラム

送信処理

メール送信処理は、.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の後継。

SendGrid?

受信処理

MailKit

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

その他

携帯メールアドレス

IPウォームアップ

レピュテーション

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

参考

参考

MailKit?

SendGrid?

IPウォームアップ


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


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS