GmailをSMTPサーバとして利用する方法です。
- openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
-
-ign_eof
がないと、以下のエラーでRCPT TO後に死ぬ
-
RENEGOTIATING
21874:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-50/src/ssl/s3_pkt.c:543:
- opensslでセッションを開始したあとの対話は以下のように進みます
EHLO localhost #ユーザー入力
250-mx.google.com at your service, [106.138.98.200]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
250-ENHANCEDSTATUSCODES
250 CHUNKING
AUTH LOGIN #ユーザー入力
334 xxxxxxx
xxxxxxxxxxxxxxxxx #ユーザー入力、認証(user)
334 xxxxxxx
xxxxxxxxxxxxxxxxx #ユーザー入力、認証(pass)
235 2.7.0 Accepted
MAIL FROM: <xxx@gmail.com> #ユーザー入力
250 2.1.0 OK fe3sm63961472pbd.66 - gsmtp
RCPT TO: <xxxx@example.com> #ユーザー入力
250 2.1.5 OK fe3sm63961472pbd.66 - gsmtp
DATA #ユーザー入力
354 Go ahead fe3sm63961472pbd.66 - gsmtp
Subject: test_html #ユーザー入力
Mime-Version: 1.0; #ユーザー入力
Content-Type: text/html; charset="ISO-8859-1"; #ユーザー入力
Content-Transfer-Encoding: 7bit; #ユーザー入力
<!DOCTYPE HTML>
<html lang="ja-JP">
<body>
<h1>はろーはろー</h1>
</body>
<html>
.
はまったところ
-
AUTH LOGINにより認証を行う
- base64によるuser / pass の符号化が必要
echo 'xxx@gmail.com' | openssl enc -e -base64
- passwordは、 アプリケーション固有のパスワード が必要
- アプリケーション固有のパスワードを使用してログインする - Google アカウント ヘルプ
- 同様にbase64に符号化する
-
MAIL FROM:
,RCPT TO:
のフォーマット- アドレスを<>で囲む必要がある。でないと、
555 5.5.2 Syntax error.
で死ぬ
- アドレスを<>で囲む必要がある。でないと、
-
Mime-VersionとContent-Typeの指定
- Content-Type: text/html
以下を参考にしました