HTTP プロキシは、メールサーバーのポートへの CONNECT トンネルを許可していれば、SMTP 接続を中継できます。この許可は、同じプロキシでウェブページが読み込めるかどうかより重要です。

STARTTLS を使った SMTP での送信は、おおむね次の形になります。

curl --proxy http://203.0.113.10:8080 --proxytunnel \
  --url smtp://mail.example.com:587 --ssl-reqd \
  --user mail-user \
  --mail-from [email protected] \
  --mail-rcpt [email protected] \
  --upload-file message.eml

アドレスはプレースホルダーです。使用を許可されているメールサービスと送信者を使ってください。ユーザーオプションにユーザー名だけを指定すると、curl はパスワードを尋ねます。メッセージファイルには適切なメールヘッダー、空行、本文が必要で、受信者のアドレスだけでは足りません。

接続とログインは別々になると想定する

HTTP トンネルのオプション を使うと、curl はプロキシに対して SMTP の宛先への接続を要求します。プロキシは curl のプロキシ認証オプションによる独自の認証情報 を要求することがあります。その後、SMTP サービスがその接続の中でメールユーザーを認証します。

--ssl-reqd は、この SMTP URL に TLS へのアップグレードを要求します。想定するメールホスト名に対して証明書の検証を有効にしたままにしてください。プロキシ認証の成功は、TLS やメールのログインが成功することを保証しません。

多くの汎用 HTTP プロキシは CONNECT のポートを制限しています。ポート 587 の拒否は意図的なポリシーである場合があります。無関係なポートを繰り返し試したり、制限を障害として扱ったりせず、承認された経路を申請してください。

メールサービスは、経路が機能した後でも送信者の権限や送信ポリシーを適用することがあります。SMTP の応答を読んでください。認証後に拒否されたメッセージは、SMTP の挨拶が届く前に拒否されたトンネルとは別の対処が必要です。

関連記事