sendmailが遅すぎた時に試したこと【2分 ⇒ 数秒に改善】

サーバーのsendmailコマンドでメールを送ったり、
あるいはPHPの mb_send_mail 関数でメールを送ったり・・・

そういうとき、メールが届くまで超遅かった時があったんです。

今まで数秒で遅れてたのが、数分くらいかかる、そのくらいの遅さ

でもある設定を見直したら、この遅さが簡単に解決できました。

ここでは sendmail が遅すぎるときに試したこと をメモしたいと思います。

ちなみに自分の環境は次の通り

  • OS : Ubuntu18.04
  • postfix + sendmail を使用

僕自身の個人的な経験なので、鵜呑みにせず参考程度にお読みください。

sendmailで問題が発生したときの状況

まず問題に気付いたのはPHPから mb_send_mail  を送った時

▼ 実際に問題が起きたスクリプト例

送信自体は成功するには成功したんです。

でも送信されて届くまでの時間がとんでもなく遅い!

例えば Gmail に送ったら1~2分くらいかかりました。( yahoo とか 捨てメアド でも同じ)

 

ちなみに sendmail をコマンドラインから実行しても、遅いのは変わりません。

送れるけど、本当に遅いです。

こういうの本当に困りますね~~どうしようか頭を抱えてしまいました。

そして色々調べた結果、ホスト名に問題があることが発覚

解決のカギは hosts ファイルにあった

自分の力じゃ sendmail が遅い原因なんて分からなくて、お手上げです。

なので「sendmail slow to send」でちょっとググってみました。

 

そうすると解決になりそうなページが・・・

▼ この Digital Ocean ってとこのコミュニティページ(?)

このページに問題を解決できるヒント(というか答え)が書いてありました。

自分の環境で有効だったのが、上のページの次の部分

If you check your /var/log/mail.log you will probably find something like this: My unqualified host name (localhost) unknown; sleeping for retry. This is because sendmail requires "hostname" to be a fully qualified domain name.

update your "/etc/hosts" file:
nano /etc/hosts to look like this: 127.0.0.1 localhost.localdomain localhost yourhostname

boom, fast sendmail.

引用元 : Sendmail is slow to send mail

この引用の赤色で囲った部分がポイント!

どうやら hosts ファイルに localdomain  と ホスト名を追加すればいい模様です。

そしてこのページを見ながら、実際に試したのが次の手順

 

まずターミナルから vim  とか使って hosts ファイルを編集(Ubuntuの場合)

そして次みたいな部分が見つかるはず

この行を見つけたら、コメントアウトして次みたいに置き換えます。

ただし myhostname  はサーバーのホスト名(例 : example.com  )に必ず変えてください。

 

そうしたら postfix とか sendmail を再起動

▼ あるいはリブート(再起動)してもOK

 

そしてもう一度 sendmail でメール送信してみると・・・

数分かかってたのが、数秒にまで改善!!

詳しくは分からないけど、sendmail がホストを探すのに時間がかかってたのかもしれません。

とりあえず解決して良かった(^^)

ここまでのまとめ

ということで、簡単に解決策まとめ

  • まず hosts ファイルを編集
    開いたら 127.0.0.1 localhost  を探し出して、 127.0.0.1 localhost.localdomain localhost myhostname  に変更する
  • sendmail と postfix を再起動
    もしかしたら必要ないかもしれないけど、一応しておく

自分の環境( Ubuntu18.04 & postfix )での話なので、汎用的な解決策じゃないです。

でも誰かの役に立つかもしれないので、一応記録として残しておきます。ではまた($・・)/~~~