ホームページ バックエンド開発 PHPチュートリアル php 添付ファイル付きのメールを送信

php 添付ファイル付きのメールを送信

Dec 02, 2016 am 11:51 AM

「Web サイトから送信された契約書を持っています。フォームから送信されたメールに添付ファイルを追加するにはどうすればよいですか?」という質問をよく聞きます。

まず最初に言っておきますが、これを行うのは簡単なことではありません。方法。

PHP またはその他のサーバーサイド スクリプト言語について十分に理解している必要があります。

もちろん、実際に PHP をサポートする Web サイトのアカウントも必要です。

この前提条件を満たしている場合は、この章を読んだ後に PHP を使用して添付ファイル付きの電子メールを送信できます。

1. 添付ファイルの仕組み

PHP マニュアルで「添付ファイル」関数を検索したことがある場合、結果は何も表示されないかもしれません (少なくともこの記事を書いている時点ではまだ)。

この知識を理解するには、後で多くの時間を費やす必要があります。

添付ファイル付きの電子メールを誰かに送信すると、その添付ファイルは電子メールと一緒に受信者のメールボックスに置かれると思うかもしれません (たとえば、PNG 画像ファイルを送信すると、受信者のメールボックスにはtxt ファイル (電子メール) と .png ファイル (添付ファイル) ですが、それは機能しません

添付ファイルを追加すると、電子メール プログラムは添付ファイルをプレーン テキスト ファイルに変換し、このテキスト ブロックを入力したファイルの後に挿入します。このようにして、すべてを送信すると、受信者のメールボックスには、添付ファイルと実際のメールの内容を含むファイルが 1 つだけ存在します。添付ファイル付きの電子メールの例 (HTML ファイル)

Return-Path: Date: Mon, 22 May 2000 19:17:29 +0000 From: Someone: person Message-id: <83729KI93LI9214@example.com> ; コンテンツ タイプ: multipart/mixed; border="396d983d6b89a" 件名: これが件名です --396d983d6b89a コンテンツ タイプ: text/plain; コンテンツ転送エンコーディング: 8bit --396d983d6b89a Content-type: text/html; name=attachment.html Content-disposition: inline; filename=attachment.html Content-transfer-encoding: 8bit これは添付された HTML ファイルです --396d983d6b89a--最初の 7 行は電子メールのヘッダーであり、Content-type ヘッダー部分によって、電子メールが複数の部分で構成されていることがメール プログラムに通知されることに注意してください。 . 添付ファイル付きのメールは、通常、メッセージと添付ファイルの 2 つの部分で構成されます。このように、2 つの添付ファイルのあるメールは、メッセージ、1 つ目の添付ファイル、2 つ目の添付ファイルで構成されます。

添付ファイルのあるメールのさまざまな部分は分割線で区切られます。

境界線は 2 つのハイフン (--) で始まる Content--type ヘッダーで定義されます。 最後の分割線の後にも 2 つのハイフンがあり、電子メールに他の部分がないことを示しています。

各分割線の後には、この部分のコンテンツの種類をメール プログラムに伝える行がいくつかあります。

たとえば、上の例の最初の分割線の後の 2 行、つまり Content-type: text/plain で始まる行に注目してください。

これらの行は、次の部分が ISO-8859-1 文字セットのプレーン テキストであることを示します。

2 番目の分割線に続く行は、現在の部分が HTML ファイルであり、その名前が「attachment.html」であることをメール プログラムに伝えます。

Content-disposition は、可能であれば添付ファイルをインラインで表示するように電子メール プログラムに指示します。

これで、新しいメール プログラムはメッセージの後に HTML コンテンツを表示します。

Content-disposition が添付ファイルに設定されている場合、メール プログラムは HTML ファイルのコンテンツを表示しませんが、ファイルに接続されたアイコン (または類似のもの) を表示します。

添付ファイルの内容を表示するには、受信者はこのアイコンをクリックする必要があります。通常の状況では、添付ファイルがテキスト (HTML を含む) の場合、Content-disposition はインラインに設定されます。これは、ほとんどの電子メール プログラムが他のブラウザを使用せずに添付ファイル (テキスト) のコンテンツを直接表示できるためです。添付ファイルがテキスト (画像やその他の同様のコンテンツなど) ではない場合、Content-disposition は添付ファイルに設定されます。

2. PHP を使用して添付ファイル付きの電子メールを生成します

ここでは、定義された HTML ファイルを添付ファイルとして電子メールに追加する方法を示す例を示します: # 最初に実際のメッセージの内容を書き込みます $emailBody = "これは、は電子メールの本文に入ります。"; # 次に、添付ファイルとして添付する HTML ファイル $attachment = " これは添付された HTML ファイルです "; # 電子メールのさまざまな部分を区切る分割線を作成します。 # 基本的に分割線は任意の文字列で構いません。 # ただし、重要な点はメールを書いた人を特定することです。 # これはランダムな文字列を書き込むため、 # uniqid 関数を使用してランダムな文字列を生成します。 $boundary = uniqid( ""); # 次に、電子メール ヘッダーを作成する必要があります。

このメールに 1 つ以上の添付ファイルが含まれていることを示す # Content-type ヘッダーを忘れずに挿入してください。 $headers = "From:someone@example.com Content-type:multipart/mixed;boundary="$boundary""; # OK、これでメールの内容がすべて揃いました。 # 次に、メールの本文を変更します。 $emailBody = "--$boundary コンテンツ タイプ: text/plain; charset=iso-8859-1 コンテンツ転送エンコーディング: 8 ビット $emailBody --$boundary コンテンツ タイプ: text/html; name=attachment.html コンテンツ-disposition: inline; filename=attachment.html Content-transfer-encoding: 8bit $attachment --$boundary--"; # これでメールを送信できるようになります mail( "person@eksempel.dk", "The subject", $ emailBody, $headers);

3. ユーザーがアップロードしたファイルを添付ファイルとして添付します

上記の例は理解しにくいかもしれませんが、以下は...以下の例では、フォームを使用してユーザーにファイルをアップロードさせ、送信する電子メールにそのファイルを添付しているため、状況はさらに困難になります。問題は、ファイルの MIME タイプが事前にわからないことです。

前の例では、それが HTML ファイルであることがすでにわかっているため、この添付ファイルの Content-type ヘッダーの設定は非常に簡単です。以下の例では、ユーザーが HTML ファイル、PNG ファイル、vCard ファイルなどをアップロードする可能性があるため、MIME タイプは任意である可能性があります。

例を見てみましょう: # 次に、フォームを生成しましょう。ファイルをアップロードできるフォームを生成する際、 # を忘れずに # ユーザーが「送信」ボタンを押した場合」 if ($send) { # 分割線を定義 $boundary = uniqid( ""); # 生成電子メールヘッダー $headers = "From: $from Content-type: multipart/mixed; border="$boundary""; # アップロードされたファイルの MIME タイプを決定する if ($attachment_type) $mimeType = $attachment_type; #ファイルの MIME タイプを指定しません。 # 「application/unknown」に設定できます。 $mimeType = "application/unknown"; # ファイルの名前を決定します $fileName = $attachment_name; fp = fopen($attachment, "r") ; #ファイル全体を変数に読み込みます $read = fread($fp, filesize($attachment)); #わかりました、変数 $read には内容を含むテキスト ブロックが保持されます#このテキストを使用して、メール プログラムが読み取れる形式に変換します。 #base64 メソッドを使用してエンコードします。 #read =base64_encode($read); Base64 メソッドを使用してエンコードされます

# 次に行うことは、この長い文字列を 1 行あたり 76 文字で構成される小さなチャンクに分割することです $read = chunk_split($read); # これでメールの本文を作成できます $body = "--$boundary コンテンツ タイプ: text/plain; charset=iso-8859-1 コンテンツ転送エンコーディング: 8 ビット $body --$boundary コンテンツ タイプ: $mimeType; name=$fileName コンテンツの配置: 添付ファイル; filename=$fileName Content-transfer-encoding:base64 $read --$boundary--"; # メール送信 mail($to, $subject, $body, $headers); } ?>

以上です。上記の例がよく理解できない場合は、添付ファイル付きの電子メールを何通か自分に送信し、その電子メールのソース コードを注意深く調べることをお勧めします。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP状況調査の発表

See all articles