やりたいこと
- Linux(CentOS)のmailコマンドでgmailにメールを送りたい。
環境
- CentOS7.3(postfix稼働済)
mailコマンドのインストールと送信テスト
インストール
まず、CentOS7.3には標準でmailコマンドが入っていないので入れます。実際はmailx。postfixは稼働しているようです。
sudo yum install mailx
送信テスト
とりあえず、送信してみます。
echo "test mail!" | mail -s "test" xxxxx@gmail.com
残念ながらとどきません。postfixのログを見てみます。
.
Apr 5 17:39:19 localhost postfix/smtp[26381]: connect to gmail-smtp-in.l.google.com[64.233.189.27]:25: Connection refused
.
どうやらgmailのsmtpに到達できていないようです。
Gmailの設定
数年前にGmailのセキュリティーが強化され、普通のメアド(ID)+パスワードではgmailクライアント以外からはメールの送信ができなくなっています。gmailクライアント以外から送信する場合は専用のパスワードを取得する必要があるので取得します。
アプリパスワードの設定
[アカウント] -> [ログインとセキュリティ ] -> [アプリパスワード]にて、パスワードを発行します。
私は2段階認証をONにしているので上記の手順なのかもしれません。2段階認証を設定してない場合は別の設定かもしれません。
Postfixの設定
アプリパスワードが取得できたので、Postfixの設定を行います。
必要コンポーネントのインストール
まずSASL認証をするために必要なコンポーネントをインストールします。
sudo yum install cyrus-sasl-plain
main.cfの編集
mail.cfを編集し必要な記述を行います。gmailのアカウントは外部ファイルで設定します。
## add for gmail
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
パスワードファイルの準備
gmailのアカウントを下記のフォーマットで記述し、ハッシュ化します。
[smtp.gmail.com]:587 xxxxx@gmail.com:PASSWORD
xxxxx@gmail.comおよびPASSWORDは各自の環境で。
ハッシュ化します。
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
実際利用されるのはsasl_passwd.dbファイルのようなのでsasl_passwdファイルは削除してもいいようです。
postfix再起動
設定を反映させるためにpostfixを再起動します。
sudo systemctl reload postfix.service
送信テスト
再度送信してみます。
echo "test" | mail -s "test1" xxxxx@gmail.com
いちおうmaillogを確認するとstatus=sentとなっています。
.
relay=smtp.gmail.com[64.233.189.108]:587, delay=2.4, delays=0.02/0.01/1.2/1.2, dsn=2.0.0, status=sent (250 2.0.0 OK 1491422360 v9sm39011968pfg.133 - gsmtp)
.
うまくいったようです。