勉強したことのメモ

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

  関連記事

SendGridを使ってメールサーバを構築せずにPHPからメールを送信する方法

メールサーバを構築せずに独自ドメインのメールアドレスにてメール送信を行いたい。過 ...

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

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

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

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

PHPでメール送信時に返信先(Reply-To)を指定する方法

PHPにてメールを送信し、そのメールに対して返信しようとすると通常は送信元のメー ...

Mailtrap & PHPMailerでメールサーバ無しの環境でもメール送信テストを行う方法

開発環境等メールサーバが無い環境でメール送信テストを行う際にMailtrapとい ...