« | »

2006年12月14日

OpenPneでSMTPを使う

仕事でオープンソースのSNSであるOpenPneを検証した。
インストール自体は特に何の問題もなく簡単に済んだのだがちょっと困った事があった。
それは、招待メールだのお知らせメールだのが送信される際にローカルのメール送信コマンド(PHPのmail関数から呼ばれる)を使うという仕様。
これのおかげでメールが送信できない。
検証したサーバーではセキュリティ上の配慮からリモートだろうがローカルだろうがメール配信という配信をことごとく拒否している。
このホストからメールを送信するにはsmtpサーバーに接続して送信する必要があるのだが、OpenPNEのシステムはデフォルトでSMTP送信に対応していないようだ。
google先生に聞いても答えは無いので、しょうがなくコードを読んで該当箇所を発見。
ちゃんとメールが送信できるようになったので公開してみる。
つーても、全然大したものではないけど…


ソースというかパッケージが解凍されているディレクトリ、
OpenPNEの公式セットアップガイドで言うところの「OPENPNE_DIR」が
/usr/local/OpenPNE だとすると、
/usr/local/OpenPNE/webapp/lib/util/mail_send.php がメールを送信しているスクリプトであり、こいつを編集する。
そのmail_send.phpの60行目

return mail($address, $subject, $body, $headers, $params);

include_once('Mail.php');
$recipients = "$address" ;
$headers = "" ;
$headers['From'] = $from ;
$headers['To'] = "$address";
$headers['Subject'] = "$subject";
$mail_options = array(
'host' => 'SMTPサーバー', // SMTPサーバー名
'port' => 25, // ポート番号
'auth' => false, // SMTP認証 true false
'username' => "", // ユーザー名
'password' => "", // パスワード
'localhost' => 'サーバー名' //送信元サーバーのFQDN名 HELOに使う
);
$mail_object =& Mail::factory("SMTP",$mail_options);
$mail_object->send($recipients, $headers, $body);
#return mail($address, $subject, $body, $headers, $params); //オリジナルをコメントアウト
と書き換えればOK。
修正:2008/02/21 「include('Mail.php');」 を 「include_once('Mail.php');」に 山下様のご指摘よる

Trackback URL

Comment & Trackback

Xreaサーバーに設置して、Biglobe回線だと送信できませんでしたが、修正を入れると送信できました。
ポート番号は25番でも587でも送信できたのですが、他のプロバイダの場合でも25でよいのでしょうか?

当方のこの記事は、自分でメールサーバーとWebサーバーを運用或いは管理されている方を対象に書いたつもりですので、プロバイダのメールサーバーを利用する事は全く想定しておりませんでした。
ということで、ここからは想像の範囲のお話になります。
恐らく、プロバイダ外のサーバーからSMTP認証なしのポート25を使ったメール送信を許可しているプロバイダは殆ど無いのではないでしょうか?
プロバイダ回線を利用していないwebサーバーからの送信は何らかの認証が必要と思われますので、可能ならポート587でのSMTP認証、次にポート25でのSMTP認証、という事になろうかと思います。
いずれにせよ設定してみて送信できるかどうかを試してみるのがベストかと思います。

 はじめましてOPENPNEを設置したのですが、同様なトラブルに見舞われ、参考にさせて頂きました。
mail_send.phpの60行目を上記のように変更しましたのですが、下記のようなエラーとなってしまいます。
Parse error: parse error, unexpected T_VARIABLE in C:\Program Files\Apache Group\Apache2\htdocs\sns\webapp\lib\util\mail_send.php on line 77
考えられる情報がありましたら、ご教授よろしくお願い致します。

エラーメッセージを読みました限りでは
C:\Program Files\Apache Group\Apache2htdocs\sns\webapp\lib\util\mail_send.php
の77行目に構文エラーがあるようです。
間違いやすい所と言えば、行末のセミコロン の付け忘れ、「 } 」や「 ) 」の閉じ忘れと言ったところでしょうか。

自分も社内nサーバーでテストしているため、この対応をさせていただいたのですが、mail_send.phpの記述を変えたところ、画面が真っ白になってログインもできなくなってしまいました。

ただいま確認いたしましたところ、「OpenPNE」のバージョンも上がっているようですので、コードの書き換えの箇所が「60行目」ではなくなっているかもしれません。
時間があれば対応してみたいと思いますが、今の段階では、「当方の環境ではではこのコードの追加で動作した。」
と言うところをご理解いただけると幸いです。

スイマセン。昨日コメントしたものです。
できました!!!
' と ); が抜けていたようです。
ありがとうございます!!
おかげで助かりました!(^^)!

お役に立てたようで幸いです。!(^^)!

以前、質問をさせてもらったものです。
私の方も ); が抜けていたようです。
ありがとうございます。
お礼が遅れまして、申し訳ありません。

はじめまして。
私も一番目のコメントの方と一緒で、XREAをbiglobeの環境で設置したところ、メールがまったく配信されない状態です。
教えていただいた方法に修正したのですが、
/OPENPNE_DIR/webapp/lib/util/mail_send.php on line 63
のエラーが出てしまいます。
OpenPNE-2.8RC2でやっているのですが、63行目は、
$headers = "" ;
に当たります。コピペで修正したので、間違いはないと思うのですが・・・
何が悪いのか教えていただけますでしょうか。
よろしくお願いいたします。

はじめまして。Geoともうします。
こちらのスクリプトを利用させていただきたいと思っていたのですが、SSLを利用しなくてはならず、その部分で躓いているようです。
SSL利用の場合、どのようにスクリプトを修正すればよいでしょうか。ご教授いただけませんでしょうか。よろしくお願いします。

お返事大変遅くなりまして申し訳ございません。
>ちびっこ様
むぅ、やはり当方では分かりかねます。
} ) ' "などの閉じ忘れや行末に ; をつけ忘れている可能性が一番大きいかと思いますので、コピペでは無く、手動で入力されてみては如何でしょうか?
>Geo様
SSLと言うのは「SMTP over SSL」の事でしょうか?
当方では環境が無いのでテストできませんが、PHP 5.1.4以降をご使用でしたら、「Zend Framework」をご使用なさってみては如何でしょうか?
http://www.m-takagi.org/docs/php/zend/zend.mail.smtp-secure.html
を見る限り、比較的簡単に実装できそうな気がしますが…

はじめまして
mail_send.phpの60行目を変更したらメール送信できましたが、一度に複数人へ送信すると以下のエラー発生
OpenPNE\lib\include\Mail.php on line 33
対応策 ご存知でしたら、ご教授ください
 

include('Mail.php');

include_once('Mail.php');
と直して使っています。
そうしないと、コメントのメール送信ではうまくいくのですが、コミュニティーのメール送信でRedeclareエラーが出ました。
lib / include / Net/SMTP.php もインストールされていなかったので、ダウンロードしてインストールしました。

早速エントリ内の 「include('Mail.php');」 を 「include_once('Mail.php');」に更新しておきました。
1スレッド内で何度かメール送信する場合に、Mail.phpをincludeして同じクラスを何度も読みもうとするので、include_onceで最初の一度だけにしておけば安心、と言う事でしょうか。
いずれにせよご指摘ありがとうございました。m(__)m

参考になりました。
ただ、次に
PHP Fatal error: Class 'Net_SMTP' not found in /***/lib/include/Mail/smtp.php on line 210
となりました。
これはファイルがないのでしょうか。

メッセージはNet_SMTPのクラスが見つからないと言うことですが、
Net_SMTPはPEARでインストールされるクラスですので、デフォルトでインストールされていないのなら、PEARで、Net_SMTPをインストールする必要がありそうです。
検索してみたところ、同じ現象で悩んでいる方がいらっしゃるようで、以下のように解決されているようです。一度御参照ください。
http://oshiete1.goo.ne.jp/qa2847251.html

自宅サーバーでADSLの上りも使ってインターネットを楽しんでおります。
NetCommonsの中にOpenPNEを入れるという話を聞き挑戦してみました。
友達招待メールが発信できなくて困っていたところ、ここのページに出会い解決しました。ありがとうございました。

どういたしまして、お役に立てて幸いであります。
怖い事もありますが、やっぱり自宅サーバーって楽しいですよね!
他にも自宅サーバー系のコンテンツもありますので、またいらっしゃって下さい。
ではでは

ステップサーバーでOpenPNE

過去にとんでもないトラブルもあったステップサーバーですが、月250円で色々遊ばせていただいています。
「WordPress」に続き今回はオープンソースの...

私もxrea上でメール送信が出来無く困っていました。参考させて頂き、招待メールの受信確認が出来ました。
ありがとうございます。

古い内容ですが、まだまだお役に立てているようで幸いです。

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>