ラベル SMTP の投稿を表示しています。 すべての投稿を表示
ラベル SMTP の投稿を表示しています。 すべての投稿を表示

2011年6月2日木曜日

ローカルで SMTP サーバを利用してメールの送信 - BlackJumboDog, Mercury で OP25B への対応

ローカルで SMTP サーバを立て、PHP でメールの送信テストをしたい。

以前は MELON を利用してローカルからメールを送信。しかし、今回同じように試したところ、いつまで経ってもメールが送信されない。

 

ISP の OP25B による迷惑メールに対する対処

理由は「メールサーバの OP25B対策」によると、

インターネットに蔓延する迷惑メール(…)の対策として、大手 ISPはほぼ全てが OP25B(Outbound Port 25 Blocking)を実施するようになった。…

OP25Bとは、ISPが自社網内のユーザが撒き散らす迷惑メールを封じ込めることを目的として、自社網の動的IPアドレスのホストが網外の SMTPサーバに向けて25番ポートからメールを直送する処理を規制する技術である。 …

これに対する対処法は、

有効な解決策は、ISPが提供する中継サーバ(ポート番号は 25番あるいは 587番。ISPが特に指定したものがなくても、通常のメール送信用 SMTPサーバが使えるはず)を経由してメール送信するようにメールサーバを設定することである。

(同上より)

自分が利用している ISP の HP において、

OP25B

で検索したら、迷惑メール対策として、昨年より制限が加えられていたことがわかった。

このための新たなメールサーバのホストと、ポート番号 587 をメモ。

 

BlackJumboDog を利用する場合

SMTP サーバとして MELON を使う前は Radish を利用していた。

現在 Radish は サッポロワークス によると、

Radishの後継バージョンとして、ニューBlackJumboDog(Ver5.x) が開発されています

そこで BlackJumboDogダウンロード

BJD.exe を起動。

 

設定

SMTP サーバを起動するために、

  • メニューより、「オプション > メールサーバ > SMTP サーバ」

SMTP サーバを使用する」をチェック。

中継許可」タブにおいて、許可リスト優先に 127.0.0.1 を追加。

CropperCapture[190]

ホスト設定」タブにおいて、

  1. 対象ドメインを * とし、転送サーバは上記でメモした ISP で指定されている メールサーバ と ポート番号 を記入。
  2. SMTP 認証にチェックを入れ、ISP から渡されたメールサーバにアクセスするためのユーザ名とパスワードを入力して追加。

CropperCapture[191]

ACL」タブにおいて、127.0.0.1 からのアクセスのみを許可するように追加。

CropperCapture[192]

これによりメールを送信できるようになった。

ちなみに、上記「ホスト設定」の転送サーバに誤って空白文字を入力していたことに長いこと気づかず、なかなか使うことができなかった。 (+_+)

 

XAMPP の Mercury を利用する場合

xampp の中の Mercury には SMTP サーバの機能が含まれている。

XAMPP Control Panel を開き、Mercury の Start ボタンを押し、Admin を起動する。

CropperCapture[194]

メニューより Configuration > Protocol modules…

CropperCapture[197]

以下の 2 つを有効にする。

  • MercuryS SMTP server
  • MercuryC SMTP relaying clinent

 

SMTP server
  • メニューより、Configuration > Mercury SMTP Server

Connection control タブにおいて、 Do not permit SMTP relaying of non-local mail のチェックをはずす。

CropperCapture[195]

 

SMTP Client
  • メニューより、Configuration > SMTP Client
  1. Smart host name, Connection port/type には、上記でメモした ISP で指定されている メールサーバ と ポート番号を入力。
  2. Credentials for SMTP Authentication, if required に、ISP から渡されたメールサーバにアクセスするためのユーザ名とパスワードを入力。

CropperCapture[196]

これによりメールの送信が行えるようになった。

 

終了してない SMTP サーバのプロセスを確認

ところで、いくつか SMTP サーバを試していたら、プロセスが正常に終了してないものがあった。これにより、SMTP サーバの起動時にエラーとなることがある。

他のプログラムに80番ポートが専有されてApacheが起動できない場合の対処方法 - 床のトルストイ、ゲイとするとのこと」によると、

netstat -oan

これで、ポートを開いているプロセスの一覧が表示される。(-oはPIDの表示、-aは全ての接続を表示、-nはアドレス・ポートを数値で表示)

ここで、80番を使用しているプロセスのPIDを覚えておき、タスクマネージャでそのPIDに対応するプログラム名を調べる。

タスクマネージャのプロセスタブでPIDを出すには、「表示 > 列の選択」でPIDをチェック。PID順にソートすると見つけやすくなる。

上記の説明にある「80番」を「25番」と読み替えて対処する。

 

参考サイト

2009年7月13日月曜日

PHP でローカルにおけるメールの送信テスト - MELON

メールを送信するためのテスト用のコードを

を参考にして作成。

<?php
function sendmail($to, $subject, $body, $from){
 $body = mb_convert_encoding($body, 'iso-2022-jp', 'UTF-8');
 $subject = mb_convert_encoding($subject, 'iso-2022-jp', 'UTF-8');
 $subject = mb_encode_mimeheader($subject, 'iso-2022-jp');
 $headers[] = "From: $from";
 $headers[] = 'Content-Type: text/plain; charset=iso-2022-jp';
 $headers[] = 'Transfer-Encoding: 7bit';
 mail($to, $subject, $body, join("\n", $headers));
}
sendmail("宛先のメルアド",
   "メールテスト",
   "これはテストです。",
   "差出人のメルアド")
?>

ローカルで SMTP サーバ Radish を起動。しかし、宛先に Gmail を指定して実行したら Radish が落ちた。 (@_@;) 

何度やっても結果は同じだったので、他の SMTP サーバはないかと探すことに。hMailServer , XAMPP に含まれている Mercury は使い方がよくわからず、PHP Portable SMTP Server for WindowsAvira AntiVir が反応したので怖くて使えず。 (+_+)

 

PEAR::Mail

PHPでメールの送信(Gmail使用) - 教えて!goo によると、

もし、自分のプロバイダのSMTPサーバーを使えない理由があり、どうしてもsmtp.gmail.comをSMTPとして使いたいというのなら、すでにご回答のある通り、mail()やmb_send_mail()でなくPEAR::Mailなどを使って SSL+SMTP-AUTHで送るようする必要があります。

( より)

この方法は面倒そうなのでまた今度。。 ^^;

 

MELON

シンプルで軽そうな SMTP サーバはないかと探したら、MELON を発見。起動したら Radish のようにタスクトレイに常駐。

上記のコードを実行したら同様にエラーで送ることができなかったが、今回はエラーメッセージが表示された。

The IP you're using to send mail is not authorized to

これは、「The IP you're using to send email is not authorized... (メールの送信にご使用の IP では、Google のサーバーへのメッセージの直接送信が承認されていません)」 - Gmail ヘルプ によると、

Gmail では迷惑メールを防ぐために、送信元の IP アドレスが送信元のドメインと一致しない場合、メールを拒否します。ご使用のサーバーから Gmail にメールを送信するには、ISP から提供されている SMTP リレーを使用してください。

そこで、上記の「宛先のメルアド」を Yahoo メールにしたら、今度は送信が完了した。

そういえば、Radish の 「設定 > SMTP/POP3サーバ」 のドメイン名に適当に名前を付けていたのを思い出し、自分のネットワークのドメインにしたら、今度は Radish が落ちることはなくなった。しかし、待てど暮らせど受信せず。。

 

参考サイト