はじめに
- メールヘッダについて勉強したことをメモ。
-
RFC2822の3.6. Field definitionsを要約したような何か。
メッセージの概要
- 電子メールメッセージは以下の2つから構成される。
- メッセージヘッダ
- メッセージ本体
- メッセージヘッダのフィールドは
RFC2822にて規定されている。 - 最低限必要なヘッダフィールドは
Date:とFrom:のみ。 - メッセージヘッダとメッセージ本体との間は空白行で区切られる。
ヘッダフィールド
Date:
- メッセージ送信を開始した時間を表す。
- 必須フィールド。
From:, Sender:, Reply-To:
-
From:はメッセージの著者を、Sender:はメッセージの送信者を表す。 -
From:は必須フィールド。 - メッセージの著者と送信者が同一の場合、
Sender:フィールドを使用すべきではない。 - これらのフィールドを使い分けるケースとして、
RFC2822では、メッセージの作成者が、その送信を秘書に代理させる例が挙げられている。 -
Reply-To:はメッセージの著者が返信先として提案するもの。
To:, Cc:, Bcc:
- おなじみ、メールクライアントで指定するアレ。
-
Bcc:フィールドが定義されているメッセージについて、、RFC2822では次のいずれかの実装を規定している。-
Bcc:フィールドを削除して、To:,Cc:,Bcc:で指定された全ての宛先に同一のメッセージを送る。 -
To:及びCc:で指定された宛先には、Bcc:フィールドを削除した同一のメッセージを送信する。Bcc:の宛先が A,B,C の 3 人いる場合、 A に送信されるメッセージのBcc:フィールドから B,C が削除される。 - 値が定義されていない、空の
Bcc:フィールドを持つメッセージとして送信する。
-
- ちなみに
To:は必須フィールドではない模様。たいていのメールクライアントではここを指定しないと送信できないため直感的ではないが。
Subject:
- おなじみ、メールクライアントでは「件名」として表示されるアレ。
-
RFC2822では同節にてComments:,Keywords:が規定されているが、あまり使われていないようなので読み飛ばした。
Return-Path:, Received:
- これらのフィールドについては「
RFC2821を見ろ」とのことなので、 https://www.rfc-editor.org/pdfrfc/rfc2821.txt.pdf をみてみる。 - が、メールリレーの勉強をしないと理解できなさそうだったので今回は断念。
エンベロープアドレス
-
メッセージヘッダの
To:フィールドは、実際にメッセージが配信される場所とは関係ない。 -
実際にメッセージ配信を制御するのは エンベロープアドレス と呼ばれるもので、これは ヘッダではなく SMTP 対話によって指定される 。
-
ふつう MUA で
To:フィールドを指定すると、それがエンベロープアドレスになる。 -
しかし上述の通り、
To:は必須フィールドではないため、全てのケースでTo:フィールドの値とエンベロープアドレスとが一致するとは限らない。 -
sendmailコマンで実験してみる。 -
まずはヘッダ指定なしで、実在するアドレスを直接引数に指定して送信。
-
ちなみに
sendmailコマンドに対話的コンソールのようなものはない。ヘッダのキー含め全て自分で入力する。ピリオドを入力してエンターを押すと送信される。[ec2-user@public-a ~]$ sendmail test@gmail.com this is test . [ec2-user@public-a ~]$ -
受信先のメールクライアントでヘッダを見てみると、
To:フィールドが定義されていないことがわかる。Delivered-To: test@gmail.com Received: by 2002:a2e:91d6:0:0:0:0:0 with SMTP id u22-v6csp1659422ljg; Sun, 4 Nov 2018 07:47:53 -0800 (PST) ... (省略) ... Received: by public-a.localdomain (Postfix, from userid 1000) id BE8039076; Mon, 5 Nov 2018 00:47:52 +0900 (JST) Message-Id: <20181104154752.BE8039076@public-a.localdomain> Date: Mon, 5 Nov 2018 00:47:48 +0900 (JST) From: EC2 Default User <ec2-user@public-a.localdomain> this is test -
次に、
To:フィールドを指定して送信してみる。[ec2-user@public-a ~]$ sendmail test@gmail.com To:hoge this is test . [ec2-user@public-a ~]$ -
先ほど同様、受信先のメールクライアントでヘッダを見てみると、 送信元にて指定した
To:フィールドが確認できた。To:フィールドは受信先の制御を行っていないことがわかる。Delivered-To: test@gmail.com Received: by 2002:a2e:91d6:0:0:0:0:0 with SMTP id u22-v6csp1662552ljg; Sun, 4 Nov 2018 07:51:58 -0800 (PST) ... (省略) ... Received: by public-a.localdomain (Postfix, from userid 1000) id 2B9979076; Mon, 5 Nov 2018 00:51:57 +0900 (JST) To: hoge@public-a.localdomain Message-Id: <20181104155157.2B9979076@public-a.localdomain> Date: Mon, 5 Nov 2018 00:51:47 +0900 (JST) From: EC2 Default User <ec2-user@public-a.localdomain> this is test
つづく
- EC2 からのメール送信申請や
/etc/postfix/main.cfによる設定は何もやっていないので、このへんの勉強は次回。
参考文献
- Kyle D. Dent (著), 菅野 良二 (翻訳) (2004) 『Postfix実用ガイド』オライリー・ジャパン