添付ファイル付きの電子メールを手動で送信しようとする場合は、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/plain
、text/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--