PHP - PHPMailer - PHPMailer6

 クラウディア
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」の記述はなくしましたが、モジュールとしてインストールしておかないと、そもそも他の日本語がダメになっちゃいますので、ご注意ください。
earthcar(アースカー)
メンズミレット