0

メールを取得した後fetchmail、新しいメールは のようなファイルに保存されます/var/mail/useruserのようなテキストエディタでファイルを開くことができますvim

このようなテキストベースの電子メール ファイルを作成するにはどうすればよいですか? たとえば、次の内容のメールを送信したいとします。

From: sender <sender@xx.com> 
To: receiver <receiver@xx.com>
Subject: test subject
Contents: ...
Attached: file1.txt, file2.png, file3.pdf

問題は、これらを正式なテキストベースのメールにする方法です。

その上、そのようなメールファイルがあれば。いくつかのコマンド ライン ツールでファイル (件名、コンテンツ、添付ファイルなど) を抽出するにはどうすればよいですか。のようなプログラムで開くことができることを知っていmuttます。これは、コマンド ライン ユーティリティを使用して実行できますか?

4

3 に答える 3

4

理解しなければならない標準はたくさんありますが、メールは基本的にテキストです。

/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--
于 2013-09-04T03:54:25.330 に答える
3

ファイル形式は「mbox」と呼ばれます。ウィキペディア ( http://en.wikipedia.org/wiki/Mbox ) だけでなく、インターネット上にも優れた記事があります。RFC 4155 のように。:)

于 2013-09-04T03:53:55.483 に答える
0
telnet your.mail.server 25
helo localhost.localdomain
mail from:<sender@address.com>
rcpt to:<recipient@address.com>
data
From:Me
Subject:This is an email via Telnet

Hi,

The first line connects to the server on port 25. Replace "your.mail.server" with the name or address of the MX server for the domain.
Most servers expect the second "HELO" line to begin the session. I have seen servers that don't care, but in general they should throw an error.
You must have a "MAIL FROM:" line with the address you expect a reply to come to.
The mail is going nowhere if you don't specify the "RCPT TO:" address.
The message body begins with "DATA" line. This will usually be met with instruction on how to end the message - a single "." on a line by itself.
The "From:" and "Subject:" headers above are optional. You can add any additional headers here.

.
quit
于 2013-09-04T04:05:10.697 に答える