
このサイトもメールが届かない状態でしたwww
原因を調べて直したので、その手順をまとめておきます。ドメインやIPアドレスは伏せて、例の値に置き換えています。
環境
| 項目 | 内容 |
|---|---|
| サーバー | ConoHa VPS(Ver.3.0) |
| OS/構成 | AlmaLinux 9/KUSANAGI |
| サイト | WordPress(サブドメインで複数サイト) |
| DNS | バリュードメイン |
| この記事での例 | ドメイン:example.com/サイト:sub.example.com/VPSのIP:xxx.xxx.xxx.xxx |
まずは原因を調べる
SSHでVPSに入り、次のコマンドで状態を確認しました。
1. メール送信ソフト(Postfix)が動いているか
systemctl status postfix --no-pager2. 外向きの25番ポートが開いているか
timeout 5 bash -c '</dev/tcp/gmail-smtp-in.l.google.com/25' && echo OK || echo NG3. ドメインのSPFレコード
dig +short TXT example.com4. VPSのIPの逆引き
dig +short -x xxx.xxx.xxx.xxx5. 送信ログ
journalctl -u postfix -n 30 --no-pager確認結果
| チェック項目 | 結果 | 判定 |
|---|---|---|
| Postfix | inactive (dead)/自動起動もdisabled | NG(これが全滅の原因) |
| 25番ポート | OK | 問題なし |
| SPF | 前のサーバーのIPだけが登録されている | NG |
| 逆引き | ConoHaの汎用ホスト名のまま | △ |
| 送信ログ | — No entries –(1通も送られていない) | NG |
KUSANAGIはWeb用の構成なので、Postfixがインストールされていても止まったままでした。WordPressがメールを出そうとしても、受け取って送る役がいないので1通も外に出ていなかったわけです。
修正手順
ステップ1:Postfixの設定と起動
送信元の名前を、VPSのIPを向いているサブドメインにそろえ、メールのドメインをexample.comにします。IPv6で送るとSPFが合わずに弾かれやすいので、IPv4だけで送るようにしました。
1. サーバー名を設定
postconf -e 'myhostname = sub.example.com'2. 送信元ドメインを設定
postconf -e 'myorigin = example.com'3. IPv4だけで送る
postconf -e 'inet_protocols = ipv4'4. 外からは受け付けない(踏み台にされないため)
postconf -e 'inet_interfaces = loopback-only'5. 起動と自動起動をオン
systemctl enable --now postfix6. 動作確認
systemctl status postfix --no-pager「active (running)」になればOKです。
ステップ2:SPFにVPSのIPを追加
バリュードメインの管理画面で、ドメインのDNS設定を開きます。ここはターミナルではなくブラウザでの作業です。
元のSPFの行はこうなっていました。
txt @ v=spf1 ip4:yyy.yyy.yyy.yyy ~all前のサーバーのIPは残したまま、VPSのIPを足して保存します。
txt @ v=spf1 ip4:yyy.yyy.yyy.yyy ip4:xxx.xxx.xxx.xxx ~all反映はターミナルで確認しました。
dig +short TXT example.com @ns1.value-domain.com保存し忘れると「最終更新日時」が変わらないので、そこで気づけます。
ステップ3:逆引きの変更(今回は見送り)
逆引きもサブドメイン名に変えたかったのですが、ConoHa VPS Ver.3.0のコントロールパネルでは、サーバーの詳細画面やネットワークのメニューを探しても設定する場所が見つかりませんでした。
今の汎用ホスト名でも「逆引き自体は存在する」状態なので、Gmailの最低条件はクリアしています。今回はここを飛ばして先に進めました。
テスト送信でハマったところ
ここまでで送れると思い、自分のGmail宛にテストを送ってみました。
printf "Subject: ConoHa test\n\nテスト送信です\n" | sendmail example@gmail.comところがログを見ると、Gmailに拒否されていました。
status=bounced (... 550-5.7.26 Your email has been blocked because the sender is unauthenticated.
... SPF [vm-xxxxxxxx.novalocal] with ip: [xxx.xxx.xxx.xxx] = did not pass ...)原因は、送信者が root@vm-xxxxxxxx.novalocal というサーバーの仮の名前のままだったことです。example.comとして名乗っていないので、せっかく設定したSPFがチェックされません。
そこで、送信者の名前をexample.comに置き換えるルールを追加しました。
1. 置き換えルールのファイルを作る
echo '/^(.*)@vm-xxxxxxxx\.novalocal$/ ${1}@example.com' > /etc/postfix/sender_canonical2. Postfixにそのルールを使わせる
postconf -e 'sender_canonical_maps = regexp:/etc/postfix/sender_canonical'3. 設定を読み込み直す
systemctl reload postfix4. もう一度テスト送信
printf "Subject: ConoHa test2\n\nテスト送信です\n" | sendmail example@gmail.comvm-xxxxxxxx の部分は、自分のサーバーのホスト名(プロンプトの @ の後ろに出ている名前)に置き換えてください。
結果
今度は無事にGmailに届きました!ただし入ったのは迷惑メールフォルダでした。
迷惑メール扱いになった理由として考えられるのはこのあたりです。
| 理由 | 内容 |
|---|---|
| DKIMがない | SPFだけだと本人確認がやや弱いと見られがち |
| 逆引きが汎用名 | 今回設定できなかった部分 |
| テストの中身が短い | 件名と1行だけのメールは迷惑メール判定されやすい |
自分宛の通知メールなら、Gmailで「迷惑メールではない」を押しておけば、次からは受信トレイに入りやすくなります。お客さん宛など確実に受信トレイに届けたい場合は、DKIMの追加が次の手になりそうです。
まとめ
| やったこと | ポイント |
|---|---|
| Postfixの起動 | KUSANAGIでは止まったままなので、まずここ |
| SPFの追加 | 前のサーバーのIPは残してVPSのIPを足す |
| 送信者名の置き換え | novalocalのままだとGmailに弾かれる |
| 逆引き | Ver.3.0の画面では見つからず見送り |
WordPressの通知メールも同じPostfix経由で出るので、これでVPS上の全サイトでメールが届くようになりました。VPSに引っ越してから「メールが来ないな」と思ったら、まずPostfixが動いているかを確認してみてください。





コメント