サーバーのsendmailコマンドでメールを送ったり、
あるいはPHPの mb_send_mail 関数でメールを送ったり・・・
そういうとき、メールが届くまで超遅かった時があったんです。
今まで数秒で遅れてたのが、数分くらいかかる、そのくらいの遅さ
でもある設定を見直したら、この遅さが簡単に解決できました。
ここでは sendmail が遅すぎるときに試したこと をメモしたいと思います。
ちなみに自分の環境は次の通り
- OS : Ubuntu18.04
- postfix + sendmail を使用
僕自身の個人的な経験なので、鵜呑みにせず参考程度にお読みください。
sendmailで問題が発生したときの状況
まず問題に気付いたのはPHPから mb_send_mail を送った時
▼ 実際に問題が起きたスクリプト例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
ini_set("mbstring.internal_encoding","UTF-8"); mb_language("uni"); $result = mb_send_mail( 'hogehoge@receiver.com', 'This is Subject', 'This is body', 'From: info<hoge@sender.com>' ); if ( $result ) { print_r('送信に成功しました'); } else { print_r('送信に失敗しました...'); } |
送信自体は成功するには成功したんです。
でも送信されて届くまでの時間がとんでもなく遅い!
例えば Gmail に送ったら1~2分くらいかかりました。( yahoo とか 捨てメアド でも同じ)
ちなみに sendmail をコマンドラインから実行しても、遅いのは変わりません。
1 |
echo "This is body" | sendmail hogehoge@gmail.com |
送れるけど、本当に遅いです。
こういうの本当に困りますね~~どうしようか頭を抱えてしまいました。
そして色々調べた結果、ホスト名に問題があることが発覚
解決のカギは 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 yourhostnameboom, fast sendmail.
この引用の赤色で囲った部分がポイント!
どうやら hosts ファイルに localdomain と ホスト名を追加すればいい模様です。
そしてこのページを見ながら、実際に試したのが次の手順
まずターミナルから vim とか使って hosts ファイルを編集(Ubuntuの場合)
1 |
sudo vim /etc/hosts |
そして次みたいな部分が見つかるはず
1 |
127.0.0.1 localhost |
この行を見つけたら、コメントアウトして次みたいに置き換えます。
1 2 3 4 |
# この行をコメントアウト #127.0.0.1 localhost # 代わりに次みたいに変更する 127.0.0.1 localhost.localdomain localhost myhostname |
ただし myhostname はサーバーのホスト名(例 : example.com )に必ず変えてください。
そうしたら postfix とか sendmail を再起動
1 2 |
# service sendmail restart # /etc/init.d/postfix restart |
▼ あるいはリブート(再起動)してもOK
1 |
# su reboot |
そしてもう一度 sendmail でメール送信してみると・・・
数分かかってたのが、数秒にまで改善!!
詳しくは分からないけど、sendmail がホストを探すのに時間がかかってたのかもしれません。
とりあえず解決して良かった(^^)
ここまでのまとめ
ということで、簡単に解決策まとめ
- まず hosts ファイルを編集
開いたら 127.0.0.1 localhost を探し出して、 127.0.0.1 localhost.localdomain localhost myhostname に変更する
- sendmail と postfix を再起動
もしかしたら必要ないかもしれないけど、一応しておく
自分の環境( Ubuntu18.04 & postfix )での話なので、汎用的な解決策じゃないです。
でも誰かの役に立つかもしれないので、一応記録として残しておきます。ではまた($・・)/~~~