WSLを使ってメーリングリストを作成(postfix編)

 当初は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