理解しなければならない標準はたくさんありますが、メールは基本的にテキストです。
/var/spool/mail
またはetcのファイル形式/var/mail/user
は通常 Berkeleymbox
です。これは正式にはどこにも定義されていませんが、一連の RFC5322 (旧称 RFC822) の電子メール メッセージで構成されており、それぞれの前にFrom_
行があり、その形式は基本的From %s
%C
に%s
、送信者の電子メール アドレス ( にも示されているものReturn-Path:
) で%C
あり、日付です。メッセージが届いたとき。フォーマット文字列の間の 2 つのスペースに注意してください。
トップレベルの電子メール メッセージは RFC5322 ですが、その上でMIMEを理解する必要があります。
(E)SMTP RFC5321にも出くわしますが、これはあなたの質問に接するだけですが、知っておくとよいでしょう。821 と 822 (後に 2821 と 2822、現在は 5321 と 5322) が隣接する RFC 番号を持っていることに注意してください。
さらに、標準外のヘッダーのワイルドでワイルドな西部があり、その中には重要なものもあります。Dan Bernstein のリファレンスhttp://cr.yp.to/immhf.htmlは命の恩人です。一般的なガイドラインとして、スパマーが通常行うことは、ヘッダーを理解せずにコピー/貼り付けすることです。したがって、到達可能性の基本的なプラクティスは、「それをしない」ことです。つまり、ヘッダーの目的がわからない場合は使用しないでください。
最新のプログラミング言語には、RFC5322 と MIME を作成および操作するためのライブラリが付属しており、おそらくそれmbox
も同様です。どこかに送信できるメッセージを作成するには、mbox
とにかく必要ありません。(疑似コード) の行に沿ったものだけです。
message = new MIME({'Subject': 'hello', 'From': 'me@example.net',
'To': 'My Friend <you@example.com>'});
message.addbodypart('text/plain', 'Hi Fred.\nHow are you?');
message.addbodypart('image/png', {'file': '/home/you/logo.png'});
smtp = new SMTP('mail.example.net', 587, {'user': 'me', 'pass': 'xyzzy'});
smtp.send(message);
マルチパートメッセージは、「添付ファイル」を識別するための特定のヘッダーがなく、実際には概念的に「添付ファイル」がなく、「ボディパーツ」のみであることを除いて、質問で説明したもののように見えます。これは、質問のメッセージが適切にどのように見えるかを示す簡単な MIME メッセージです。
From: sender <sender@example.com>
To: receiver <receiver@example.com>
Subject: test subject
MIME-Version: 1.0
Content-type: multipart/mixed; boundary="so_long_eFlop"
This is a MIME multipart message. Nobody actually sees what it says here.
--so_long_eFlop
Content-type: text/plain; charset="utf-8"
Content-disposition: inline
Content-transfer-encoding: 7bit
Many mail clients will display this as the "main part" but MIME does not
define any particular hierarchy. Many mail clients will generate a
text/plain rendering and a text/html rendering of the message you type in,
and the recipient's mail client will decide -- based on user preferences
-- which one to display. Anyway, I will not create an example of that
here. This is just "a text message with a picture attached", or, more
precisely, a MIME message with two body parts.
Oh, the content-disposition: inline is usually just implied for a
text/plain part. Some clients will override or ignore the disposition
set by the sender anyway.
--so_long_eFlop
Content-type: image/png
Content-disposition: attachment
Content-transfer-encoding: base64
Iam+not/attaching+a/real00picture+here/just/a/bunch0of/binary/goo===
--so_long_eFlop--