●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行目
を
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');」に 山下様のご指摘よる。








