PHPMailerでHTMLメールを送信する

先のブログでは、PHP言語のmail関数を用いてHTMLメール(デコメール)を送信する技術を解説いたしました。そして、メールを送信する技術としてMIME(マイム)という国際規格を知れば、HTMLメールどころか画像等のバイナリーデータの送信も可能であることもお伝えいたしました。

今回は、同じくPHP言語でHTMLメール(デコメール)を送信する技術のご紹介となりますが、今回はmail関数を使うのではなく、PHPMailerというメール送信用拡張ライブラリーを使う方法のご紹介となります。

PHP言語には、あらかじめメール送信用の関数が用意されています。mail()関数や、その拡張版のmb_send_mail()です。

しかし、これらあらかじめ用意されているメール送信用関数は機能的に低く、単なるプレーンテキスト形式のメールを送るだけならまだしも、HTML形式やバイナリーデータを送信しようとするならば、先のブログで解説したMIME規格に正確に準拠したコーディングが求められ、慎重さと手間が求められるものとなります。

PHP言語だけでなくその他プログラミング言語にはあらかじめ標準ライブラリー(DateTimeクラス等)というものが備わっており、様々な関数やクラスライブラリーが提供されてはおりますが、それ以外にもたくさんの開発者が拡張ライブラリーを提供しており、そのうちの一つにメール送信用の拡張ライブラリーとしてPHPMailerというライブラリーがあるわけです。

このPHPMailerを使う事のメリットですが、

  • 記述が簡潔になる
  • MIME規格を深く考えなくて済む
  • SMTP認証が可能

といったメリットがあります。

1.PHPMailerをダウンロードする

PHPMailerはこちらでダウンロードできます。

https://github.com/PHPMailer/PHPMailer

このPHPMailerのGitHubページからダウンロードできます。緑色のボタン「CODE」を押す→「Download ZIP」をクリック。これでダウンロードが開始されます。

PHPMailer-masterというファイル名のZIPファイルがダウンロードされます。

このZIPファイルを右クリック、メニューの中から「すべて展開」をクリックして解凍します。

解凍すると「PHPMailer-master」というフォルダができます。この中に同じフォルダ名の「PHPMailer-master」がありますのでこのフォルダーを取出し、メールプログラムと同じ階層に配置します。

例えば、メールプログラムがmail.phpの場合、

2.PHPMailerライブラリーを使ったサンプル

前回のブログの最後のサンプルをPHPMailerを使った場合に書き替えます。

<?php

//PHP設定
date_default_timezone_set('Asia/Tokyo');
mb_language("ja");
mb_internal_encoding("UTF-8");


//#################### PHPMailer設定 ###################
$mail_from = 'aaa@bbbbb.net';
$mail_to = 'ccc@ddddd.com';
$from_name = '送信者名';
$subject = 'PHPMailerでHTMLメールを送ります';
//#####################################################


//PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require_once("PHPMailer-master/src/Exception.php");
require_once("PHPMailer-master/src/PHPMailer.php");
require_once("PHPMailer-master/src/SMTP.php");


//PHPMailerのインスタンス生成
$decoMailer = new PHPMailer(true);


//必要に応じてエンコード
$from_name = mb_encode_mimeheader($from_name,'JIS','UTF-8');
$subject = mb_encode_mimeheader($subject,'JIS','UTF-8');


//メールボディデータ
$tmp =mb_convert_encoding('<p style="color:red; font-weight:bold;">PHPMailerを使ってHTMLメールを送っています</p>','JIS','UTF-8');
$body_html =$tmp;


//PHPMailerを稼働させる
try {
$decoMailer->CharSet = 'iso-2022-jp';
$decoMailer->Encoding = '7bit';

$decoMailer->setFrom($mail_from, $from_name);
$decoMailer->addAddress($mail_to);

$decoMailer->isHTML(true);
$decoMailer->Subject = $subject;
$decoMailer->Body = $body_html;

$decoMailer->AltBody = mb_convert_encoding('HTML非対応のメーラーに対する代替表示です(text/plain)','JIS','UTF-8');


//送信!
$decoMailer->send();?>

<script>
alert('送信が完了しました');
location.href='<?php echo $permalink; ?>';
</script>
<?php
}
catch (Exception $e) {?>
<script>
alert('送信ができませんでした:'.$decoMailer->ErrorInfo);
location.href='<?php echo $permalink; ?>';
</script>
<?php
}

“PHPMailerでHTMLメールを送信する” への2件の返信

コメントを残す

メールアドレスが公開されることはありません。