2009年1月16日金曜日

PHPでメールを送信するための設定方法とメモ

mb_send_mail()関数を使ったメールの送信にチャレンジだい!と設定をいじるも、案の定試行錯誤、かつ解決できているのかわからないので次回以降のためにメモします。

設定とは言っても、"php.ini"の700行目あたりにあるこの部分を…
[mail function]
;For Win32 only.
SMTP = localhost
smtp_port = 25

;For Win32 only.
;sendmail_from = me@example.com

以下のように修正するだけです。
[mail function]
;For Win32 only.
SMTP = 使用するSMTPサーバのホスト名
smtp_port = 25

;For Win32 only.
sendmail_from = 送信元(自分)のメールアドレス

あとは、apacheの再起動をすれば完了のはずです。わくわくしながら試してみると、…そう、いつもの如くうまくいきません。画面には以下のようなエラー。
Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP"…(以下省略).

「"localhost"というメールサーバーの接続に失敗しましたけど?」と高圧的にきたわけです。このエラーを見て思うのは、修正したはずのSMTPサーバー名が何故か"localhost"のままになっているということ。ここでphp.iniは複数存在することを思い出し、xampp/apache/bin/フォルダの中の"php.ini"を修正したところ解決。


これで終了かなと処理を実行すると、…待ってました!次はこんなエラーの登場です。
Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 550 Relaying denied. (LOLIPOP-Fsecure) …(以下略)

今回SMTPサーバにロリポップのメールサーバーを指定しているのですが、どうやらここで問題が起きている様子。調べてみると「POP before SMTPの認証を行っていない」点が原因のようです。…わからん。メールの受信(送受信)を1度した上で、その後数分以内に送信すれば良い、みたいなことかと思い試すも、結局同じエラー。

その後試行錯誤を繰り返すも解決できず、最後に1度ファイルをweb上にアップしてみることに。…するとメール送信できました。。どうやらweb上にアップすればうまく処理してくれるようです。ですが、これで良いのでしょうか…。個人的にはローカル内からメール送信したいのですが。


ひとまずメールは送れたのでここまでにしておきますが、多分ローカル内からでも送信できますよね?じゃないと1回1回アップして動作確認なんか面倒だし。偶然拝見した"QUALL"さんもローカルから送信してるみたいだし。これはまたその内確認したいと思います。

最後になりましたが、コードは以下。
<?php
//*********************************************************
//
// メール送信チェック
//
//*********************************************************

$mailto = "○○@○○.jp";
$subject = "送信テスト";
$content = "やったね送れたね。";
$mailfrom = "From:××@××.com";

mb_language("ja");
mb_internal_encoding("UTF-8");

if(mb_send_mail($mailto,$subject,$content,$mailfrom)){
echo "送信しました";
}else{
echo "送信できませんでした";
}

?>

《関連記事》

0 件のコメント: