こんにちは、Ryohei(@ityryohei)です!

PHPMailerを使って、フォーム等からGmailのSMTP経由でメールを送信する方法のご紹介です。

前回、「Office365のSMTP経由でメールを送信する」ではOffice365のSMTP経由でメールを送信する方法をご紹介しましたが、今回はGmailのSMTP経由で送信する方法をご紹介したいと思います。

本記事の内容

  • PHPMailerのダウンロード
  • PHPMailerの設置方法と読み込み方法
  • GmailのSMTP経由でメールを送信する際の設定
  • SMTP経由でメールが送信できない場合

では解説していきます。

PHPMailerをダウンロードする

PHPMailerのライブラリは下記のURLからダウンロードすることができます。

PHPMailer

リンク先にある緑色の「Clone or download」を選択して「Download ZIP」を選択しましょう。

PHPMailerを設置して読み込む

PHPMailerはダウンロード方法によって読み込み方法が変わってきます。

Web

こちらはWebからダウンロードしたライブラリファイルを使用する方法です。ダウンロードした圧縮ファイルを解凍し、利用するサーバーにFTP等で設置して下記の方法で読み込みます。

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';

Composer

Composerを使用する場合の読み込み方法です。Composerでインストール、読み込む際はこちらの方法で記述します。

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

//Load Composer's autoloader
require 'vendor/autoload.php';

GmailのSMTP経由でメールを送信する設定

PHPMailerを利用するファイルに設定を記述します。下記はWebからダウンロードしたライブラリを利用する方法になります。Composerを使われる場合は読み込み方法を変更しましょう。

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';

$mail = new PHPMailer(true);

try {
  //Gmail 認証情報
  $host = 'smtp.gmail.com';
  $username = 'アカウント'; // example@gmail.com
  $password = 'パスワード';

  //差出人
  $from = 'メールアドレス';
  $fromname = '差出人名';

  //宛先
  $to = '宛先';
  $toname = '宛名';

  //件名・本文
  $subject = '件名';
  $body = '本文';

  //メール設定
  $mail->SMTPDebug = 2; //デバッグ用
  $mail->isSMTP();
  $mail->SMTPAuth = true;
  $mail->Host = $host;
  $mail->Username = $username;
  $mail->Password = $password;
  $mail->SMTPSecure = 'tls';
  $mail->Port = 587;
  $mail->CharSet = "utf-8";
  $mail->Encoding = "base64";
  $mail->setFrom($from, $fromname);
  $mail->addAddress($to, $toname);
  $mail->Subject = $subject;
  $mail->Body    = $body;

  //メール送信
  $mail->send();
  echo '成功';

} catch (Exception $e) {
  echo '失敗: ', $mail->ErrorInfo;
}

上記で無事送信されるかと思います。もし認証エラーが発生した場合は、下記の対応すると送信できるようになるかもしれません。

SMTP経由でメールが送信できない場合

アカウントもパスワードも正しく入力しているのに認証に失敗する場合は、下記でご紹介する対応を実施することでうまくいくかもしれません。

※検証はさくらインターネットのレンタルサーバで行っています。すべてのサーバでエラーが解消される保証はありません。

1安全性の低いアプリの許可を有効にする

Googleのアカウントを作成した後、デフォルトの状態では安全性の低いアプリの許可は無効になっています。セキュリティのレベルは下がりますが、こちらを有効にすることで解消される場合があります。設定はアカウントのトップページから「ログインとセキュリティ」を選択します。

ページをスクロールしていくと安全性の低いアプリの許可という項目がありますので、クリックして無効から有効に切り替えます。

有効にして設定が反映されるまでしばらく時間が掛かります。後日再度テストを実施することで、認証エラーが解消される可能性があります。

2セキュリティから端末のアクティビティーを許可する

Googleのアカウント認証をしようすると、アカウントページの上部に下記のような赤い通知が表示される場合があります。

不審なアクセスとして認識され、ログインをブロックされている状態ですね。もしサーバーのIPアドレスがブロックされている場合は、端末のアクセスを許可してあげることで認証が成功する場合があります。

Googleのアカウントトップページからログインとセキュリティを選択します。

ページを下にスクロールしていき、端末のアクティビティとセキュリティイベントイベントの表示を選択します

最新のセキュリティイベントが開きますので、端末名のリンクをクリックします。下記の場合は「不明な端末」となっている箇所になります。

ブロックされている端末の情報が表示されますので、IPアドレスを確認し、サーバのIPアドレスであれば「はい、心当たりがあります」を選択します。

上記を実施することで、認証エラーが解消される可能性があります。

最後に

以上、PHPMailerでGmailのSMTP経由でメールを送信する方法のご紹介でした!

PHPMailerは高機能で簡単に設定できるライブラリです。Gmailの認証を数行の記述を変更するだけで設定することができるため、Gmailを利用してフォームを構築される場合はぜひ活用していただければと思います。

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。