勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPMailerを使ってメールをSMTP送信する方法(Composer無し)

   2024/01/16  PHP

PHPでメールをSMTP送信したかった。また、レンタルサーバだったのでComposerをどう使うのか分からない為、最低限のファイルのみアップロードしPHPMailerを使いたかった。尚、過去にPHPMailerを使うことはあったが、何故か送信できなくなっていたので新たに使い方をメモ。

 

GmailのSMTPサーバを使いたい場合(2024/01/12追記)

GmailのSMTPサーバを使いたい場合はセキュリティ設定の問題でこの記事の方法では送信できない。そのため追記した「PHPMailerでGmailのSMTPサーバを経由してメールを送信する方法」を参照。

 

PHPMailerの準備

以下よりダウンロードし展開する。

https://github.com/PHPMailer/PHPMailer

srcディレクトリ内の「PHPMailer.php」「Exception.php」「SMTP.php」をアップロードする。もしくはsrcディレクトリごとアップロードでも良い。

 

ソースコード

<?php
ini_set( 'display_errors', 1 );

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

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

// 文字エンコードを指定
mb_language('uni');
mb_internal_encoding('UTF-8');

// インスタンスを生成(true指定で例外を有効化)
$mail = new PHPMailer(true);

try {
    //Gmail 認証情報
    $host = 'smtp.gmail.com';
    $username = 'xxxxxxxxxxxx';
    $password = 'xxxxxxxxxxxx';

    //差出人
    $from = $username;
    $fromname = $username;

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

    //件名・本文
    $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;
}

上記はGoogleのSMTP経由で送信する形になるが、他のSMTPサーバを経由させたい場合は「host」「username」「password」辺りを適宜変更する。

 

デバッグ情報を表示しない場合

$mail->SMTPDebug = 0; //デバッグ用

 

CCもしくはBCCで送信先を追加したい場合

$mail->setFrom($from, $fromname);

//CC追加
$mail->addCC('xxxxxxxxxx');

//BCC追加
$mail->addBCC('xxxxxxxxxx');

 

Class内でPHPMailerを使いたい場合

前述のソースコードのままClass内で使おうとするとuse部分が云々とエラーになる。以下で対応する。

public static function mailSend()
{

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

    mb_language('uni');
    mb_internal_encoding('UTF-8');

    //ここの記述に注意
    $mail = new PHPMailer\PHPMailer\PHPMailer();

    //以降は通常の使い方と同様

}

 

参考サイト

https://into-the-program.com/phpmailer-gmail/

 - PHP

  関連記事

PHPでHTMLメールを送信する方法(PHPMailerあり無しの2パターン)

PHPでHTMLメールを送信したい。また、メール関連の機能を実装する際は環境によ ...

PHPでファイルを添付してメールを送信する方法(PHPMailer)

PHPでファイルを添付の上、メールを送信したかった。方法を探したところphpma ...

【2024年版】PHPMailerでGmailのSMTPサーバを経由してメールを送信する方法

だいぶ前に同じようなことをメモしたが、そちらの方法だと送信できずエラー内容を見た ...

PHPMailerでメールを送信する際にTLS / SSL暗号化させる方法

PHPMailerでメールを送信したところGmailで確認すると赤い鍵のようなア ...

メールサーバーを構築せずにGmailのSMPTを使ってPHPでメール送信

メールサーバーが立てられなかったり、無料サーバーのため使えなかったりといった場合 ...