数あるPHPのメール送信ライブラリの中でも、使う機会の多いPHPMailer。

最近PHPMailerを使って送信するメールに、ファイルを添付する機能を追加することがあったので、その設定方法をまとめておく。

ファイルを添付する方法

PHPMailerではファイル添付のメソッドが用意されており、AddAttachmentの第一引数にファイルパス、第二引数にファイル名を指定することで、簡単に添付ファイル付きのメールを送信することができる。

<?php
require __DIR__.'/vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer; 
use PHPMailer\PHPMailer\Exception;
 
$Mail = new PHPMailer(true); 

// 基本情報の設定など一部省略

// ファイル添付メソッド
$Mail->AddAttachment($filePath, $fileName);

$Mail->addAddress('customer@example.com');
$Mail->Subject = '件名'; 
$Mail->Body = '本文'; 
$Mail->send(); 

フォームからアップロードされたファイルを添付する場合は、$_FILES変数からファイル情報を受け取る。

以下はシンプルな例だが、本来はファイルタイプやファイルサイズなどのバリデーションをおこなう必要がある。

$filePath = $_FILES['upload_file']['tmp_name'];
$fileName = $_FILES['upload_file']['name'];

$Mail->AddAttachment($filePath, $fileName);

添付ファイルをクリアする

AddAttachmentメソッドを使って添付ファイル付きのメールを送信した後に、再度同じオブジェクトからメール送信をおこなう場合、前に添付したファイルが残ってしまうので、場合によってはクリアする必要があるだろう。

その際はメール送信後に、以下のとおりclearAttachmentsメソッドを実行すればクリアすることができる。

// 添付ファイルをクリア 
$Mail->clearAttachments();

なお、送信先アドレスなどの情報をクリアする場合はclearAllRecipientsメソッドを実行する。

// 送信先情報をクリア
$Mail->clearAllRecipients();