カテゴリー
IT

Sendmailよりssmtpで

自宅のサーバーからメールサーバーにメールを送らせる場合にはOP25B(Outbound Port 25 Blocking)対策を施さないといけないわけですが、ハマってしまいました…。

Sendmailでサーバーからのメールを送信したいだけなのに、SMART_HOSTの設定もauthinfoも何もかも合っているはずなのに、なぜか送信先メールサーバーに直接アクセスしようとしてしまって↓のようなエラーしか見られなかったり…。

Dec 28 04:04:20 home sm-mta[62313]: ***+: to=ryow@midgen.asia, ctladdr=root@home.midgen.asia (0/0), delay=00:00:12, xdelay=00:00:11, mailer=esmtp, pri=32802, relay=smart_host.com. [123.456.789.111], dsn=4.0.0, stat=Deferred: Operation timed out with smart_host.com.

さんざん悩んだ挙句、Sendmail再起動時のメッセージをよく見たら、一行増えていました。

root@home:/etc/mail # service sendmail start
Starting sendmail.
Warning: Option: AuthOptions requires SASL support (-DSASL)
Starting sendmail_msp_queue.

SMTP認証をしたければSASLオプションをつけてビルドせよ、というメッセージです…pkgでインストールされたSendmailはSMTP認証には対応していないのでした

[2024-01-21追記] pkgのSendmailではなくプリインストール版(?)のSendmailでした。pkgのSendmailなら大丈夫です

昔はどれもPortsからカスタマイズして入れていたからこんなことで悩むことはなかったわけです…。

原因はわかったものの、Portsから入れ直すのも手間ですし、なぜかPortsで make config できなかったのもあったので、Portsの不具合を解決することをパッケージはpkgで運用することを決心しました。

pkgで運用するんだったらがんばってSendmailに合わせる必要はないのでは? 送信専用のソフトウェアがあるのでは? と思い調べてみると、ssmtpというソフトウェアがあることがわかりました。

さっそく入れました。

root@home:~ # pkg install ssmtp

親切なことに、インストールしたら、mailer.confに書き込むべき設定内容を表示してくれました。それに従い、以下のようにmailer.confに書き込みました。

#既存の行はコメントアウトします。
#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

# ssmtp用の定義
sendmail /usr/local/sbin/ssmtp
send-mail /usr/local/sbin/ssmtp
mailq /usr/local/sbin/ssmtp
newaliases /usr/local/sbin/ssmtp
hoststat /usr/bin/true
purgestat /usr/bin/true

設定ファイルはFreeBSD標準の場所に作られます。

root@home:~ # vi /usr/local/etc/ssmtp/ssmtp.conf

# 中継するサーバーとポート番号
mailhub=midgenasia.sakura.ne.jp:587

# 送信元ホスト名
# [@]の後部を指定します。
hostname=home.midgen.asia

# 中継するサーバーの認証情報
AuthUser=ユーザーID
AuthPass=パスワード

以下のようにテストメールを送って成否を確認しました。

※念のために最初は ssmtp.conf で Debug=YES をコメントアウトしました。
※/etc/mail/aliases は利かないので、場合によってはcrontabのMAILTOなどにはメールアドレスを指定しておく必要がありそうです。

root@home:~ # echo “This is a test mail from home.midgen.asia.” | mail -s TEST -v ryow@midgen.asia

解決してよかった!

「Sendmailよりssmtpで」への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください