Windows 11にアップグレードしてから、NodemailerなどのNode.jsライブラリを使ったメール送信テストで「connect ECONNREFUSED ::1:587」などのエラーを経験した方は多いのではないでしょうか。実は、Windows 10やWindows Serverで利用できていたSMTPサービスが標準搭載されていないことが原因かもしれません。本記事では、その解決策を詳しくご紹介します。
Windows 11でSMTPサービスがない理由
Windows 11では、以前のWindows 10やWindows ServerのようにSMTPサーバー機能が標準搭載されていません。これにより、Node.jsやその他のアプリケーションからローカルホスト(127.0.0.1や::1)へSMTP接続を行おうとしても、SMTPサーバープロセス自体が存在しないため接続が拒否されます。特にNodemailerなどのライブラリを使って「connect ECONNREFUSED ::1:587」のようなエラーが出る場合は、ほぼ間違いなくローカルSMTPサーバーが起動していないのが原因です。
これまでのWindowsにおけるSMTPサーバーの歴史
過去のWindowsには、IIS(Internet Information Services)の一部としてSMTP仮想サーバーや「SMTPサーバーの機能」が含まれているエディションがありました。たとえばWindows Serverには「SMTPサーバーの役割」をインストールし、簡易的なメール送信機能を利用できたのです。
一方で、Windows 10の多くのエディションにはデフォルトではSMTPサーバーは含まれておらず、代替として外部サービスやサードパーティのSMTPサーバーソフトウェアを使うのが一般的でした。Windows 11になってからは、さらにこの機能が明示的には用意されていないため、標準インストール状態でSMTPを利用するのは難しくなっています。
Windows ServerのSMTPサーバー機能との違い
Windows ServerはサーバーOSとして設計されているため、役割や機能の追加によってSMTPサーバーを動かすことが比較的容易です。しかし、Windows 11はクライアントOSに分類され、サーバー機能を標準で提供する目的がありません。
そのためWindows 11環境でローカルSMTPサーバーを使うには、以下のいずれかの対処が必要になります。
- 外部のSMTPサービスを利用する
- サードパーティソフトウェアでSMTPサーバーを構築する
Nodemailerでメール送信エラーが発生する原因
NodemailerはNode.jsでメール送信を行うための非常に便利なライブラリです。しかし、SMTPサーバーを指定していない場合や、ローカルホストのSMTPサービスが存在しない場合には接続拒否エラーが発生します。
connect ECONNREFUSED ::1:587
これはIPv6のループバックアドレス(::1)を使ってSMTPサーバーに接続しようとした結果、サーバーが見つからず接続を拒否されたことを意味しています。言い換えると「ポート587で待ち受けているSMTPサービスがない」状態です。
IPv6ループバックアドレスへの接続拒否
Node.jsでSMTP接続を行う際、デフォルトでIPv6を優先して接続を試みる設定になっているケースがあります。Windows 11のネットワーク設定でIPv6が有効であっても、SMTPサーバーそのものが起動していなければ接続は失敗します。
ローカルでSMTPサーバーを立てる場合や外部SMTPサービスを利用する場合、IPv6だけでなくIPv4のホストやポートが適切に設定されているかもチェックしましょう。
外部SMTPサービスを活用するメリット
一番簡単かつ確実な方法は、外部SMTPサービスを使うことです。Mailtrap、SendGrid、Gmail、Outlookなど、多くのサービスがSMTP経由でのメール送信をサポートしています。なかでもMailtrapはテスト用に特化しており、安全にテストメールを受信できる環境が整っているため、開発時に最適です。
代表的な外部SMTPサービスの比較表
以下は外部SMTPサービスをいくつかピックアップした簡単な比較表です。
サービス名 | 無料プラン | 特徴 |
---|---|---|
Mailtrap | あり | テスト用に特化した安全な環境 |
SendGrid | あり | 大規模メール配信に対応できる柔軟性 |
Gmail | なし | 個人ユーザーに最適だが送信制限がある |
Outlook(Microsoft 365) | なし | Microsoftアカウントと連携しやすいが商用利用時は注意 |
MailtrapやSendGridのように開発向けの無料プランを提供しているサービスを選べば、初期コストをかけずにSMTP設定が行えます。これらのサービスで発行される「ホスト名(host)」「ポート番号(port)」「ユーザー名(user)」「パスワード(pass)」などをNodemailerの createTransport
メソッドに設定すれば、簡単にメールを送信できます。
Node.js(Nodemailer)での設定例
実際にNodemailerでMailtrapを使う場合のサンプルコードを示します。あなたのアカウント情報に合わせて、ホスト名や認証情報を置き換えてください。
const nodemailer = require('nodemailer');
// Nodemailerのトランスポーターを作成
let transporter = nodemailer.createTransport({
host: 'smtp.mailtrap.io', // MailtrapのSMTPホスト名
port: 2525, // MailtrapのSMTPポート
auth: {
user: '*************', // Mailtrapのユーザー名
pass: '*************' // Mailtrapのパスワード
}
});
// 送信メールの情報を設定
let mailOptions = {
from: '"Test Mail" <test@example.com>',
to: 'recipient@example.com',
subject: 'SMTPテスト',
text: 'これはMailtrap経由で送信されたテストメールです。'
};
// メールを送信
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
上記のようなコードを実行すると、Mailtrapのダッシュボード上で受信メールを確認できます。これにより、実運用のメールアドレスを使わずに安全にテストが可能です。
ローカルでSMTPサーバーを構築する場合
どうしてもローカル環境でテスト用のSMTPサーバーを動かしたい、あるいは社内ネットワークで外部サービスが使えない場合には、以下のようなサードパーティソフトウェアを検討しましょう。
hMailServer
- Windows対応のフリーなメールサーバーソフトウェア
- POP3、IMAP、SMTPといった主要プロトコルをすべてサポート
- Windows 11上でもインストール可能で、GUIで管理設定がしやすい
Postfix(WSLなどでの利用)
- Linux系OSで広く使われているメールサーバーソフトウェア
- Windows上でネイティブには動かせませんが、WSL(Windows Subsystem for Linux)を利用することで一応動作可能
- 高い安定性と柔軟な設定が特徴
設定の基本的な流れ
- ソフトウェアのダウンロードとインストール
- SMTPポート(25、587、465など)の設定
- 必要に応じてSSL/TLSの証明書設定
- Windowsファイアウォールのポート開放設定
- Nodemailerからサーバーのホスト名とポートを指定して接続テスト
Windows 11でポート解放・ファイアウォール設定を行う
ローカルSMTPサーバーを動かす場合、Windowsファイアウォールによってメールポートがブロックされているケースがあります。ポートを開放しておかないと、同一マシン内であっても接続に失敗することがあるので注意が必要です。
Windowsファイアウォールでのポート解放手順
- 「Windows Defender ファイアウォール」 を開く
- 左メニューから 「詳細設定」 をクリック
- 「受信の規則」 を選択し、右ペインから 「新しい規則」 をクリック
- 規則の種類で 「ポート」 を選択
- 対象ポート(25、587、465など使用するSMTPポート)を入力
- 接続を許可し、プロファイル(ドメイン、プライベート、パブリック)を選択
- 規則にわかりやすい名前(例:SMTP Server Port)を付けて完了
これでWindowsファイアウォール上でSMTPサーバー用ポートの受信が許可されます。
SMTPサービスが見つからない問題へのまとめ
Windows 11では標準のSMTPサービスが提供されないため、Nodemailerなどでメール送信を行う場合は何らかの対応が必要です。エラーとしては「ECONNREFUSED ::1:587」のように、ローカルホストでSMTPが起動していない旨を示すメッセージが多く見られます。対策としては、以下のような方法が考えられます。
- 外部SMTPサービスを利用する
MailtrapやSendGrid、Gmail、Outlookなどを設定し、Nodemailerのトランスポート情報に外部サービスの認証情報を登録する。 - ローカル環境にSMTPサーバーを導入する
hMailServerのようなサードパーティソフトウェアを使えば、Windows 11上でもSMTPサーバーが動かせる。 - ポートの解放とネットワーク設定の確認
ファイアウォールやIPv6設定を含め、TCPポートがブロックされていないかをチェックする。
開発用途であれば、外部SMTPサービスが最も簡単でエラーが起きにくい方法です。わざわざローカルでSMTPサーバーを構築しなくても、無料プランで十分テストできるケースが多いでしょう。もし会社や特定の閉じた環境で外部にアクセスできない場合は、hMailServerなどのローカルSMTPサーバーを導入し、ポート解放等のネットワーク設定をしっかりと行う必要があります。
追加のヒント:テストやデバッグを効率化するツール
メール送信を検証する場面では、以下のようなツールを活用すると開発効率が上がります。
MailHog
- ローカル上でテストメールを簡単に受信・閲覧できるOSSツール
- Dockerイメージも提供されており、手軽に起動可能
- CLIやWeb UIで送受信内容を確認できる
Browser-Based SMTP Testツール
- Webブラウザ上でSMTP接続テストを行えるツール
- サーバーのホスト名やポート、認証情報を入力するだけで、手軽に送信テストができる
これらを併用することで、SMTPサーバーの設定ミスやファイアウォールのブロックの確認が素早く行えます。
まとめ:Windows 11でのSMTP環境構築は外部サービスの利用がポイント
Windows 11でSMTPサービスが提供されていないのは、もはや既定の仕様と言ってよいでしょう。ローカルSMTPサーバーを使いたい場合は、サードパーティソフトウェアを導入し、ファイアウォールを調整する必要があります。しかし、テスト用途であれば外部SMTPサービスを活用するほうが断然簡単でトラブルが少ないです。
Nodemailerは外部サービスとの連携に強く、Mailtrapのようなテスト専用サービスとの併用で、メール送信のデバッグ環境を素早く整えられます。もし「connect ECONNREFUSED ::1:587」というエラーが出たら、まずはSMTPサービスが本当に立ち上がっているか、外部SMTPに正しく接続できる設定になっているかを確認してみてください。
コメント