hamakyo.log
open main menu

Nodemailerでのメール送信トラブルシューティング記録

/ 3 min read
last update date:

Nodemailerでのメール送信トラブルシューティング記録

使用技術・構成

  • フレームワーク: Next.js (App Router)
  • メール送信: Nodemailer
  • デプロイ環境: Vercel
  • メールサーバ: さくらインターネット
  • フロントから /app/api/contact/route.ts 経由でPOSTし、SMTP送信

発生した問題

症状:

  • ローカル環境では送信できたが、本番(Vercel)環境では送信に失敗
  • Vercelのログで以下のエラーが出力された:
Error sending email: Error: Mail command failed:
550 5.7.1 <contact@hamakyo.dev>... Command rejected

試行錯誤のログ

  • SMTP設定、環境変数の確認(EMAIL_USER, EMAIL_PASSWORD, EMAIL_FROM など)
  • Nodemailerの接続構成と createTransport 設定を再確認
  • export const runtime = "nodejs" をAPI Routeに追加(Edge Function制限対策)
  • Vercelの環境変数と本番反映を手動で確認(自動では反映されないことに注意)
  • メールアカウントがさくら側に存在し、SMTP認証が可能であることを確認
  • SPFレコードのCloudflare DNS追加を検討(後述)
  • ログで 550 5.7.1 の MAIL FROM 拒否エラーを確認 → 送信制限 or 信頼性の問題と判断

決定的な原因

さくらインターネット契約直後の「メール送信制限」 & 「国外IPアドレスフィルター」

詳細:

  • 新規契約時は最大14日間、SMTP送信が制限される
  • 会員メニューで電話番号認証+制限解除ボタンを押すことで手動解除可能
  • さらに、Vercelは国外IPのため、国外IPアドレスフィルターを解除しないとSMTP拒否される

解決方法(実際にやったこと)

  • 会員メニューで電話番号認証+制限解除申請
  • さくらのメール管理画面で「国外IPアドレスフィルター」を無効化
  • 数分後、Vercel環境からのメール送信に成功

教訓・メモ

  • ローカルと本番の挙動は「送信元IP」や「送信回数制限」によって異なる
  • SMTPは正しい設定+信頼性の証明(SPF/DKIM)+送信権限がないと動かない
  • Vercelでメール送信する場合、国外IP制限に要注意