- 1. 概要
- 2. インストール
- 3. composer 使用
- 4. composer 未使用
- 5. 件名文字化け
1. 概要
さて、前の方のページで述べているのは、「PHP 7.4」までで使用していた「PHPMailer 5.2」以前の話。
「PHP 8.0」を使うようにしたら、新たにいろいろと問題が発生して、えらいことになったのです。
まず、「FreeBSD」の場合、今までの「ports」「pkg」では、うまくいかなくなったのです。
2. インストール
それまでは、「ports」で
/usr/ports/mail/phpmailer
をインストールしていました。
「PHP 8.0」でもこれを「make」してインストールしなおしでいけるかと思いきや。
make
make install
で、なんのメッセージも出てきていないなぁと思ったら、なにもインストールされていないのでした。
あれこれやったあげく
/usr/ports/mail/phpmailer6
を
make
make install
しなければならんということが分かりました。
オプションは「NLS」(Native Language Support)のみなので、必須でチェック(デフォルト)です。
「pkg」ならば
pkg install -y phpmailer6
ですな。
使い方も異なります。
3. composer 使用
プロジェクトを「composer」を使用して作成している場合は
composer require phpmailer/phpmailer
でインストールすることになります。
デリミタ文字は、「/」(スラッシュ)でなく「\」(バックスラッシュ、使用しているフォントによっては「¥」で表示)なのでご注意ください。
文字を間違うと、別の意味でエラーになります。
その上で、使用時に
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer();
てな感じで使うことになって、あとは、ほぼ今までと同じ使い方ができるはずです。
4. composer 未使用
「composer」を使用していない、べた書きのサイトの場合、「vender/autoload.php」が機能してくれないので・・・。
ちょっと苦労しました。
結論から申し上げますと
require_once("PHPMailer.php");
require_once("Exception.php");
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
で使えるようになります。
「Exception」の行は、場合によっては省いても構いません。
5. 件名文字化け
「PHPMailer 5.2」のときは、ざっとこんな感じでメール送信して、なんの問題もなかったのですが・・・。
(エラー処理等省略しているので、ご注意ください)
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$mail = new PHPMailer(true);
$mail->CharSet = "UTF-8";
$mail->Encoding = "base64";
$mail->AddAddress(送信先メールアドレス);
$mail->From = 送信者メールアドレス;
$mail->FromName = 送信者名;
$mail->Subject = mb_encode_mimeheader(mb_convert_encoding(“件名”, "ISO-2022-JP", "UTF-8"));
$mail->Body = メール本文;
$mail->Send();
「PHPMailer6」にしてから、件名が文字化けするようになりました。
受信側でヘッダのテキストを読むと、うまくいっていたときは
Subject: =?ISO-2022-JP?B?GyRCJUYlOSVIJWEhPCVrGyhC?=
今は、
Subject: =?us-ascii?Q?=3D=3FISO-2022-JP=3FB=3FGyRCJFkkPyRHPXEkJCQ/JGk?=
=?us-ascii?Q?wYyRDJEYkPxsoQg=3D=3D=3F=3D?=
てな感じになっています。
あれこれ試行錯誤したあげく
$mail = new PHPMailer(true);
$mail->CharSet = "UTF-8";
$mail->Encoding = "base64";
$mail->AddAddress(送信先メールアドレス);
$mail->From = 送信者メールアドレス;
$mail->FromName = 送信者名;
$mail->Subject = 件名;
$mail->Body = メール本文;
$mail->Send();
と、「mbstring」の記述をなくすと、受信したときのメールヘッダは
Subject: =?UTF-8?B?44OG44K544OI44Oh44O844Or?=
となって、少なくとも「Thunderbird 78.9.0」では読めました。
イマドキ、「UTF-8」に対応していないメールクライアントもないと思いますので、だいじょうぶかな・・・。
ちなみに、「mbstring」の記述はなくしましたが、モジュールとしてインストールしておかないと、そもそも他の日本語がダメになっちゃいますので、ご注意ください。
|