Ubuntu Linux Server 22.10のPostfixでGmailのsmtp経由でメール送信できるようにする
今回はUbuntu Linux 22.10 ServerのPostfixでGmailの送信サーバを使ってメール送信できるようにしていきます。以前ArchLinuxでも同様にPostfixの設定を実施して記事のネタが被りますが、今回作業したUbuntuでは若干手順が異なる部分もあったので、リニューアル記事として記載しておきます。
Postfixのインストール
まずはPostfixを以下コマンドでインストール。mailutilsはmailコマンドでメール可能にするため。
$ sudo apt install postfix mailutils
設定(Google認証用ファイルの準備)
自身のGoogleアカウントで次に以下のURLにアクセスし、二段階認証のパスワードを入手しておきます。
アプリはその他を選びpostfixとしましょう。
https://accounts.google.com/IssuedAuthSubTokens?hide_authsub=1
認証パスワードは16桁、4桁毎にスペースが空いているのが表示されているかと思いますが、
これをメモして以下ファイルに記述します。
$ sudo vi /etc/postfix/gmail_sasl_password
尚、記述の際は4桁毎の区切りのスペースは無くて良いです。(abcd efgh ijkl mnop)
[smtp.gmail.com]:587 abcde12345@gmail.com:abcdefghijklmnop
保存が終わったら以下のコマンドでハッシュ化します。
$ sudo postmap hash:/etc/postfix/gmail_sasl_password
すると/etc/postfix/gmail_sasl_password.dbが生成されているかと思います。
以下コマンドで確認します。
$ ls -l /etc/postfix/gmail_sasl_password.db
<注意>
ここで、仮に「postmap: fatal: bad string length 0 < 1: setgid_group =」というエラーが出た場合、
main.cfのファイルの「setgid_group =」の箇所を「#setgid_group =」としてコメントアウトします。
続いてtransportファイルを準備します。
$ sudo vi /etc/postfix/transport
ファイルの中には以下の記述をします。
gmail.com smtp:[smtp.gmail.com]:587
以下のコマンドでハッシュ化します。
$ sudo postmap transport
すると/etc/postfix/transport.dbが生成されているかと思います。
以下コマンドで確認します。
$ ls -l /etc/postfix/transport.db
設定(Postfix)
以下のファイルを編集します。
$ sudo vi /etc/postfix/main.cf
編集内容は以下です。
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = hostname
mydomain = test.domain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localhost, $myhostname, haproxy0, localhost.localdomain, localhost,$mydomain
mynetworks = 192.168.1.0/24,127.0.0.1/8
mailbox_size_limit = 100
recipient_delimiter = +
inet_interfaces = all
default_transport = error
relay_transport = error
inet_protocols = all
html_directory = no
setgid_group = postdrop
#gmail
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail_sasl_password
smtp_sasl_mechanism_filter = plain
smtp_sasl_tls_security_options = noanonymous
transport_maps = hash:/etc/postfix/transport
上記を保存して、postfixのサービスを再起動します。
$ sudo systemctl restart postfix
送信テスト
コマンドラインからメール送信テストをしてみましょう。
以下コマンドを打ち込みます。
$ mail -s test abcd12345@gmail.com
ここから本文の入力モードになります。
適当に入力して最後に、「ctrl」+「D」を押して入力終了で送信されます。
上記で宛先のメールアドレスにメールが送信できていればOKです。
仮に届いてない場合は以下のコマンドでまだスプールに残っているか確認です。
$ mailq
または
$ postqueue -p
上記で権限がないとエラーが出る場合は、以下としてキューに残っているか確認します。
$ sudo mailq
ここで残っていた場合は、パスワードの認証失敗か、
送信先アドレスが間違ってリトライ待ちになっているケースもあります。
再度ファイルを作成し直して確認してください。
スプールに残ってしまったキューは修正後もキューは残っています。
一括で削除するには以下コマンドで送信キューを削除できます。
$ sudo postsuper -d ALL
全てでは無く、キューの一部だけ削除する場合は、
mailqの左端のIDを以下のxxxxxxx部に入れて実行します。
$ sudo postsuper -d xxxxxxxx
まとめ
今回はUbuntu Linux 22.10のServerでpostfixを使ってGmail経由でメール送信する方法について
紹介しました。
何かの参考になれば幸いです。
おまけ
運用していく中で、crontabの結果をメールで配信したい場合は以下で可能です。
crontab の1行目に以下一文を追記します。
MAILTO="abcd12345@gmail.com"