Postal Kitchen#2:SMTP

SMTP(簡易メール転送プロトコル)は、TCP / IPネットワークを介して電子メールを送信するように設計されたネットワークプロトコルです。

ESMTP(拡張SMTP)は、SMTPプロトコルのスケーラブルな拡張機能です。 現在、「SMTPプロトコル」とは、原則として、ESMTPとその拡張機能を意味します。



現在、純粋な形式のSMTPは実際には使用されていないことにすぐに気付きます。 基本認証もサポートしていません... ESMTPが使用されています。 メールクライアント(Outlook、Thunderbird、Evolution、TheBat)でメールを送信する場合、このプロトコルは正確に機能します。



このプロトコルで作業するには、特定のポートでメールサーバーに接続し、ESMTPコマンドのシーケンスを送信する必要があります。

コマンドは次の形式の行です

TEAM [スペース] パラメーター (オプション)

コマンドへの応答として、サーバーは次の形式の文字列を返します

XXX [スペース] 追加。 情報

この場合、サーバー応答のXXX番号は以下を示します。

2XX-コマンドは正常に完了しました

3XX-クライアントから追加データが期待されます

4XX-一時的なエラー。クライアントはしばらくしてから次の試行を行う必要があります

5XX-致命的なエラー



それでは、ポイントに行きましょう-コンソールからメールサーバーを介して電子メールを送信してみましょう(LinuxでもWindowsでも構いません)。 そのため、このプロトコルを簡単に知ることができます-実際にすぐに。 コマンドを引用し、同時にその意味を説明します。



この実験では、Yandexメールサーバーを使用します。 すでにアカウントが存在していることがわかります...

すべてのコマンドを接続した後、できるだけ早く入力する必要があるため、すぐに警告します。 約15秒の遅延で、接続は自動的に切断されます。 最初にテキストエディターですべてのコマンドを事前に入力してから、コマンドラインに貼り付けることをお勧めします。



telnet smtp.yandex.ru 2025 #smtpメールサーバーに接続します。 SMTPサーバーのアドレスとポートは、メーラーサイトの指示に記載されています。

答えは:

213.180.204.38を試す...

smtp.yandex.ruに接続しました。

エスケープ文字は「^]」です。

220 Yandex ESMTP(NO UCE)(NO UBE)サーバー準備完了、月、2009年2月2日13:47:22 +0300
コード220は正常な接続を示します



EHLO [91.198.212.5] #サーバーを歓迎し、外部IPを送信します(IPは送信する必要はありません。EHLOだけを実行できますが、サーバーはおそらくそれを誓います)

UPD: IP ではなくEHLO you.provider.domainのようなこのIPのドメイン名を角括弧なしで送信することをお勧めします

答えは:

250-smtp18.yandex.ru Hello 91.198.212.5

250サイズ20971520

250-8BITMIME

250-パイプライン

250チャンキング

250の強化されたステータスコード

250-DSN

250-X-RCPTLIMIT 25

250-AUTH =ログイン

250-AUTHログイン

250-STARTTLS

250ヘルプ
サーバーはグリーティングを受け入れ、サポートされているコマンドのリストを送信しました。 このリストから、AUTH LOGINに興味があります。 これは、base64でエンコードされたログインとパスワードを使用してサーバーで認証するためのコマンドです。 そのため、base64でエンコードされたパスワードを準備し、メールから事前にログインする必要があります。 これは、たとえばここでseriyps.ru/cryptまたはLinuxのコマンドecho [your password / login] |で実行できます。 base64



AUTH LOGIN #認証の意図をサーバーに通知します

答えは:

334 VXNlcm5hbWU6
このVXNlcm5hbWU6はbase64でエンコードされた単語「Username:」であり、応答番号3XXはサーバーが追加情報を待っていることを意味します。 彼を動揺させないようにしましょう。



YOUR MAIL_LOGIN_B__BASE_64 #メールユーザー名をbase64で送信します。たとえば、dmFzaWFwdXBraW4 =

答えは:

334 UGFzc3dvcmQ6
ご想像のとおり、これはbase64の「パスワード:」です



YOUR_MAIL_PASSWORD_ IN_BASE_64 #base64でメールパスワードを送信します(例:MTIzNDU2)

答えは:

235認証に成功しました。
つまり 認証が成功しました。 メールを送信できるようになりました)



MAIL FROM:vasiapupkin@ya.ru#アドレスvasiapupkin@ya.ruからメールを送信したいことを通知します(アドレスは任意です(存在しないドメインからのものを含みますが、スパムのチェック時に確認できます))

答えは:

250 2.1.0送信者構文OK;




RCPT TO:billy@microsoft.com #billy@microsoft.comにメールを送信したいことをお知らせします

答えは:

250 2.1.5受信者のアドレス構文OK。 rcpt = <billy@microsoft.com>




データ #ここで、データ転送を開始していることをお知らせします。

答えは:

354メール入力を開始します。 <CRLF>で終わります。
つまり サーバーは、Enterを押すまでコンソールに入力されたデータを読み取ります。Enterを押します(この組み合わせの後、メッセージはすぐに送信されます)



電子メールは次の部分で構成されています。



手紙の見出しを入力し始めます。 base64でエンコードされたファイルを挿入することもできますが、これはすでに記事の範囲外です。

From:Vasia Pupkin <vasiapupkin@ya.ru>#Fromフィールドのタイトル

To:Billy G <billy@microsoft.com>#Toフィールドのタイトル

件名:Hello Billy #メッセージの件名のタイトル

(ところで、MAIL FROM:vasiapupkin@ya.ruおよびFrom:Vasya Pupkin <vasiapupkin@ya.ru>はまったく一致する必要はありません!つまり、Yandexからメールを送信し、メールから送信されたふりをすることができます。 ruたとえば...対処方法-プロトコルはほぼ30年前です。計算するのはそれほど難しくありませんが...)



2回入力してから、文字自体のテキストを入力します。

こんにちはビリー! 明日死ぬ!

入力してください。 入力 #メッセージの送信が完了したことを通知します

答えは:

250 2.0.0が受け入れられました。 S10436885AbZBBKvs
つまり 送信のために受信したメッセージ



これで、さらにいくつかのレターを送信(MAIL FROM:RCPT TO :)またはセッションを終了できます

QUIT #セッションを終了

答えは:

221 2.0.0 smtp18.yandex.ruアウト

外部ホストによって接続が閉じられました。


以上です。 ご覧のとおり、プロトコルは非常にシンプルで、主な問題は文字の本文の形成です。



要約すると:

telnet smtp.yandex.ru 2025

EHLO 91.198.212.5

AUTH LOGIN

____BASE_64

____BASE_64

MAIL FROM: vasiapupkin@ya.ru

RCPT TO: billy@microsoft.com

DATA

From: <vasiapupkin@ya.ru>

To: <billy@microsoft.com>

Subject: Hello Billy

Hello, Billy! You will be die tomorrow!

.

QUIT








もちろん、非ASCIIテキストエンコーディングでメールを送信することに関する情報はありません。添付ファイルやMIMEについては書かれていませんが、詳細が必要な場合は以下のリンクをご覧ください。

Wikiメール

SMTP Wiki

Mime Wiki

rfc5321



アプリケーションを開発する場合、通常、SMTPを直接操作する必要はありません。これは、さまざまなフレームワークまたは標準機能を使用するためです。 PHPの場合、次を確認できます。

SMTP PEAR拡張機能

PHPMailer電子メールライブラリ

良い実験をしてください!



All Articles