1

docファイルを添付したメールを送信しています。メールを受信して​​いますが、添付ファイルがありません。

PHP

$file_resume = '';
if (!empty($_FILES['attachment_file_name']['tmp_name'])) {
$file = $_FILES['attachment_file_name']['name'];
$attachment= file_get_contents($file);
$attachment= chunk_split(base64_encode($attachment));

}

$uid = md5(uniqid(time()));

$headers= "From: no-reply@edu.in"."\r\n";
$headers.= "Reply-To: no-reply@edu.in"."\r\n";
$headers.= "X-Mailer: PHP/" . phpversion()."\r\n Content-Type: multipart/mixed; boundary=\"PHP-mixed-".$uid."\"\r\n";
$headers.= "MIME-Version: 1.0" . "\r\n";
$headers.= "Content-type: text/html; charset=utf-8"."\r\n Content-Disposition: attachment; filename=\"".$attachment."\"\r\n";

$message = $_POST['person_name'];

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

HTML

    <form id="attachment" action='mailer.php' method='POST' name="attachment" enctype="multipart/form-data">

    person name: <input type="text" name="person_name" >
<br />
   Attachment : <input id="attachment_file" class="field" style="height: 25px;" type="file" name="attachment_file_name" />

    <input id="submit_button"  type="submit" value="Send" />
    </form>
4

2 に答える 2

2

メールメッセージの本文に添付ファイルを追加する必要があります。次のようなものを試してください。

$random_hash = md5(time());

$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\"";

$headers .= "\r\nMIME-Version 1.0";

$attachment = chunk_split(base64_encode(file_get_contents($filename)));

$message = 
"--PHP-alt-$random_hash
Content-Type: text/plain

Dear Same,

We would like to thank you for your registration to be held on Saturday August 25, 2012 at the....

--PHP-alt-$random_hash
Content-Type: application/pdf; name=$filename
Content-Transfer-Encoding: base64
Content-Disposition: attachment

$attachment
--PHP-alt-$random_hash--";

@mail($to, $subject, $message, $headers);
于 2013-03-21T05:45:09.837 に答える
2

添付ファイル付きの電子メールを手動で送信しようとする場合は、mail()引数を使用して作成しているものを実際に表す、基になるメールテキストパケットを理解する必要があります。ここで何が起こっているのかを理解して理解しない限り、添付ファイル付きの電子メールを送信するのに苦労するでしょう。鋭いエッジが多すぎます。

Gmailには、元のメッセージパケットをプレーンテキストで表示するための優れた機能がメールにあります。それはShowOriginalと呼ばれます。メールスクリプトをテストするときは、可能であればGmailアカウントを使用して、実際のメールのプレーンテキストパケットを検査できるようにしてください。オリジナルを表示するには、メールの返信矢印の横にある下向き矢印によってトリガーされる左上のドロップダウンに移動します。

画像を添付してテストメールを自分宛に送信すると、次のようになります。基本的に、メールコールは、この例のように多かれ少なかれ変換する必要があります。

特に、ヘッダーがどのように始まるかに注意してください(おそらくを除いて、以下の上位5つのヘッダーは処理されませんMIME-Version)。そのブロックの終わりには、次のものがあります。

Content-Type: multipart/mixed; boundary=089e0118416874703004d86a5106

次の部分=メッセージ部分の境界です。これにより、エンコードされて適切なサブ部分ヘッダーが指定された添付ファイルの内容を含む、マルチパートメッセージブロックを追加できます。

だからあります:

--089e0118416874703004d86a5106

... message block(s) ...

--089e0118416874703004d86a5106--

実際には、次のように宣言された別の境界があります。

Content-Type: multipart/alternative; boundary=089e0118416874702b04d86a5104

これにはtext/plaintext/htmlデュアルメッセージ形式が含まれます。これは必須ではありませんが、多くのメールクライアントは本質的にこれを行います。text/plainまたはを選択できますtext/html。コメントのフォーマット方法はあなた次第です。

次に見る:

--089e0118416874703004d86a5106
Content-Type: image/jpeg; name="opinion (2).jpg"
Content-Disposition: attachment; filename="opinion (2).jpg"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hejlmnuz0

/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAIEBAYIBggICAgICAgICAgKCgoKCgoKCgoKCgoKCgoK
... lots of lines for the encoded file block ...
W5R3W8ajLwrgUJEDGKWN2kWvO5iB7qdKwB6MwwfqVrQKcObveZxZBtQNCp0vc//Z
--089e0118416874703004d86a5106--

境界には、(各ブロックではなく)ブロック--終わりに末尾があることに注意してください。

以下を見て、luk3thomasが彼の答えに持っているコードと比較してください。非常に単純な電子メールメッセージを自分自身に送信して、添付ファイル形式の電子メールと比較してみてください。

mail('your@email.com', 'Simple mail test', 'Test message body content.');`

添付ファイル付きの電子メールを送信するために何が必要かを理解し始める必要があります。重要なのは、送信用の電子メールパケットのフォーマットは非常に特殊であり、小さなことで失敗する可能性があるということです。だからあなたは注意を払わなければなりません。

MIME-Version: 1.0
Received: by 10.50.40.164 with HTTP; Thu, 21 Mar 2013 00:30:51 -0700 (PDT)
Date: Thu, 21 Mar 2013 02:30:51 -0500
Delivered-To: [redacted]@gmail.com
Message-ID: <CAKJE7RAH3+ZgN+86xykJrrzVaHK3waPD-a-OXbSDe3FGgcQrMw@mail.gmail.com>
Subject: Test of email with attachment for plaintext
From: Jared Farrish <[redacted]@gmail.com>
To: Jared Farrish <[redacted]@gmail.com>
Content-Type: multipart/mixed; boundary=089e0118416874703004d86a5106

--089e0118416874703004d86a5106
Content-Type: multipart/alternative; boundary=089e0118416874702b04d86a5104

--089e0118416874702b04d86a5104
Content-Type: text/plain; charset=UTF-8

This is the body of the email message.

--089e0118416874702b04d86a5104
Content-Type: text/html; charset=UTF-8

<div dir="ltr">This is the body of the email message.<br></div>

--089e0118416874702b04d86a5104--
--089e0118416874703004d86a5106
Content-Type: image/jpeg; name="opinion (2).jpg"
Content-Disposition: attachment; filename="opinion (2).jpg"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hejlmnuz0

/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAIEBAYIBggICAgICAgICAgKCgoKCgoKCgoKCgoKCgoK
CgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/2wBDAQIICBAQEBAQEBAgICAgIEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQED/wgARCAEsASwDASIA
AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAIDBAkAAf/EABsBAAMBAQEBAQAAAAAAAAAA
[-- snip many lines of base64 file contents --]
yGrjmAV5jlw7j5RFebDQu8RG2rLa/up9x/xHOU5eppGo7lm3uDTz6w5XxBYgB7ruYJFwW/2PiD9q
XjDEturp55IeLGM36+Tlz8JY6v8AXGhta9/4Ih62UvuWHuP3DfOg/wAGFg/g0mNKnahdifSKKua+
h0likOlp+yFa2FgP0rtOReVitRTIiUuJSjw6JpN4thVyhRdZ8EE/aYzn523NZeJYu7judhllHo0g
W5R3W8ajLwrgUJEDGKWN2kWvO5iB7qdKwB6MwwfqVrQKcObveZxZBtQNCp0vc//Z
--089e0118416874703004d86a5106--
于 2013-03-21T07:54:03.323 に答える