PHPMailerでメール送信

メール送信ライブラリ PHPMailer

PHPのメール送信ライブラリ、PHPMailerの基本的な使用方法をメモします。

環境: phpmailer 6.2.0, Composer 1.9.1, PHP 7.4.10

PHPには標準でmail関数やmb_send_mail関数といったメール送信機能がありますが、
PHPMailerを利用することでSMTPサーバを利用した送信やメールへ添付ファイルの追加などを行う事が出来ます。

SMTPサーバとは

メールを送信する役割をもつサーバのことで、
SMTP(Simple Mail Transfer Protocol)とはメール送信する際に用いられるプロトコル(通信規格)を表している。
送信サーバのSMTPサーバからメール受信サーバ(POP/IMAP)へメールを届けます。

SMTPサーバ経由のメリット

外部のSMTPサーバを経由する事で、送信したメールが迷惑メールやスパムとして扱われたりされることを回避することが出来ます。

PHPMailerのセットアップ

プロジェクトへPHPMailerライブラリをインストールします。

githubにあるPHPMailerの公式リポジトリから直接ソースをダウンロードすることも出来ますが、
今回はComposerを使用したセットアップ方法を紹介します。

Composerの詳細については下記記事などを参考にしてください。

(Mac)Composerを使用したLaravelのインストールとプロジェクト作成

composer.jsonのあるプロジェクトのパスで下記インストールコマンドを実行

composer require phpmailer/phpmailer

インストールが完了するとプロジェクト内にvendor/phpmailerが作成されます。

composer.json

{
    "name": "user/mailer",
    "type": "project",
    "require": {
        "phpmailer/phpmailer": "^6.2"
    }
}

(SAMPLE)自動返信メール付きお問い合わせフォーム

PHPMailerを利用してお問い合わせフォーム投稿後の自動返信メール機能を作成します。

入力フォーム

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>PHPMailer Test</title>
<meta name="description" content="PHPMailer Test">  
</head>
<body>
<form action="done.php" method="POST">
<h1>PHPMailer Test</h1>
<p>お名前: <input type="text" name="name"></p>
<p>お問い合わせ内容:</p>
<textarea name="contact" id="" cols="30" rows="10"></textarea>
<p>メールアドレス: <input type="text" name="mail"></p>
<p><button type="submit">送信</button></p>
</form>
</body>
</html>

送信先 done.php

<?php
require_once __DIR__ . '/vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;

$phpmailer = new PHPMailer();

$body = $_POST['name']." 様\n";
$body.="下記内容でお問い合わせを受け付けました。\n\n";
$body.="【お問い合わせ内容】\n".$_POST['contact'];

$gmail_smtp = true;

if ($gmail_smtp === true)
{
    $phpmailer->isSMTP();
    $phpmailer->SMTPAuth   = true;
    $phpmailer->Host       = 'smtp.gmail.com';
    $phpmailer->Username   = 'xxxxxxx@gmail.com';
    $phpmailer->Password   = 'xxxxxxx'; //生成されたアプリ パスワード
    $phpmailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $phpmailer->Port       = 587;
}

$phpmailer->CharSet = 'utf-8'; //日本語設定

$phpmailer->Sender = 'xxxx@example.co.jp'; //Return-Pathの設定

$phpmailer->addAddress($_POST['mail']); //to

$phpmailer->addCc('yyyy@example.co.jp'); //cc

$phpmailer->addBcc('zzzz@example.co.jp'); //bcc

$phpmailer->From = 'xxxx@example.co.jp'; //差出人メールアドレス

$phpmailer->FromName = 'PHPMailer Test'; //送信元表記名

$phpmailer->Subject = 'お問合わせを受け付けました。'; // 件名

$phpmailer->Body = $body; //本文

if($phpmailer->send()) //送信実行
{
    echo 'success';
}
else
{
    echo 'fail';
}

※PHPMailerクラスをnewし、メール送信に必要な宛先、本文内容などの各情報をプロパティとして設定しています。

ccなど設定不要な場合は記述しなければOKです。

最終的にsend関数を呼び出すことでメール送信が実行されます。
今回の例ではフォームから入力した内容が自動返信メールの本文内に入ります。

※クラスのオートロードを利用してvendor/phpmailer/phpmailer/src/PHPMailer.phpを事前に読み込んでいる

GmailのSMTPサーバを経由する

今回の例では送信の際に経由するSMTPサーバとしてGoogleのサービス、Gmail(smtp.gmail.com)を利用しています。

GmailのSMTPサーバー(smtp.gmail.com)を経由して送信したい場合、
利用しているGoogleアカウントにログインし下記の設定を行っておく必要があります。

Gmailアカウントの設定
  • 2段階認証の設定を行う
  • アプリパスワードを生成する

(done.php 19、20行目)
$phpmailer->Username
$phpmailer->Password

Usernameはアカウントのgmailアドレス、Passwordには「生成されたアプリ パスワード」を設定します。

(!)SMTP経由でなくてもメール送信できる

PHPMailerはSMTP認証を行わないメール送信も、もちろん可能です。

(12行目)
$gmail_smtp = false; //SMTPのための設定をしなければOK.

※SMTPを使用しない場合、ローカル開発環境ではメール送信が行えませんのでネットワークに繋がっている環境で確認します。


(参考)
https://packagist.org/packages/phpmailer/phpmailer
smtp.gmail.comを使ってメール送信するための設定方法
「SMTP」って何?メールソフトを設定してGmailをもっと便利に使う方法

Follow me!