当初はsendmail+majordomoを利用してメーリングリストを実現しようとしたが、利用しているUbuntuにmajordomoが用意されていないらしいので、途中から切り替えた。なぜmajordomoかというと、件名に連番をつけたいから。
・インストール
$ sudo apt install postfix
Internet with smarthostを選択
mydomain.com
・設定
変更部分のみ
$ sudo vi /etc/postfix/main.cf
myhostname = ml.mydomain.com
mydomain = mydomain.com
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
smtpd_banner = $myhostname ESMTP unknown
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix
# ここから設定ファイルの下部に追加する
smtpd_recipient_restrictions=permit_mynetworks, reject
# 転送先の上位メールサーバ
relayhost = [smtp.gmail.com]:587
#relayhost = [email-smtp.ap-northeast-1.amazonaws.com]:587
# SMTP-AUTH を有効
smtp_sasl_auth_enable = yes
# 転送先のサーバのアドレスと認証するユーザ名とパスワードを記述したファイル
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# 匿名ログインを許可しない
smtp_sasl_security_options = noanonymous
# 転送先のサーバの SASL メカニズムに対するフィルタ
smtp_sasl_mechanism_filter = cram-md5, plain, login
# 可能ならば TLS 暗号化
smtp_tls_security_level = may
# CA証明書(ca-certificates)
smtp_tls_CApath = /etc/ssl/certs/ca-certificates.crt
# ログ設定(デフォルト値)
# /var/log/mail.logに出力される
syslog_facility = mail
# mailman用設定
recipient_delimiter = +
owner_request_special = no
・SMTP-AUTH
転送先のサーバのアドレスと認証するユーザ名とパスワードを行ごとに記述する。
複数行に羅列でき、main.cfで指定されたものが使われるらしい
$ sudo vi /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 xxxx@gmail.com:yyyy
[email-smtp.xxxx.amazonaws.com]:587 xxxx:yyyy
ファイルのパーミッションを変更する
$ sudo chmod 600 /etc/postfix/sasl_passwd
Postfix が参照するデータベースファイルに反映させる
$ sudo postmap hash:/etc/postfix/sasl_passwd
・設定ファイルのエラー確認
$ sudo postfix -v check
postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out
上のワーニングが出るが無視してよいらしい。いやならシンボリックリンクからハードリンクに変える
$ sudo rm /etc/postfix/makedefs.out; sudo ln /usr/share/postfix/makedefs.out /etc/postfix/makedefs.out
・Postfix を再起動する
$ sudo service postfix restart
Windows Defenderファイアウォールからの警告が出たら許可する
・ログを確認する
$ tail -f /var/log/mail.log
$ tail -f /var/log/mail.err
ログが出力されない場合、rsyslog のプロセスや設定や状態を確認する
プロセスの確認
$ ps aux|grep rsyslog|grep -v grep
状態の確認
$ sudo /etc/init.d/rsyslog status
プロセスの開始
$ sudo /etc/init.d/rsyslog start
rsyslogd からimklogのエラーが出るときは、/etc/rsyslogd.conf から
module(load=”imklog” permitnonkernelfacility=”on”)
をコメントアウトする
以下のエラーはWSLの問題らしく消せないらしい
rsyslogd: set SO_TIMESTAMP failed on '/dev/log': Invalid argument rsyslogd: set SO_TIMESTAMP failed on '/var/spool/postfix/dev/log': Invalid argument
・デバッグ
debug_peer_listに指定した範囲に対してのみ、デバッグ情報が出力される
$ sudo vi /etc/postfix/main.cf
debug_peer_level = 1 # デフォルトは2
debug_peer_list = 0.0.0.0/0 # デフォルトは無し
・テスト送信
telnet localhost 25
MAIL From: user@ml.mydomain.com
RCPT TO: postmaster@dmyomain.com
DATA
From: user@ml.mydomain.com
Subject: This is the subject field of the email
This is the message to be sent.
.
quit