このエントリーをはてなブックマークに追加

メール送信に必要なtelnetコマンド

Postfix


ポート25によるtelnetコマンドでのメール送信


[root@www13154uf ~]# telnet localhost 25	<-- localhostに25番で接続。
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.hogehoge.jp ESMTP unknown
helo localhost					<-- ご挨拶
250 mail.hogehoge.jp
mail from:hogehogehoge@inamuu.com		<-- メール送信元
250 2.1.0 Ok
rcpt to:hogehoge@hogehogehoge.com		<-- メール送信先
250 2.1.5 Ok
data						<-- メールの本文を書くよと宣言
354 End data with <CR><LF>.<CR><LF>
test mail dayo					<-- 本文を書いてみる
.						<-- ピリオドは本文終了の意味
250 2.0.0 Ok: queued as 7AAAE60687
quit						<-- メール送信の終了
221 2.0.0 Bye
Connection closed by foreign host.

ポート587で送信認証を通してメール送信

パターン1

telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.hogehoge.com ESMTP unknown
ehlo localhost
250-mail.hogehoge.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth plain base64エンコードしたパスワード   <--- ここで認証
235 2.7.0 Authentication successful
mail from:hoge@hogehoge.com       <--- 送信元 
250 2.1.0 Ok
rcpt to:test@hoge2.com          <--- 送信先
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
test 587
.
250 2.0.0 Ok: queued as CA90442C1E

パターン2

$ telnet smtp.hogehoge.com 587   <--- 587への接続 
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 smtp.hogehoge.com ESMTP qpsmtpd 0.80 ready; send us your mail, but not your spam.
ehlo smtp.hogehoge.com           <--- こんにちは
250-smtp.hogehoge.com Hi Unknown [172.19.0.1]
250-PIPELINING
250-8BITMIME
250-SIZE 10240000
250 AUTH PLAIN LOGIN CRAM-MD5
auth plain base64エンコードしたパスワード   <--- 認証情報を入力
235 Authentication successful for test@hogehoge.com - authsql/plain
mail from: <test@hogehoge.com>
250 <test@hogehoge.com>, sender OK - how exciting to get mail from you!
rcpt to: <info@piyopiyo.com>
250 <info@piyopiyo.com>, recipient ok
data
354 go ahead
Suebject: TEST MAIL 587                <--- 件名
                                        <--- 空行
TEST MAIL 587                          <--- 本文
.                                      <--- 終わりを表すピリオド
250 Queued!  (Queue-Id: AF3EC34C5)
quit                                           <--- 接続おわり
221 smtp.hogehoge.com closing connection. Have a wonderful day.
Connection closed by foreign host.

base64エンコードするためのコマンド

printf "%s\0%s\0%s" ユーザー名 ユーザー名 パスワード | openssl base64 -e | tr -d '\n'; echo

base64デコード

echo "文字列" | openssl enc -d -base64

ポート465でAUTH LOGINでSMTP認証をして送信する

最初にユーザー名とパスワードをbase64でエンコードする

printf ユーザー名 | base64
printf パスワード | base64

openssl s_clientで送信する

openssl s_client -connect メールサーバー:465
helo メールサーバー
250 メールサーバー
AUTH LOGIN
334 VXNlcm5hbWU6
エンコードしたユーザー名
334 UGFzc3dvcmQ6
エンコードしたパスワード
235 ok authed
mail from: 送信元
250 ok
rcpt to: 宛先
250 ok
data
354 Enter mail
test mail
.
250 ok 1476933774 qp 23764

CRAM-MD5認証

$ telnet localhost 10025
ehlo localhost

cram-md5 認証を選択する

auth cram-md5
334 PDMzMzMwNTc5NjkuMTI2NTU5NzZAc210cfAwMC5sb2NgbGRfbWFpbj2=      <-- 毎回変わる

334の後の文字列をbase64でデコードする

$ cat base64.txt
PDMzMzMwNTc5NjkuMTI2NTU5NzZAc210cfAwMC5sb2NgbGRfbWFpbj2=
$ base64 -D base64.txt
<2939882246.12656088@smtp.localdomain>

上記文字列を下記ファイルへ貼り付けして、phpを実行する

<?php
print hash_hmac( "md5", "<2939882246.12656088@smtp.localdomain>", "ここにパスワード入れる" )
?>
$ php md5.php
2d3f47f72cf04509098cc91fdfebce22

ユーザー名と上記値をbase64で符号化する

$ printf "ユーザー名 2d3f47f72cf04509098cc91fdfebce22" | base64
aW5mb0Bnb29wZXRlc3QuY29tIDJkM2Y0N2Y3MmNmMDQ1MDkwOThjYzkxZmRmZWJjZTIy

表示された値をサーバーに送る

auth cram-md5
334 PDI5Mzk4ODIyNDYuMTI2NTYwODhAc210cDAwMC5sb2NhbGRvbWFpbj4=
aW5mb0Bnb29wZXRlc3QuY29tIDJkM2Y0N2Y3MmNmMDQ1MDkwOThjYzkxZmRmZWJjZTIy
235 2.7.0 Authentication successful

OK