1. 導入:PHPMailerとは?
- PHPの標準
mail()
関数はシンプルですが、以下の問題があります:- 送信エラー時の対応が難しい。
- 暗号化通信(SSL/TLS)非対応。
- メールヘッダーインジェクション対策が不十分。
PHPMailerは、SMTPサーバー対応、HTMLメール、添付ファイル送信などを安全かつ柔軟に実装できるライブラリです。
2. PHPMailerのインストール方法
Composerを使ったインストール(推奨)
composer require phpmailer/phpmailer
3. 基本的なメール送信の実装例
シンプルなSMTPメール送信
以下は、SMTPサーバーを利用してメールを送信する基本コードです。
コード例:send_email.php
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Composerのオートローダーを読み込む
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
// SMTP設定
$mail->isSMTP();
$mail->Host = 'smtp.example.com'; // SMTPサーバー
$mail->SMTPAuth = true;
$mail->Username = 'your-email@example.com'; // SMTPユーザー名
$mail->Password = 'your-password'; // SMTPパスワード
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 暗号化通信
$mail->Port = 587;
// 送信先情報
$mail->setFrom('your-email@example.com', '送信者名');
$mail->addAddress('recipient@example.com', '受信者名'); // 送信先
// メール内容
$mail->isHTML(true); // HTML形式のメール
$mail->Subject = 'PHPMailerで送信したメール';
$mail->Body = '<h1>こんにちは!</h1><p>このメールは<strong>PHPMailer</strong>を使用して送信されています。</p>';
$mail->AltBody = 'こんにちは!このメールはPHPMailerを使用して送信されています。';
// メール送信
$mail->send();
echo 'メールが正常に送信されました!';
} catch (Exception $e) {
echo "メール送信に失敗しました。エラー: {$mail->ErrorInfo}";
}
?>
4. 実用的な実装例:添付ファイルとCC/BCCの追加
コード例:send_with_attachment.php
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
// SMTP設定
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'your-email@example.com';
$mail->Password = 'your-password';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
// 送信先情報
$mail->setFrom('your-email@example.com', '送信者名');
$mail->addAddress('recipient@example.com', '受信者名');
$mail->addCC('cc@example.com'); // CC
$mail->addBCC('bcc@example.com'); // BCC
// 添付ファイルの追加
$mail->addAttachment('/path/to/file.pdf', '添付ファイル.pdf');
// メール内容
$mail->isHTML(true);
$mail->Subject = '添付ファイル付きメール';
$mail->Body = '<p>このメールには添付ファイルが含まれています。</p>';
$mail->AltBody = 'このメールには添付ファイルが含まれています。';
// メール送信
$mail->send();
echo 'メールが正常に送信されました。';
} catch (Exception $e) {
echo "エラー: {$mail->ErrorInfo}";
}
?>
5. よく使うPHPMailer機能まとめ
機能 | コード例 |
---|---|
添付ファイル | $mail->addAttachment('/path/file.pdf'); |
CC/BCCの追加 | $mail->addCC('cc@example.com'); |
HTMLメール | $mail->isHTML(true); |
返信先アドレス指定 | $mail->addReplyTo('reply@example.com'); |
SMTPデバッグ | $mail->SMTPDebug = 2; |
6. セキュリティ対策のポイント
- XSS対策:入力値のサニタイズを必ず行う(
htmlspecialchars
など)。 - メールヘッダーインジェクション防止:入力値の改行や不正文字を除去。
- SMTP暗号化:
PHPMailer::ENCRYPTION_STARTTLS
またはPHPMailer::ENCRYPTION_SMTPS
を必ず使用。
7. まとめ
- PHPMailerを使うことで、SMTPサーバー経由で安全かつ柔軟にメール送信が可能です。
- 基本機能から添付ファイル、HTMLメールまで、実用的な実装例を紹介しました。
- セキュリティ対策を忘れずに実装し、安全なメール送信システムを構築しましょう!