カテゴリ: PHP 更新日: 2026/05/04

PHPのメール添付ファイル送信を完全ガイド!初心者でもわかるPHPメール送信

PHP の メールの添付ファイルの送信方法
PHP の メールの添付ファイルの送信方法

先生と生徒の会話形式で理解しよう

生徒

「PHPでメールを送れるのは聞いたことがありますが、ファイルを一緒に送ることもできるんですか?」

先生

「できます。PHPのメール送信では、文章だけでなく、画像やPDFなどの添付ファイルも送れます。」

生徒

「難しそうに感じます……。パソコンもあまり触ったことがなくて。」

先生

「仕組みを一つずつ分解して考えれば大丈夫です。今日は超基本から説明します。」

1. PHPでメール送信とは何をしているのか

1. PHPでメール送信とは何をしているのか
1. PHPでメール送信とは何をしているのか

PHPのメール送信とは、サーバーというコンピューターから、メールを相手に届ける仕組みです。普段使っているメールソフトの代わりに、PHPが自動でメールを送ってくれるイメージです。添付ファイル付きメールも、基本は同じで「文章」と「ファイル」を一緒に箱詰めして送っています。

この箱詰めのルールをMIME(マイム)と呼びます。難しい名前ですが、「メールの中身の決まりごと」だと思ってください。

2. 添付ファイル付きメールで必要な要素

2. 添付ファイル付きメールで必要な要素
2. 添付ファイル付きメールで必要な要素

PHPで添付ファイルを送るためには、いくつか準備が必要です。まず送信先メールアドレス、件名、本文があります。これに加えて、添付したいファイルの場所と名前が必要になります。

さらに、メールヘッダーという情報も重要です。ヘッダーは、封筒に書く「差出人」や「中身の説明」のような役割を持っています。添付ファイルがある場合、このヘッダーを正しく書かないと、ファイルが壊れて届いてしまいます。

3. mail関数でシンプルにメールを送る

3. mail関数でシンプルにメールを送る
3. mail関数でシンプルにメールを送る

PHPにはmail(メール)関数という、メール送信専用の命令があります。まずは、添付ファイルなしの基本形を見てみましょう。これは「普通の手紙」を送る状態です。


$to = "test@example.com";
$subject = "テストメール";
$message = "これはPHPから送ったメールです。";
$headers = "From: sample@example.com";

mail($to, $subject, $message, $headers);

このプログラムでは、宛先、件名、本文、送信元を指定しています。これが添付ファイル送信の土台になります。

4. 添付ファイルの中身を読み込む

4. 添付ファイルの中身を読み込む
4. 添付ファイルの中身を読み込む

添付ファイルを送るためには、まずファイルをPHPで読み込みます。ここでは、同じフォルダにあるPDFファイルを例にします。ファイルはそのままでは送れないため、base64(ベース64)という形式に変換します。これは「壊れないように変換する方法」です。


$filePath = "sample.pdf";
$fileData = file_get_contents($filePath);
$encodedFile = base64_encode($fileData);

file_get_contentsは、ファイルの中身を丸ごと読み込む命令です。base64_encodeで、安全に送れる形にしています。

5. ヘッダーと本文を組み立てる

5. ヘッダーと本文を組み立てる
5. ヘッダーと本文を組み立てる

添付ファイル付きメールでは、本文とファイルを区切るための境界線を使います。これをboundary(バウンダリー)と呼びます。境界線は「ここからここまでが本文」「ここからがファイル」と区別するための目印です。


$boundary = uniqid("boundary_");

$headers  = "From: sample@example.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"";

uniqidは、他と被らない文字列を自動で作る命令です。境界線は毎回違うほうが安全です。

6. 本文と添付ファイルを結合する

6. 本文と添付ファイルを結合する
6. 本文と添付ファイルを結合する

次に、メール本文と添付ファイルを一つの文章として組み立てます。ここでは「本文 → 添付ファイル」の順番で入れています。まるで、手紙の後ろに資料をホチキスで留める感覚です。


$body  = "--{$boundary}\r\n";
$body .= "Content-Type: text/plain; charset=\"UTF-8\"\r\n\r\n";
$body .= "添付ファイル付きのテストメールです。\r\n";

$body .= "--{$boundary}\r\n";
$body .= "Content-Type: application/pdf; name=\"sample.pdf\"\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n";
$body .= "Content-Disposition: attachment; filename=\"sample.pdf\"\r\n\r\n";
$body .= chunk_split($encodedFile);
$body .= "--{$boundary}--";

chunk_splitは、長い文字列を区切って読みやすくするための命令です。メールでは、この形が推奨されています。

7. 添付ファイル付きメールを送信する

7. 添付ファイル付きメールを送信する
7. 添付ファイル付きメールを送信する

最後に、ここまで作った情報をmail関数に渡して送信します。基本のmail関数と同じですが、本文とヘッダーが少し複雑になっています。


$to = "test@example.com";
$subject = "添付ファイルのテスト";

mail($to, $subject, $body, $headers);

これで、PHPから添付ファイル付きメールを送ることができます。最初は長く見えますが、一つずつ役割を理解すれば、怖くありません。

8. 初心者がつまずきやすい注意点

8. 初心者がつまずきやすい注意点
8. 初心者がつまずきやすい注意点

初心者の方がよく困るのは、ファイルの場所が違っているケースです。ファイル名の打ち間違いや、フォルダの位置が原因で送れないことがあります。また、サーバーによってはPHPのmail機能が使えない場合もあります。

まずは、小さなテキストファイルやPDFで試し、うまく動くことを確認しましょう。失敗しても、仕組みを理解していれば原因を探しやすくなります。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
PHP
PHPでセッションを使ってフォーム入力を保持する方法を解説!初心者向けステップバイステップ
New2
PHP
PHP の文字列の基本操作(連結・切り出し・長さ)の使い方
New3
PHP
PHPのメール送信でSPF・DKIM認証設定を完全解説!初心者でもわかるメール認証の基本
New4
Python
PythonでAPIのパフォーマンスを向上させる方法!キャッシュ活用を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.3
Java&Spring記事人気No3
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.5
Java&Spring記事人気No5
PHP
PHPのHTMLメールの作成方法を完全ガイド!初心者でもわかるメール送信の基本
No.6
Java&Spring記事人気No6
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.7
Java&Spring記事人気No7
Python
Pythonで2次元リストを作成・操作する方法(リストのリスト)
No.8
Java&Spring記事人気No8
Python
Pythonの例外を発生させる方法を完全解説!raise文の使い方を初心者向けにやさしく説明