メール
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>通信技術]]
*目次 [#ad818906]
#contents
*概要 [#fc9651f8]
メール送信・受信処理について
**仕組み [#u5ed5597]
***全体像 [#fff34889]
┌────── (SMTP) ──────┐
│ │
Mail Box ← MDA ← MTA(内) ⇔ MTA(外) ⇔ MTA(外) ⇔ MTA(内)...
↓ ↑ ↑...
MRA MSA ...
↓ ↑ ↑...
(POP) (SMTP) (...
↓ ↑ ↑...
MUA ───────┘ └──────...
***アドレス [#na253534]
-ヘッダとエンベロープ~
仕組みとしては、BCCやML、[[大量配信時の運用>#c1b9ffd9]]等...
しかし、送信元詐称などで悪用されることも多くなってしまっ...
--ヘッダ → 表記上
--エンベロープ → SMTP上
-送信元・送信先アドレス
--送信元アドレス
---ヘッダFrom
---エンベロープFrom
--送信先アドレス
---ヘッダTo
---エンベロープTo
***コマンド [#b5aa8eed]
-=[[SMTPプロトコル>#nb22d905]]のコマンド
--EHLO/HELOコマンド(通信開始)
--MAIL FROMコマンド(エンベロープFromを送る)
--RCPT TOコマンド(エンベロープToを送る)
--DATAコマンド(メールメッセージ送信開始)
--QUITコマンド(通信終了)
-=[[POPプロトコル>#eb26945b]]のコマンド
***メールヘッダ [#x915ae06]
|#|>|項目|概要|h
|1|>|Return-Path: メアド&br; MAIL FROMコマンド値|(送信...
|2|>|Received: from MTA by MTA for メアド|以下のように転...
|2-1||from&br; EHLO/HELOコマンド値&br; (逆引値 [xxx.xxx...
|2-2||by|メールを受信したMTAのアドレス|
|2-3||for|送信先メアド|
|3|>|From: メアド|(送信元メアド)&br;EHLO/HELOコマンド値...
|4|>|To: メアド|送信先メアド|
**機能 [#m3b02304]
|#|>|略号|名称|ソフトウェア|h
|1|>|MUA|Mail User Agent.|OutlookなどのメーラーでMRA、MSA...
|2|>|MTA|Mail Transfer Agent|Exchangeなどのメールサーバで...
|2-1||MDA|Mail Delivery Agent|着信メールをユーザのMail Bo...
|2-2||MRA|Mail Retrieval Agent|[[POP>#eb26945b]]や[[IMAP>...
|2-3||MSA|Message Submission Agent|[[SMTP>#nb22d905]]のメ...
***MUA [#effdda8b]
メールの送受信を行う。
-送信 : [[SMTP>#nb22d905]]
-受信 : [[POP>#eb26945b]]、[[IMAP>#kf0dd961]]
***MTA [#d71b14ae]
-メールサーバ同士、[[SMTP>#nb22d905]]でメールを転送する。
-自身のMail Boxの場合、[[MDA>#zd9ace8b]]へ引き渡す。
***MDA [#zd9ace8b]
着信メールをユーザのMail Boxにファイルする
***MRA [#j8d334fe]
[[POP>#eb26945b]]や[[IMAP>#kf0dd961]]で認証し、Mail Boxの...
***MSA [#j37f281e]
[[MUA>#effdda8b]]からメールを送信する際に、[[SMTP-AUTH>#w...
**プロトコル [#z2f8e851]
電子メールで使われるプロトコル
***SMTP [#nb22d905]
-SMTP : Simple Mail Transfer Protocol
-ポート番号
--通常ポート番号 : 25~
(サーバ間の転送に使用)
--[[サブミッションポート番号 : 587>#wa05ce37]]~
(利用者からの送信の受付に使用)
-メール送信用プロトコル
--転送先のサーバを特定するために、DNS の MXレコードが使わ...
--[[IPv6>IPv4, v6]]、[[SPF(Sender Policy Framework)>#z3...
-[[また、セキュリティが強化された、>#i21462df]]
--SMTP over SSL : ポート465
--SMTP over SSH : ポート???
>などもある。
-SMTPプロトコルの
--[[コマンド>#b5aa8eed]]
--シーケンス
---クライアントからサーバのTCPポート25のコネクションを確立
---サーバがこれに応答する(SMTPのリプライコード220)。
---クライアントからサーバにEHLO/HELOコマンドで通信開始を...
---サーバがこれに応答する(...)。
---クライアントからサーバにMAIL FROMコマンドで返信先アド...
---サーバがこれに応答する(SMTPのリプライコード250)。
---クライアントからサーバにRCPT TOコマンドで送信先アドレ...
---サーバがこれに応答する(SMTPのリプライコード250)。
---クライアントからサーバにDATAコマンドでメールメッセージ...
---サーバがこれに応答する(SMTPのリプライコード354)。
---クライアントからサーバにメールメッセージを送る(終了ま...
---サーバがこれに応答する(SMTPのリプライコード250)。
---クライアントからサーバにQUITコマンドを送信し、TCPコネ...
---サーバがこれに応答する(SMTPのリプライコード221)。
***POP [#eb26945b]
-POP : Post Office Protocol
-ポート番号 : 110
-メール受信用プロトコル
--ユーザのMail Boxから自分のメールを取り出す時に使用
--現在は、改良されたPOP3 (POP Version 3) が使用される。
-[[また、セキュリティが強化された、>#i21462df]]
--POP over SSL : ポート995
--POP over SSH : ポート???
>などもある。
-POPプロトコルの
--[[コマンド>#b5aa8eed]]
--シーケンス~
...
***IMAP [#kf0dd961]
-IMAP : Internet Message Access Protocol
-ポート番号 : 143
-メール受信用プロトコル
--ユーザのMail Boxから自分のメールを取り出す時に使用
--現在IMAPと呼ぶときにはIMAP4を指すことが通常
--[[POP>#eb26945b]]との最も大きな違いは、IMAPはMail Boxに...
-[[また、セキュリティが強化された、>#i21462df]]
--IMAP over SSL : ポート993
--IMAP over SSH : ポート???
>などもある。
*認証関連 [#qd892e0b]
**クライアント認証 [#z0e713f9]
***SMTP-AUTH [#wa05ce37]
サーバとクライアントの双方が対応してなければ利用できない...
切り替えが進められ、近年では多くのサービスで必須となって...
-SMTP-AUTH、SMTP Authentication、SMTP認証
-SMTP-AUTHを行うための[[MSA>#j37f281e]]をサブミッションポ...
-SASL(Simple Authentication and Security Layer)機構を採用
|#|コマンド|説明|h
|1|AUTH LOGINコマンド|平文|
|2|AUTH PLAINコマンド|平文(RFCに無いので実装が異なるケー...
|3|AUTH CRAM-MD5コマンド|[[チャレンジ&レスポンス認証>htt...
|4|AUTH DIGEST-MD5コマンド|[[ダイジェスト認証>https://tec...
***POP before SMTP [#a647a629]
-[[MUA>#effdda8b]]はPOP3をサポートしていたため[[SMTP-AUTH...
-POP3の認証結果のIPアドレスを一定時間キャッシュしておき、...
***Authenticated POP [#rc3b493f]
認証された[[POP>#eb26945b]]という意味。
-チャレンジ・レスポンス
--[[POP>#eb26945b]]3よりは安全性が高い。
--あまり普及してない(脆弱性)。
-メール本文は暗号化されない。
**サーバー認証 [#z6363368]
送信(元)ドメイン認証とも言い、認証された場合に次の転送...
***SPF(Sender Policy Framework) [#z3993540]
-送信元の[[SMTP>#nb22d905]]サーバの正当性を[[DNSのレコー...
-[[SMTP>#nb22d905]]サーバへの設定も必要になる(ソフトウェ...
-[[エンベロープFrom>#na253534]]のドメインのTXTレコードにI...
***Sender ID(Sender ID Framework) [#x22267ea]
[[SPF>#z3993540]]に加え、Resent-Sender, Resent-From, Send...
メールアドレスPRA(Purported Responsible Address)の~
ドメイン部分の正当性を、[[SPF>#z3993540]]と同じ仕組みで検...
***DKIM(DomainKeys Identified Mail) [#t4430b9a]
DomainKeysとDKIMがある。
-DomainKeys
--[[DNSサーバ]]上にドメインに対応する公開鍵を公開する。
--送信元の[[SMTP>#nb22d905]]サーバが秘密鍵でヘッダを署名...
--送信先の[[SMTP>#nb22d905]]サーバが
---([[エンベロープFrom>#na253534]]で?)ドメインの公開鍵...
---署名検証し、送信元の[[SMTP>#nb22d905]]サーバを認証する。
-DKIM
--ヘッダにユーザの公開鍵を添付する拡張でユーザ単位の認証...
--送信元のドメインを(、[[エンベロープFrom>#na253534]]で...
***DMARC(Domain-based Message Authentication, Reporting,...
- [[SPF>#z3993540]] + [[DKIM>#t4430b9a]]
- + ポリシを[[DNSのレコード>DNSサーバ#l2935334]]を使用し...
***over SSL [#i21462df]
サーバー認証+経路の暗号化(メール自体を暗号化しない)。
-[[SMTP over SSL/SSH>#nb22d905]]
-[[POP over SSL/SSH>#eb26945b]]
-[[IMAP over SSL/SSH>#kf0dd961]]
*署名・暗号化 [#nb773b23]
-送信時、電子メールに署名と暗号化
-受信時、電子メールの署名検証と復号化
**鍵の交換 [#p71a8e37]
公開鍵を交換する必要がある。
-X.500などを使用できそうだが、標準化された仕様は無さそう。
-Microsoft製品の場合、ADに公開鍵をアップロードすることで、~
ユーザによる個別鍵交換の手間を省くことができるらしい。
**鍵の利用 [#w1425017]
***署名 [#s36b728c]
-送信元の秘密鍵を使用して署名する。
-送信先で送信元の公開鍵を使用して署名検証。
***暗号化 [#vabadba9]
-送信先で共通鍵を生成する。
-共通鍵でメールを暗号化
-送信先の公開鍵を使用して共通鍵を暗号化
>-メール中に暗号化された共通鍵を同梱-
-送信先で送信先の秘密鍵を使用して共通鍵を復号化
-復号化した共通鍵を使用してメールを復号化
**プロトコル [#v04b3448]
***S/MIME [#kdf1d7fa]
-S/MIME : Secure/Multipurpose Internet Mail Extensions
-[[鍵の交換>#p71a8e37]]
--不特定多数とのやり取りで使用する。
--証明書の公開鍵暗号基盤を使用する。
-特徴
--MIMEを拡張したもので、添付ファイルなども暗号化が可能。
--仕組 : 暗号化や署名には、[[PKCS #7>PKCS#u87f1a66]]を拡...
--バージョン
---v2 : RSAを使用して鍵交換、暗号化自体には、3DESやRC2な...
---v3 : [[PKCS]]に従うためCA(認証局)が署名された公開鍵...
***PGP [#oe23ce1a]
-PGP : Pretty Good Privacy
-[[鍵の交換>#p71a8e37]]
--小規模なコミュニティで使用する。
--仕組
---互いに公開鍵を署名しあう~
「Web-of-trust(信用の輪)」の~
インフラを使用して正当性を保証する。
---加えて、公開鍵のフィンガープリントを確認する。~
(フィンガープリントの交換か確認ができるインフラが必要)
***STARTTLS [#g7f8685e]
-[[SMTP>#nb22d905]]や[[POP>#eb26945b]]の経路のみの暗号化
-上位層のプロトコルから見て透過的。
-TLSより上位のレイヤの設計と実装に委ねられている。
--ハンドシェイクをどう始めるか?
--交換された電子証明書をどう解釈するか?
*プログラム [#d1e8a8b5]
**送信処理 [#j68d2367]
メール送信処理は、.NETの標準的なAPIを使用して処理可能であ...
***SmtpClient [#yb03c7bc]
★ Obsoleteになっている。[[MailKit>#f750610f]]が後継。
// messageオブジェクトを生成
System.Net.Mail.MailMessage message = new System.Net.Mai...
// 送信者を設定
message.From = new System.Net.Mail.MailAddress("xxxxx@yy...
message.Sender = new System.Net.Mail.MailAddress("xxxxx@...
// 件名を設定
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...
// 添付ファイルを設定 ----------------------------------...
message.Attachments.Add(
new System.Net.Mail.Attachment(@"C:\新規テキスト ドキ...
new System.Net.Mime.ContentType("test/plain; charset=U...
message.Attachments.Add(
new System.Net.Mail.Attachment(@"C:\新規Microsoft Word...
new System.Net.Mime.ContentType("test/plain; charset=U...
message.Attachments.Add(
new System.Net.Mail.Attachment(@"C:\新規ビットマップ ...
new System.Net.Mime.ContentType("test/plain; charset=U...
// -----------------------------------------------------...
// 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.SmtpDeliveryMeth...
// タイムアウト値(ミリ秒))
client.Timeout = 5000;
// 認証(デフォルト)
client.UseDefaultCredentials = true;
//// 認証(カスタム)
//client.Credentials = new System.Net.NetworkCredential(...
// メッセージを送信
client.Send(message);
- https://github.com/OpenTouryoProject/MultiPurposeAuthSi...
***MailKit [#f750610f]
[[SmtpClient>#yb03c7bc]]の後継。
-次の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 [#c1b9ffd9]
-クラウド型のメール配信サービス
-WebAPIでメール送信処理を実装可能。
-大規模なメール配送を安全に行うには特別なノウハウがあり罠...
辛い自前運用を、お金(サービス)で解決できる。
--最大送信量に合わせたインフラの確保
--IPアドレスのウォームアップ([[IPウォームアップ>#m5f5013...
--開封率やクリック率の追いかけを効率化
-その他~
Amazon SES、Mailchimp、Mandrill
**受信処理 [#j27e1c8e]
-メール受信処理は複雑なため、メール受信処理をシステム内に...
-ただし、Dynamicsなどの最近のパッケージでは、[[メール受信...
***[[MailKit>#f750610f]] [#rd41bd23]
POP3クライアントを実装するので受信処理も実装可能。
*その他 [#c7277aad]
**携帯メールアドレス [#b8bb2d7b]
-携帯向けにメール送信する場合は、携帯メールアドレス(RFC...
-.NETでは、RFCに準拠しないメール アドレスをMailAddressク...
例外となることがある(これを利用して、RFCに準拠しないメー...
-この場合、MailMessageクラスのToプロパティ(MailAddressCo...
-必要であるなら、携帯メールアドレス対応のコンポーネントを...
--(.NET用SMTP/POPクラスライブラリ)~
http://www.agile-tech.com/product/maillib.aspx
-当該アドレスにSMTPが対応していないケースもあるようである...
--@ の直前にピリオドがあるなどの RFC に準拠していないアド...
http://support.microsoft.com/kb/281538/ja
**IPウォームアップ [#m5f50130]
-メルマガ配信などを行う、マーケティング領域のシステムなど...
-メールが確実に届くように、IPアドレスのレピュテーションを...
***レピュテーション [#a7479b4e]
(IPアドレスの)レピュテーション
-メール配信の重要な評価指標、メール送信元の信頼度。
-ISPはメールの送信者の正当性を、レピュテーションで判断。
-レピュテーションが低い場合、送信したメールは~
迷惑メールであると見なされ、受信拒否さ れる可能性が高くな...
-新しいIPアドレスにはレピュテーションがないので、
--新しいIPアドレスからメールが配信されてもISPは、~
メール送信元の正当性を判断できず、メールが確実に届かない...
--メールを確実に届けるために、IPウォームアップで新しいIP...
***参考 [#l4eb6dd0]
-[[SendGrid>#ecaefd23]]
-マーケター必見!IPウォームアップに関する基礎知識~
(メルマガ・メールマーケティング入門) | Web担当者Forum~
https://webtan.impress.co.jp/u/2015/11/04/21433
*参考 [#keeaf589]
-SmtpClient Class (System.Net.Mail) | Microsoft Docs~
https://docs.microsoft.com/en-us/dotnet/api/System.Net.Ma...
-メール運用がロストテクノロジーになっていく話 - Qiita~
https://qiita.com/koichiro/items/d65ac1af03b9063f0592
**MailKit [#jde8c3f6]
-MailKitが公式に.NETのSmtpClientを置き換えることを明らか...
https://www.infoq.com/jp/news/2017/04/MailKit-MimeKit-Off...
-電子メールを送信するには?(MailKit編)[.NET 4.5、C#/V...
http://www.atmarkit.co.jp/ait/articles/1811/21/news023.html
**SendGrid [#ecaefd23]
-SendGridとは~
https://sendgrid.kke.co.jp/about/
-SendGridでメール配送を始めるためのまとめ~
https://qiita.com/shiru/items/0dbc48df217ffe51b1f3
***IPウォームアップ [#m655a8a1]
-IPウォームアップとは?~
https://sendgrid.kke.co.jp/guide/ip%E3%82%A6%E3%82%A9%E3%...
-ドキュメント
--IPウォームアップを行う~
https://sendgrid.kke.co.jp/docs/Tutorials/D_Improve_Deliv...
-ブログ
--IPアドレスのウォームアップ~
https://sendgrid.kke.co.jp/blog/?p=326
-SlideShare
--IPウォームアップとは?【SendGrid】~
https://www.slideshare.net/SendGrid_JP/ipsendgrid
----
Tags: [[:インフラストラクチャ]], [[:通信技術]]
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>通信技術]]
*目次 [#ad818906]
#contents
*概要 [#fc9651f8]
メール送信・受信処理について
**仕組み [#u5ed5597]
***全体像 [#fff34889]
┌────── (SMTP) ──────┐
│ │
Mail Box ← MDA ← MTA(内) ⇔ MTA(外) ⇔ MTA(外) ⇔ MTA(内)...
↓ ↑ ↑...
MRA MSA ...
↓ ↑ ↑...
(POP) (SMTP) (...
↓ ↑ ↑...
MUA ───────┘ └──────...
***アドレス [#na253534]
-ヘッダとエンベロープ~
仕組みとしては、BCCやML、[[大量配信時の運用>#c1b9ffd9]]等...
しかし、送信元詐称などで悪用されることも多くなってしまっ...
--ヘッダ → 表記上
--エンベロープ → SMTP上
-送信元・送信先アドレス
--送信元アドレス
---ヘッダFrom
---エンベロープFrom
--送信先アドレス
---ヘッダTo
---エンベロープTo
***コマンド [#b5aa8eed]
-=[[SMTPプロトコル>#nb22d905]]のコマンド
--EHLO/HELOコマンド(通信開始)
--MAIL FROMコマンド(エンベロープFromを送る)
--RCPT TOコマンド(エンベロープToを送る)
--DATAコマンド(メールメッセージ送信開始)
--QUITコマンド(通信終了)
-=[[POPプロトコル>#eb26945b]]のコマンド
***メールヘッダ [#x915ae06]
|#|>|項目|概要|h
|1|>|Return-Path: メアド&br; MAIL FROMコマンド値|(送信...
|2|>|Received: from MTA by MTA for メアド|以下のように転...
|2-1||from&br; EHLO/HELOコマンド値&br; (逆引値 [xxx.xxx...
|2-2||by|メールを受信したMTAのアドレス|
|2-3||for|送信先メアド|
|3|>|From: メアド|(送信元メアド)&br;EHLO/HELOコマンド値...
|4|>|To: メアド|送信先メアド|
**機能 [#m3b02304]
|#|>|略号|名称|ソフトウェア|h
|1|>|MUA|Mail User Agent.|OutlookなどのメーラーでMRA、MSA...
|2|>|MTA|Mail Transfer Agent|Exchangeなどのメールサーバで...
|2-1||MDA|Mail Delivery Agent|着信メールをユーザのMail Bo...
|2-2||MRA|Mail Retrieval Agent|[[POP>#eb26945b]]や[[IMAP>...
|2-3||MSA|Message Submission Agent|[[SMTP>#nb22d905]]のメ...
***MUA [#effdda8b]
メールの送受信を行う。
-送信 : [[SMTP>#nb22d905]]
-受信 : [[POP>#eb26945b]]、[[IMAP>#kf0dd961]]
***MTA [#d71b14ae]
-メールサーバ同士、[[SMTP>#nb22d905]]でメールを転送する。
-自身のMail Boxの場合、[[MDA>#zd9ace8b]]へ引き渡す。
***MDA [#zd9ace8b]
着信メールをユーザのMail Boxにファイルする
***MRA [#j8d334fe]
[[POP>#eb26945b]]や[[IMAP>#kf0dd961]]で認証し、Mail Boxの...
***MSA [#j37f281e]
[[MUA>#effdda8b]]からメールを送信する際に、[[SMTP-AUTH>#w...
**プロトコル [#z2f8e851]
電子メールで使われるプロトコル
***SMTP [#nb22d905]
-SMTP : Simple Mail Transfer Protocol
-ポート番号
--通常ポート番号 : 25~
(サーバ間の転送に使用)
--[[サブミッションポート番号 : 587>#wa05ce37]]~
(利用者からの送信の受付に使用)
-メール送信用プロトコル
--転送先のサーバを特定するために、DNS の MXレコードが使わ...
--[[IPv6>IPv4, v6]]、[[SPF(Sender Policy Framework)>#z3...
-[[また、セキュリティが強化された、>#i21462df]]
--SMTP over SSL : ポート465
--SMTP over SSH : ポート???
>などもある。
-SMTPプロトコルの
--[[コマンド>#b5aa8eed]]
--シーケンス
---クライアントからサーバのTCPポート25のコネクションを確立
---サーバがこれに応答する(SMTPのリプライコード220)。
---クライアントからサーバにEHLO/HELOコマンドで通信開始を...
---サーバがこれに応答する(...)。
---クライアントからサーバにMAIL FROMコマンドで返信先アド...
---サーバがこれに応答する(SMTPのリプライコード250)。
---クライアントからサーバにRCPT TOコマンドで送信先アドレ...
---サーバがこれに応答する(SMTPのリプライコード250)。
---クライアントからサーバにDATAコマンドでメールメッセージ...
---サーバがこれに応答する(SMTPのリプライコード354)。
---クライアントからサーバにメールメッセージを送る(終了ま...
---サーバがこれに応答する(SMTPのリプライコード250)。
---クライアントからサーバにQUITコマンドを送信し、TCPコネ...
---サーバがこれに応答する(SMTPのリプライコード221)。
***POP [#eb26945b]
-POP : Post Office Protocol
-ポート番号 : 110
-メール受信用プロトコル
--ユーザのMail Boxから自分のメールを取り出す時に使用
--現在は、改良されたPOP3 (POP Version 3) が使用される。
-[[また、セキュリティが強化された、>#i21462df]]
--POP over SSL : ポート995
--POP over SSH : ポート???
>などもある。
-POPプロトコルの
--[[コマンド>#b5aa8eed]]
--シーケンス~
...
***IMAP [#kf0dd961]
-IMAP : Internet Message Access Protocol
-ポート番号 : 143
-メール受信用プロトコル
--ユーザのMail Boxから自分のメールを取り出す時に使用
--現在IMAPと呼ぶときにはIMAP4を指すことが通常
--[[POP>#eb26945b]]との最も大きな違いは、IMAPはMail Boxに...
-[[また、セキュリティが強化された、>#i21462df]]
--IMAP over SSL : ポート993
--IMAP over SSH : ポート???
>などもある。
*認証関連 [#qd892e0b]
**クライアント認証 [#z0e713f9]
***SMTP-AUTH [#wa05ce37]
サーバとクライアントの双方が対応してなければ利用できない...
切り替えが進められ、近年では多くのサービスで必須となって...
-SMTP-AUTH、SMTP Authentication、SMTP認証
-SMTP-AUTHを行うための[[MSA>#j37f281e]]をサブミッションポ...
-SASL(Simple Authentication and Security Layer)機構を採用
|#|コマンド|説明|h
|1|AUTH LOGINコマンド|平文|
|2|AUTH PLAINコマンド|平文(RFCに無いので実装が異なるケー...
|3|AUTH CRAM-MD5コマンド|[[チャレンジ&レスポンス認証>htt...
|4|AUTH DIGEST-MD5コマンド|[[ダイジェスト認証>https://tec...
***POP before SMTP [#a647a629]
-[[MUA>#effdda8b]]はPOP3をサポートしていたため[[SMTP-AUTH...
-POP3の認証結果のIPアドレスを一定時間キャッシュしておき、...
***Authenticated POP [#rc3b493f]
認証された[[POP>#eb26945b]]という意味。
-チャレンジ・レスポンス
--[[POP>#eb26945b]]3よりは安全性が高い。
--あまり普及してない(脆弱性)。
-メール本文は暗号化されない。
**サーバー認証 [#z6363368]
送信(元)ドメイン認証とも言い、認証された場合に次の転送...
***SPF(Sender Policy Framework) [#z3993540]
-送信元の[[SMTP>#nb22d905]]サーバの正当性を[[DNSのレコー...
-[[SMTP>#nb22d905]]サーバへの設定も必要になる(ソフトウェ...
-[[エンベロープFrom>#na253534]]のドメインのTXTレコードにI...
***Sender ID(Sender ID Framework) [#x22267ea]
[[SPF>#z3993540]]に加え、Resent-Sender, Resent-From, Send...
メールアドレスPRA(Purported Responsible Address)の~
ドメイン部分の正当性を、[[SPF>#z3993540]]と同じ仕組みで検...
***DKIM(DomainKeys Identified Mail) [#t4430b9a]
DomainKeysとDKIMがある。
-DomainKeys
--[[DNSサーバ]]上にドメインに対応する公開鍵を公開する。
--送信元の[[SMTP>#nb22d905]]サーバが秘密鍵でヘッダを署名...
--送信先の[[SMTP>#nb22d905]]サーバが
---([[エンベロープFrom>#na253534]]で?)ドメインの公開鍵...
---署名検証し、送信元の[[SMTP>#nb22d905]]サーバを認証する。
-DKIM
--ヘッダにユーザの公開鍵を添付する拡張でユーザ単位の認証...
--送信元のドメインを(、[[エンベロープFrom>#na253534]]で...
***DMARC(Domain-based Message Authentication, Reporting,...
- [[SPF>#z3993540]] + [[DKIM>#t4430b9a]]
- + ポリシを[[DNSのレコード>DNSサーバ#l2935334]]を使用し...
***over SSL [#i21462df]
サーバー認証+経路の暗号化(メール自体を暗号化しない)。
-[[SMTP over SSL/SSH>#nb22d905]]
-[[POP over SSL/SSH>#eb26945b]]
-[[IMAP over SSL/SSH>#kf0dd961]]
*署名・暗号化 [#nb773b23]
-送信時、電子メールに署名と暗号化
-受信時、電子メールの署名検証と復号化
**鍵の交換 [#p71a8e37]
公開鍵を交換する必要がある。
-X.500などを使用できそうだが、標準化された仕様は無さそう。
-Microsoft製品の場合、ADに公開鍵をアップロードすることで、~
ユーザによる個別鍵交換の手間を省くことができるらしい。
**鍵の利用 [#w1425017]
***署名 [#s36b728c]
-送信元の秘密鍵を使用して署名する。
-送信先で送信元の公開鍵を使用して署名検証。
***暗号化 [#vabadba9]
-送信先で共通鍵を生成する。
-共通鍵でメールを暗号化
-送信先の公開鍵を使用して共通鍵を暗号化
>-メール中に暗号化された共通鍵を同梱-
-送信先で送信先の秘密鍵を使用して共通鍵を復号化
-復号化した共通鍵を使用してメールを復号化
**プロトコル [#v04b3448]
***S/MIME [#kdf1d7fa]
-S/MIME : Secure/Multipurpose Internet Mail Extensions
-[[鍵の交換>#p71a8e37]]
--不特定多数とのやり取りで使用する。
--証明書の公開鍵暗号基盤を使用する。
-特徴
--MIMEを拡張したもので、添付ファイルなども暗号化が可能。
--仕組 : 暗号化や署名には、[[PKCS #7>PKCS#u87f1a66]]を拡...
--バージョン
---v2 : RSAを使用して鍵交換、暗号化自体には、3DESやRC2な...
---v3 : [[PKCS]]に従うためCA(認証局)が署名された公開鍵...
***PGP [#oe23ce1a]
-PGP : Pretty Good Privacy
-[[鍵の交換>#p71a8e37]]
--小規模なコミュニティで使用する。
--仕組
---互いに公開鍵を署名しあう~
「Web-of-trust(信用の輪)」の~
インフラを使用して正当性を保証する。
---加えて、公開鍵のフィンガープリントを確認する。~
(フィンガープリントの交換か確認ができるインフラが必要)
***STARTTLS [#g7f8685e]
-[[SMTP>#nb22d905]]や[[POP>#eb26945b]]の経路のみの暗号化
-上位層のプロトコルから見て透過的。
-TLSより上位のレイヤの設計と実装に委ねられている。
--ハンドシェイクをどう始めるか?
--交換された電子証明書をどう解釈するか?
*プログラム [#d1e8a8b5]
**送信処理 [#j68d2367]
メール送信処理は、.NETの標準的なAPIを使用して処理可能であ...
***SmtpClient [#yb03c7bc]
★ Obsoleteになっている。[[MailKit>#f750610f]]が後継。
// messageオブジェクトを生成
System.Net.Mail.MailMessage message = new System.Net.Mai...
// 送信者を設定
message.From = new System.Net.Mail.MailAddress("xxxxx@yy...
message.Sender = new System.Net.Mail.MailAddress("xxxxx@...
// 件名を設定
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...
// 添付ファイルを設定 ----------------------------------...
message.Attachments.Add(
new System.Net.Mail.Attachment(@"C:\新規テキスト ドキ...
new System.Net.Mime.ContentType("test/plain; charset=U...
message.Attachments.Add(
new System.Net.Mail.Attachment(@"C:\新規Microsoft Word...
new System.Net.Mime.ContentType("test/plain; charset=U...
message.Attachments.Add(
new System.Net.Mail.Attachment(@"C:\新規ビットマップ ...
new System.Net.Mime.ContentType("test/plain; charset=U...
// -----------------------------------------------------...
// 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.SmtpDeliveryMeth...
// タイムアウト値(ミリ秒))
client.Timeout = 5000;
// 認証(デフォルト)
client.UseDefaultCredentials = true;
//// 認証(カスタム)
//client.Credentials = new System.Net.NetworkCredential(...
// メッセージを送信
client.Send(message);
- https://github.com/OpenTouryoProject/MultiPurposeAuthSi...
***MailKit [#f750610f]
[[SmtpClient>#yb03c7bc]]の後継。
-次の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 [#c1b9ffd9]
-クラウド型のメール配信サービス
-WebAPIでメール送信処理を実装可能。
-大規模なメール配送を安全に行うには特別なノウハウがあり罠...
辛い自前運用を、お金(サービス)で解決できる。
--最大送信量に合わせたインフラの確保
--IPアドレスのウォームアップ([[IPウォームアップ>#m5f5013...
--開封率やクリック率の追いかけを効率化
-その他~
Amazon SES、Mailchimp、Mandrill
**受信処理 [#j27e1c8e]
-メール受信処理は複雑なため、メール受信処理をシステム内に...
-ただし、Dynamicsなどの最近のパッケージでは、[[メール受信...
***[[MailKit>#f750610f]] [#rd41bd23]
POP3クライアントを実装するので受信処理も実装可能。
*その他 [#c7277aad]
**携帯メールアドレス [#b8bb2d7b]
-携帯向けにメール送信する場合は、携帯メールアドレス(RFC...
-.NETでは、RFCに準拠しないメール アドレスをMailAddressク...
例外となることがある(これを利用して、RFCに準拠しないメー...
-この場合、MailMessageクラスのToプロパティ(MailAddressCo...
-必要であるなら、携帯メールアドレス対応のコンポーネントを...
--(.NET用SMTP/POPクラスライブラリ)~
http://www.agile-tech.com/product/maillib.aspx
-当該アドレスにSMTPが対応していないケースもあるようである...
--@ の直前にピリオドがあるなどの RFC に準拠していないアド...
http://support.microsoft.com/kb/281538/ja
**IPウォームアップ [#m5f50130]
-メルマガ配信などを行う、マーケティング領域のシステムなど...
-メールが確実に届くように、IPアドレスのレピュテーションを...
***レピュテーション [#a7479b4e]
(IPアドレスの)レピュテーション
-メール配信の重要な評価指標、メール送信元の信頼度。
-ISPはメールの送信者の正当性を、レピュテーションで判断。
-レピュテーションが低い場合、送信したメールは~
迷惑メールであると見なされ、受信拒否さ れる可能性が高くな...
-新しいIPアドレスにはレピュテーションがないので、
--新しいIPアドレスからメールが配信されてもISPは、~
メール送信元の正当性を判断できず、メールが確実に届かない...
--メールを確実に届けるために、IPウォームアップで新しいIP...
***参考 [#l4eb6dd0]
-[[SendGrid>#ecaefd23]]
-マーケター必見!IPウォームアップに関する基礎知識~
(メルマガ・メールマーケティング入門) | Web担当者Forum~
https://webtan.impress.co.jp/u/2015/11/04/21433
*参考 [#keeaf589]
-SmtpClient Class (System.Net.Mail) | Microsoft Docs~
https://docs.microsoft.com/en-us/dotnet/api/System.Net.Ma...
-メール運用がロストテクノロジーになっていく話 - Qiita~
https://qiita.com/koichiro/items/d65ac1af03b9063f0592
**MailKit [#jde8c3f6]
-MailKitが公式に.NETのSmtpClientを置き換えることを明らか...
https://www.infoq.com/jp/news/2017/04/MailKit-MimeKit-Off...
-電子メールを送信するには?(MailKit編)[.NET 4.5、C#/V...
http://www.atmarkit.co.jp/ait/articles/1811/21/news023.html
**SendGrid [#ecaefd23]
-SendGridとは~
https://sendgrid.kke.co.jp/about/
-SendGridでメール配送を始めるためのまとめ~
https://qiita.com/shiru/items/0dbc48df217ffe51b1f3
***IPウォームアップ [#m655a8a1]
-IPウォームアップとは?~
https://sendgrid.kke.co.jp/guide/ip%E3%82%A6%E3%82%A9%E3%...
-ドキュメント
--IPウォームアップを行う~
https://sendgrid.kke.co.jp/docs/Tutorials/D_Improve_Deliv...
-ブログ
--IPアドレスのウォームアップ~
https://sendgrid.kke.co.jp/blog/?p=326
-SlideShare
--IPウォームアップとは?【SendGrid】~
https://www.slideshare.net/SendGrid_JP/ipsendgrid
----
Tags: [[:インフラストラクチャ]], [[:通信技術]]
ページ名: