ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルで添付ファイル付きのメールを送信する

php_PHP チュートリアルで添付ファイル付きのメールを送信する

WBOY
WBOYオリジナル
2016-07-13 17:29:17736ブラウズ

「Web サイトから契約書を送信しました。フォーム経由で送信されたメールに添付ファイルを追加するにはどうすればよいですか?」という質問をよく聞きます。まず最初に言いたいのは、これを行う簡単な方法はないということです。 PHP またはその他のサーバー側スクリプト言語についての十分な理解が必要です。もちろん、実際に PHP をサポートする Web サイトのアカウントも必要です。この前提条件を満たしている場合は、この章を読んだ後、PHP を使用して添付ファイル付きの電子メールを送信できます。 1. 添付ファイルの仕組み PHP マニュアルで「添付ファイル」関数を検索したことがあるなら、おそらく何も出てこないでしょう (少なくともこの記事を書いている時点ではまだ)。後で、この知識を理解するために多くの時間を費やすことになります。 添付ファイル付きの電子メールを誰かに送信すると、添付ファイルは電子メールと一緒に受信者のメールボックスに置かれると思われるかもしれません (たとえば、PNG 画像ファイルを送信した場合、受信者のメールボックスには txt が含まれます)ファイル (電子メール) と .png ファイル (添付ファイル) は機能しません。添付ファイルを追加すると、電子メール プログラムは添付ファイルをプレーン テキスト ファイルに変換し、作成した内容の後にこのテキスト ブロックを挿入します。この方法では、すべてを送信すると、受信者のメールボックスには、添付ファイルと実際の電子メールのコンテンツの両方を含むプレーン テキスト ファイルが 1 つだけ存在します。 (HTML ファイル)。 返信パス: 日付: 月曜日、2000 年 5 月 22 日 19:17:29 +0000 差出人: 宛先: 人物 メッセージ ID: コンテンツ タイプ: multipart/mixed; 件名:これが件名です --396d983d6b89a Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 8bit これは電子メールの本文です --396d983d6b89a Content-type: text/html; .html Content-disposition: inline; filename=attachment.html Content-transfer-encoding: 8bit これは添付された HTML ファイルです --396d983d6b89a-- 最初の 7 行は電子メールのヘッダーであり、その内容に注目してください。 -type ヘッダー部分 このヘッダーは、電子メールが複数の部分 (メッセージ自体と添付ファイル) で構成されていることを電子メール プログラムに伝えます。 したがって、2 つの添付ファイルのある電子メールは次の 3 つの部分で構成されます。メッセージ、最初の添付ファイル、および 2 番目の添付ファイル。 添付ファイルのある電子メールのさまざまな部分は、Content--type ヘッダーで定義されます。メッセージの各新しい部分は 2 つのハイフン (-) で始まります。 -) と区切り文字が続き、最後の区切り文字の後には 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 メソッドを使用してエンコードします。 # 長い文字列が得られます。 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); } ?> 以上です。上記の例がよく理解できない場合は、添付ファイル付きの電子メールを何通か自分に送信し、その電子メールのソース コードを注意深く調べることをお勧めします。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/531708.html技術記事 「Web サイトから送信された契約書があります。フォーム経由で送信されたメールに添付ファイルを追加するにはどうすればよいですか?」という質問をよく聞きます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。