3

我想使用 Zend 发送一封电子邮件,其中包含很少的内联图像和一个 pdf 文件作为附件,电子邮件的代码应如下所示:

From - Wed Apr 18 12:09:29 2012

[...]

Content-Type: multipart/mixed; boundary=mixed6455A4FA01BD9CFD334A87E206713ED8

[...]

--mixed6455A4FA01BD9CFD334A87E206713ED8
Content-Type: multipart/related; boundary=related6455A4FA01BD9CFD334A87E206713ED8

--related6455A4FA01BD9CFD334A87E206713ED8
Content-Type: multipart/alternative; boundary=alternative6455A4FA01BD9CFD334A87E206713ED8

--alternative6455A4FA01BD9CFD334A87E206713ED8
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

Email as plain text

best regards

--alternative6455A4FA01BD9CFD334A87E206713ED8
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

Email as <b>html</b><br />

<img src = 'cid:dvb_small.jpg' border = '0'/><br /><br/ >

best regards

<img src = 'cid:signature.gif' border = '0'/>

--alternative6455A4FA01BD9CFD334A87E206713ED8--

--related6455A4FA01BD9CFD334A87E206713ED8
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <dvb_small.jpg>
Content-Disposition: inline

[IMAGE CONTENT]

--related6455A4FA01BD9CFD334A87E206713ED8
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-ID: <signature.gif>
Content-Disposition: inline

[IMAGE CONTENT]

--related6455A4FA01BD9CFD334A87E206713ED8--

--mixed6455A4FA01BD9CFD334A87E206713ED8
Content-Type: application/octetstream; name="invoice_7293.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="invoice_7293.pdf"

[PDF CONTENT]

--mixed6455A4FA01BD9CFD334A87E206713ED8--

有没有办法使用 Zend_Mail 获取这样的代码?我现在在做什么是:

$mail = new Zend_Mail;

[...]

//Adding inline images
$att = $mail->createAttachment(file_get_contents($filePath));
$att->type = $fileType['mime'];
$att->disposition = Zend_Mime::DISPOSITION_INLINE;
$att->encoding = Zend_Mime::ENCODING_BASE64;
$att->filename = $fileName;
$att->id = md5($att->filename);

//Adding PDF file
$invoiceAt = $mail->createAttachment(file_get_contents($invoicePdf));
$invoiceAt->type = 'application/octetstream';
$invoiceAt->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;
$invoiceAt->encoding = Zend_Mime::ENCODING_BASE64;
$invoiceAt->filename    = 'invoice_' . $id . '.pdf';

最后要做的是设置正确的电子邮件内容类型。如果我使用:

$this->setType(Zend_Mime::MULTIPART_MIXED);

内联文件不显示,它们附加到电子邮件中。

如果我这样做:

$this->setType(Zend_Mime::MULTIPART_RELATED);

内联文件正确显示,但 pdf 附件不显示(它在那里并且可以打开它,但在 Thunderbird 中,您只有在单击邮件后才能看到附件标志)。我认为其他邮件客户端也会遇到问题。

在这种情况下,生成的电子邮件代码如下所示:

From - Wed May 02 15:12:18 2012

[...]

Content-Type: multipart/related;
 boundary="=_c3a05d0d4a6abdbfcb3fc03ac8abf402"
Content-Transfer-Encoding: quoted-printable

[...]

--=_c3a05d0d4a6abdbfcb3fc03ac8abf402
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

[HTML]

--=_c3a05d0d4a6abdbfcb3fc03ac8abf402
Content-Type: application/octetstream
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="invoice_123.pdf"

[PDF_CONTENT]

--=_c3a05d0d4a6abdbfcb3fc03ac8abf402
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <e783669dda40eced6adef6cd056d9887>
Content-Disposition: inline; filename="dvb_logo.jpg"

[IMAGE CONTENT]

--=_c3a05d0d4a6abdbfcb3fc03ac8abf402
Content-Type: 
Content-Transfer-Encoding: base64
Content-ID: <0c6120573af00f1160ee7049be5835c3>
Content-Disposition: inline; filename="signature.gif"

[IMAGE CONTENT]

--=_c3a05d0d4a6abdbfcb3fc03ac8abf402--

那么,Zend 有没有办法像我的问题一样生成电子邮件代码?

4

0 回答 0