自分は携帯電話の写真や動画を自宅サーバーのRAID1で運用しているのですが、冗長化したディスクの一部にエラーが発生した場合等、メールで通知してほしい場合があります。
で、手軽に扱えるGmailを使いたいわけですが、何も考えずにmailコマンドなどでGmailにメールを送ろうとすると題名にあるエラーになってしまいます。今回はこのエラーを回避して自宅サーバーやAWS等のサーバーからGmail宛にメールを送れるようにする方法をご紹介します。
根本的な対処方法(今回これはやりません)
以下の公式のガイドにもあるように、Gmailは不正なメールを検知するためにIPアドレスの逆引きを行います。そのため自宅サーバーからメールを送る場合は、インターネット上でドメイン名を取得し、ポインタ(PTR)レコードを正確に設定して逆引きが行えるようにしておく必要があります。
https://support.google.com/mail/answer/81126?hl=ja
自分の自宅サーバーはドメインは取得していないため、根本的な対策は行いません。
今回は、PostfixからGmailにメールを転送してGmailをSMTPサーバーとして利用してメール送信する方法を取ります。
前提パッケージのインストール
Postfix, mailx(mailコマンド), SMTP認証を行うためのライブラリをインストールします。
yum -y install postfix yum -y install mailx yum -y cyrus-sasl cyrus-sasl-plain
以下を実行して起動/自動起動を設定しておきます。
systemctl start postfix systemctl enable postfix systemctl start saslauthd systemctl enable saslauthd
手順
ホストの名前解決
/etc/hostsやDNSでホスト名が名前解決できるようにしておきます。
今回自分はサーバーではドメイン名は設定していません。以下は例です。
192.168.2.5 myserver
メールの転送設定
/etc/postfix/transportを作成して、以下の二行を追加します。
これはgmail宛のメールだけ、GmailのSMTPサーバーへ転送するための設定です。
gmail.com smtp:[smtp.gmail.com]:587 * :
その後、postmapコマンドを使って↑で作成したファイルの情報をPostfixのDBにします。
postmap /etc/postfix/transport
/etc/postfix/transport.dbが作成されていることを確認してください。
サーバーをIPv6で運用していない場合の設定
この設定をしないとPostfixがIPv6を優先的に使おうとしてエラーになることがあります。
/etc/postfix/main.cfを以下のように書き換えます。
inet_protocols = all ↓ inet_protocols = ipv4
Postfixの色々な設定
これも/etc/postfix/main.cfを編集します。以下のパラメーター部分を編集してください。
IPアドレスの部分はご自分の環境に合わせてください。
myhostname = myserver inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks = 127.0.0.0/8 192.168.2.0/24 home_mailbox = Maildir/
SMTP認証の設定
これも/etc/postfix/main.cfを編集します。末尾に以下を追加してください。
# smtp-auth relayhost = [smtp.gmail.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/relay_password smtp_sasl_security_options = noanonymous # starttls smtp_tls_security_level = may smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
上で記載したパスワードファイルを作成していきます。
/etc/postfix/relay_passwordを作成して、以下のようにGmailアドレスとそのパスワードを入力してください。
[smtp.gmail.com]:587 mygmailaddress@gmail.com:mygmailpassword
その後以下のコマンドを実行します。
chmod 600 /etc/postfix/relay_password postmap hash:/etc/postfix/relay_password
Gmail側の設定
セキュリティの観点から、Gmailは信頼性の低いクライアントからメールの受信を許可していません。
今回はこの設定を許可するように変更して、自宅サーバーからのメールを受信できるようにします。
https://myaccount.google.com/lesssecureapps
テストメールを送ってみる
以下のコマンドを実行してメールを送ってください。
echo "test from myserver" | mail -s "test mail" mygmailaddress@gmail.com