PHPMailerを使ってメールをSMTP送信する方法(Composer無し)
2024/01/16
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();
//以降は通常の使い方と同様
}
参考サイト
関連記事
-
-
PHPMailerでエンベロープFrom(Return-Path)を指定する方法
同じメールアドレスから送信したメールがmb_send_mail関数だと受信できる ...
-
-
【2024年版】PHPMailerでGmailのSMTPサーバを経由してメールを送信する方法
だいぶ前に同じようなことをメモしたが、そちらの方法だと送信できずエラー内容を見た ...
-
-
メールサーバーを構築せずにGmailのSMPTを使ってPHPでメール送信
メールサーバーが立てられなかったり、無料サーバーのため使えなかったりといった場合 ...
-
-
SendGridを使ってメールサーバを構築せずにPHPからメールを送信する方法
メールサーバを構築せずに独自ドメインのメールアドレスにてメール送信を行いたい。過 ...
-
-
PHPMailerでエラーメッセージを日本語で出力する方法
PHPMailerのGitHubページを見ていると言語設定についての案内を見つけ ...