OpenPNE 2.14 で招待メールが送信できない場合

招待メールが送信できたのでメモ。

OpenPNE 2.14 では、メールの送信は、/OpenPNE-2.14.5/webapp/lib/util/mail_send.php の 62行目あたりで mail 関数を使って送っています。

PHPでは、メールの送信がいくつかあります。

http://www.komonet.ne.jp/~php/chap15.htm

で、招待メールが送れないパターンとして、

  1. 相手が拒否している。
  2. sendmail(かな?)、が from のドメインをチェックして送れない。
  3. 今回のように、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 が自動でエンコードされるので、

    // 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関数へ切り替え
    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。

カテゴリー: 開発 パーマリンク