コマンドラインからGmailのSMTPを使ってメールを送信する

chakemiです。引き続きネットワークのお勉強です。 本日は、コマンドラインからGmailのSMTPサーバにログインしてメールを送信してみたいと思います。

SMTP(Simple Mail Transfer Protocol)はサーバークライアント間のSMTPセッション上でコマンド・応答をやり取りする、対話型のプロトコルでネットワークのお勉強にはもってこいです。

メールサーバを立ち上げた時なんかもtelnetを使用して動作確認したりします。 本日は手頃のメールサーバが無かったため、Gmailを利用してみました。

なので、今回はCentOSでOpenSSLを利用しました。 また、SMTP認証に必要なbase64でエンコードした文字列をPHPで生成しときます。

1

2

3

4

<?php

$string = ("[email protected]\000[email protected]\000password");

echo base64_encode($string);

echo ("\n");

※ユーザー名が[email protected] パスワードがpassword の時

では、opensslコマンドでs_clientオプションを使ってTLSでサーバと接続します。

1

2

3

4

5

6

7

[[email protected] ~]# openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587



CONNECTED(00000003)



~~省略~~



250 ENHANCEDSTATUSCODES

250で接続成功の応答が返ってきたら セッションの開始HELOコマンドを送信ですが、このコマンドは古いため、拡張コマンドであるEHLOコマンドを使用します。

1

2

3

4

5

6

7

EHLO localhost



250-mx.google.com at your service, [xxx.xxx.xxx.xxx]

250-SIZE 35882577

250-8BITMIME

250-AUTH LOGIN PLAIN XOAUTH

250 ENHANCEDSTATUSCODES

返ってきた情報から、このサーバで利用できる拡張サービスがわかります。

ここでは、認証にauth plainを使用します。

1

2

3

AUTH PLAIN 先ほど生成したbase64文字列



235 2.7.0 Accepted

認証が成功したらAcceptedが返ってきます。 base64で生成した文字列に問題があると「デコードできない」や「認証失敗」といったメッセージが返ってきますので見直してください。

ここからは、通常のtelnetで接続したときを同様

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

mail from:<[email protected]> ←送信者



250 2.1.0 OK s10sm320554pbq.13



rcpt to:<> ←宛先



250 2.1.5 OK s10sm320554pbq.13



data ←入力開始



354  Go ahead s10sm320554pbq.13



subject:test mail ←件名



this is test mail ←本文



. ←終端



250 2.0.0 OK 1329968743 s10sm320554pbq.13



quit ←セッション終了



221 2.0.0 closing connection s10sm320554pbq.13

無事、メールが届いていたら成功