招待メールが送信できたのでメモ。
OpenPNE 2.14 では、メールの送信は、/OpenPNE-2.14.5/webapp/lib/util/mail_send.php の 62行目あたりで mail 関数を使って送っています。
PHPでは、メールの送信がいくつかあります。
http://www.komonet.ne.jp/~php/chap15.htm
で、招待メールが送れないパターンとして、
- 相手が拒否している。
- sendmail(かな?)、が from のドメインをチェックして送れない。
- 今回のように、mail関数のほうの設定がうまくいっていない。
場合があります。
1の相手が拒否している(と思われる場合は)、拒否解除をすると同時に、
config.php にある、
- MAIL_ENVFROM で相手の受け取れるドメインにする。
します。
2のsendmail,qmailが、ドメインのチェックをしている場合は、
- MAIL_SET_ENVFROM を false にして、-f スイッチで設定しない。
- あるいは、MAIL_ENVFROM のドメインを合わせる。
形になり、
3のように、そもそもmail関数だと駄目な場合は、
- MAIL_SET_ENVFROM を false にした上で、
- mb_send_mail関数に切り替える
ようにします。
# MAIL_ENVFROM、ADMIN_EMAIL の設定を使いたい場合は、両方の mail 関数を切り替えればいいんだけど、mb_send_mail関数の追加パラメータが mail関数互換のなのか不明なので。
修正箇所はは↓です
mb_send_mail 関数を使う場合は、Subject が自動でエンコードされるので、
1 2 3 4 | // subject (改行コードを含んではならない) $subject = mb_convert_encoding( $subject , "JIS" ); $subject = str_replace ( array ( $cr , $lf ), "" , $subject ); // $subject = '=?ISO-2022-JP?B?'.base64_encode($subject).'?='; // ★コメントアウト |
mail関数から mb_send_mail関数へ切り替え
1 2 3 4 5 6 7 8 9 10 11 12 | if (MAIL_SET_ENVFROM) { if (MAIL_ENVFROM) { $f = MAIL_ENVFROM; } else { $f = ADMIN_EMAIL; } $params = '-f' . escapeshellcmd ( $f ); return mail( $address , $subject , $body , $headers , $params ); } else { // return mail($address, $subject, $body, $headers); return mb_send_mail( $address , $subject , $body , $headers ); // ★切り替え } |
ひとまず、bluehost 上に OpenPNE 2 を導入して、招待メールが送れるところまでOK。