以前、sendmailよりもssmtpの方が設定が楽だよ、と書いたことがある。
しばらく運用してみて困ったのは、ssmtpだと、Fromヘッダが、サーバーが指定したメールの宛先(ryow@midgen.asia)になってしまうこと。送信者がryow@midgen.asiaのメールはProtonMailから送信されるように設定してあるため、ProtonMailではスパム判定されてしまう。
かと言って、「このメールを送るサーバーは他にもあるよ」なんて横着な設定はしたくない。自宅サーバーのメールアドレスはわたしのRFCでryow@www.midgen.asiaと決められているから、Fromはryow@www.midgen.asiaで送られてほしい。
ところがどうも、ssmtpではそのあたりの細かい制御が利かないようだ。できるかもしれないけど、よくわからなかった。それで結局、sendmailに戻すことにした・・・のだが、いざ設定するとなると色々忘れていて、詰まる詰まる。送信できるようにしたいだけなのに。OP25Bを回避するだけなのに。
というわけで書き残す。
前提
- FreeBSD 13.2
- 自宅サーバー(ウェブサーバー)にメールを保存しない(全部転送する)
- pkgngかPortsのsendmailを使う(組み込みのsendmailにSASLv2がなく、有効にする方法がよくわからなかった)
sendmailのSASLv2
SASLv2がサポートされていないとPLAINすら認証できず、OP25Bを越えられない、とどこかで見ました。
コンパイルされているかは以下で確認できます。
# sendmail -d0.1 -bv root
Version 8.**.*
Compiled with: DANE DNSMAP IPV6_FULL LOG MAP_REGEX MATCHGECOS MILTER
MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS
PICKY_HELO_CHECK PIPELINING SASLv2 SCANF STARTTLS TCPWRAPPERS
TLS_EC TLS_VRFY_PER_CTX USERDB XDEBUG
SASLv2がなかったら、sendmailをインストールして、mailer.confを書き換えてください。
# pkg install sendmail
...
# cd /etc/mail
# vi mailer.conf
sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail
hoststat /usr/local/sbin/sendmail
purgestat /usr/local/sbin/sendmail
#以下はコメントアウト
#sendmail /usr/libexec/sendmail/sendmail
#mailq /usr/libexec/sendmail/sendmail
#newaliases /usr/libexec/sendmail/sendmail
#hoststat /usr/libexec/sendmail/sendmail
#purgestat /usr/libexec/sendmail/sendmail
# killall sendmail
# make all install start
/etc/mailでmakeを実行すると、/etc/rc.confのhostnameに応じた名前の.mcファイルが作成されます。
書き換えるファイル
すべて/etc/mail内のファイルです。
- access
- authinfo
- local-host-names
- [yourhost.com].mc
accessの書き換え
下記の定義が必要です。1行目にあれば大丈夫です。
Connect:127.0.0.1 RELAY
authinfoの書き換え
AuthInfo:mail.example.com "I:[smtp user id]" "P:[smtp password]" "M:CRAM-MD5 DIGEST-MD5 LOGIN PLAIN"
local-host-namesの書き換え
yourhost.com
メールアドレスの@より後の部分がこのファイル内に書かれたホスト名に一致すると、「自分宛てのメールだ」と判断されます。したがって、配送先メールアドレスのドメインをここに書いてしまうと、たぶんハマります。
[yourhost.com].mcの書き換え
「←」のついた3行を書き足します。
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
FEATURE(authinfo, `hash -o /etc/mail/authinfo') ←
~~~
dnl Dialup users should uncomment and define this appropriately
dnl define(`SMART_HOST', `your.isp.mail.server')
define(`SMART_HOST', `mail.example.com') ←
define(`RELAY_MAILER_ARGS', `TCP $h 587') ←
確認
sendmailに設定変更を適用して、メールを送信し、ログに不審なメッセージが出力されないか確認しつつ、メールボックスを開いて見つめましょう。makeで変なメッセージが出るようなら、どこかでtypoしています。
# make all install restart
# echo "This is a test mail." | mail -v -s Test root
# tail -f /var/log/maillog
「宅内サーバーからsendmailでメール配信」への1件の返信
[…] [2024-01-21追記] pkgのSendmailではなくプリインストール版(?)のSendmailでした。pkgのSendmailなら大丈夫です。 […]