Gmail でのメール送信

この記事は1年以上前に書かれたものです。 情報が古い可能性があります。

監視用のスクリプトからメールを飛ばしたかったので、Gmail で送信する方法を調べた。

環境

# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
# postconf | grep mail_version
mail_version = 2.10.1
milter_macro_v = $mail_name $mail_version
# mailx
Heirloom Mail version 12.5 7/5/10.

基本的にはここそのまま。

mailコマンドでgmailを送る - Qiita
やりたいこと Linux(CentOS)のmailコマンドでgmailにメールを送りたい。 環境 CentOS7.3(postfix稼働済) mailコマンドのインストールと送信テスト インストール まず...

Gmail の設定

Gmail を使って送信するために、アプリパスワードを発行します。

[アカウント] > [ログインとセキュリティ] > [アプリパスワード]で、16桁のパスワードを発行します。

あとで使用するので、メモしておきます。一応あとからでも見れます。

インストール

必要なものをインストールしておきます。CentOS7 は minimal では Postfix や Mailx は入ってないみたいなので、これらを入れます。

yum -y update
yum install -y postfix mailx cyrus-sasl-plain

postfix はメール転送エージェント、mailx はメールを送信するメーラー、cyrus-sasl-plain は sasl 認証を行うために使います。

sasl ってなに?

Wikipedia は訳がわかんなかったので、簡単にまとめると、認証やセキュリティに関する処理を行うための機構で、sasl を使うことで特定の認証方式に縛られずに認証が行えるみたいです。

使用する認証には ldap や kerberos, pam などが利用できて、主に SMTP-AUTH などで使われることが多いみたいです。
postfix では Cyrus SASL ライブラリを使用します。

Postfix の設定

Gmail で送るには SMTP-AUTH と TLS の設定が必要みたいです。

Postfix の設定は /etc/postfix/main.cf を編集します。今回は以下を追記するだけで OK です。

## 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
smtp_sasl_auth_enable = yessasl を有効にします
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwdリレー先のサーバアドレスとユーザ名、パスワードを記述したファイルを指定します
smtp_sasl_security_options = noanonymous匿名ユーザのログインを禁止します
smtp_sasl_tls_security_options = noanonymous tls の場合の匿名ログインを禁止します
smtp_sasl_mechanism_filter = plainSMTP-AUTH で認証方法を試す順番を指定します。今回は平文のみ
smtp_use_tls = yes tls を使用します

Gmail のパスワードファイルを作成します。

[smtp.gmail.com]:587 xxxxx@gmail.com:PASSWORD

PASSWORD のところに上で作成したアプリパスワードを入れます。

次にこのファイルをハッシュ化します。

sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd

最後に postfix を再起動します

sudo systemctl reload postfix.service

送信テスト

echo "test" | mail -s "test1" xxxxx@gmail.com

自分のアカウントから xxxxx@gmail.com 宛にメールが送信されます。

ログは /var/log/maillog に出力されるので、エラーが出たら確認しましょう。

トラブル例

docker で作ったときに以下のエラーが出ました。

send-mail: fatal: parameter inet_interfaces: no local interface found for ::1

::1 のインターフェイスがないとのことでしたが、/etc/hosts で ipv6 をコメントアウトするとエラーは消えました。

127.0.0.1       localhost
#::1     localhost ip6-localhost ip6-loopback

コメント

タイトルとURLをコピーしました