[php]PHPMailer導入(非Composer)

やる。

環境

PHP 7.1.18(XAMPP)

ライブラリ

PHPMailer 6.1.7(現状最新版)

ダウンロード

GitHubでDLしてくる。
「Code」をクリックして「Download ZIP」をクリックすれば「PHPMailer-master.zip」がダウンロードされる。これを使う。

展開・配置

展開

「PHPMailer-master.zip」を展開(解凍)したら「PHPMailer-master」フォルダができるのでフォルダ名を「PHPMailer」にリネーム。

配置

「form」ってフォルダ(ディレクトリ)配下でやっていくことにする。
こっからの作成イメージはこんな感じ。

form
├─ PHPMAiler
│ └─解凍した色々
├─ contact
│ └─フォームデータ
├─ contact_2
│ └─フォームデータ
├─ contact_3
│ └─フォームデータ

フォームのバリエーションが増えたときに面倒がなさそうな配置をイメージした感じのアレで。

Composerを使わない姿勢

まず使ったことがないというのがひとつ。
composerありきで話を始めることに慣れるのがなんか嫌なのがひとつ。
使う前にどういうもんかちゃんと調べときたいのがひとつ。
調べたはいいけど分かりを得た人向けの記事ばっかで、なんとなく想像はつくけど触るの怖いって気持ちが拭えないのがひとつ。

まあ使うとしたら一番最初の整地段階から導入しとくのがいいんだろう、ということはわかった。

PHPMailerを動かす

本題。

  • 配置したPHPMailerは触らない
  • 自作するPHPの送信処理をするタイミングでPHPMailerを読み込む
  • PHPMailerの機能を経由してメール送信する

自作ページ内での設定やら入力内容で諸々が完了する、ってことを認識しておく。

次に以下の記事を読む。
PHPMailerによるメール送信 – Qiita

次に以下のコードを読む。

<?php
// HPMailer のクラスをグローバル名前空間(global namespace)にインポート
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// HPMailer のインポート
require '../PHPMailer/src/PHPMailer.php';
require '../PHPMailer/src/SMTP.php';
require '../PHPMailer/src/Exception.php';
 
//エラーメッセージ用日本語言語ファイルを読み込む場合
require '../PHPMailer/language/phpmailer.lang-ja.php';
 
//言語、内部エンコーディングを指定
mb_language("japanese");
mb_internal_encoding("UTF-8");
 
// インスタンスを生成(引数に true を指定して例外 Exception を有効に)
$mail = new PHPMailer(true);
 
//日本語用設定
$mail->CharSet = "iso-2022-jp";
$mail->Encoding = "7bit";
 
//エラーメッセージ用言語ファイルを使用する場合に指定
$mail->setLanguage('ja', '../PHPMailer/language/');
 
try {
  //サーバの設定
  $mail->SMTPDebug = SMTP::DEBUG_SERVER;  // デバグの出力を有効に(テスト環境での検証用)
  $mail->isSMTP();   // SMTP を使用
  $mail->Host       = 'mail.example.com';  // SMTP サーバーを指定
  $mail->SMTPAuth   = true;   // SMTP authentication を有効に
  $mail->Username   = 'info@example.com';  // SMTP ユーザ名
  $mail->Password   = 'password';  // SMTP パスワード
  $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;  // 暗号化を有効に
  $mail->Port       = 465;  // TCP ポートを指定
 
  //受信者設定 
  //※名前などに日本語を使う場合は文字エンコーディングを変換
  //差出人アドレス, 差出人名
  $mail->setFrom('sender@example.com', mb_encode_mimeheader('差出人名'));  
  //受信者アドレス, 受信者名(受信者名はオプション)
  $mail->addAddress('someone@xxxx.com', mb_encode_mimeheader("受信者名")); 
  //追加の受信者(受信者名は省略可能なのでここでは省略)
  $mail->addAddress('someone@gmail.com'); 
  //返信用アドレス(差出人以外に別途指定する場合)
  $mail->addReplyTo('info@example.com', mb_encode_mimeheader("お問い合わせ")); 
  //Cc 受信者の指定
  $mail->addCC('foo@example.com'); 
  
  //コンテンツ設定
  $mail->isHTML(true);   // HTML形式を指定
  //メール表題(文字エンコーディングを変換)
  $mail->Subject = mb_encode_mimeheader('日本語メールタイトル'); 
  //HTML形式の本文(文字エンコーディングを変換)
  $mail->Body  = mb_convert_encoding('メッセージ <b>BOLD</b>',"JIS","UTF-8");  
  //テキスト形式の本文(文字エンコーディングを変換)
  $mail->AltBody = mb_convert_encoding('テキストメッセージ',"JIS","UTF-8"); 
 
  $mail->send();  //送信
  echo 'Message has been sent';
} catch (Exception $e) {
  //エラー(例外:Exception)が発生した場合
  echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>

各所にメールサーバーとかメールアドレスを打ちこんだら動くよ。
先述のディレクトリ構造を前提に一部変更してある。

リンク先のものと見比べたらComposerのautoload.phpって便利で魅力的だなって分かりますね。ファイル数が少なけりゃ手打ちで済むけどやっぱめんどくさいねっていう絶妙な温度のだるさを解消してくれたりするってやつですね。

まあとりあえず、PHPMailerはそれ単体で独立してて、Composerは各々の作ったフォームとの架け橋になってくれるんだっていうのを知れます。

コメント

タイトルとURLをコピーしました