PHP电子邮件PDF附件发送
试图与PDF附件的电子邮件,利用swiftmailer尝试和没有工作,这个代码拉链但不PDF :(工作PHP电子邮件PDF附件发送
$attachment = chunk_split(base64_encode(file_get_contents($filename)));
ob_start(); //Turn on output buffering
?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
<?php echo $message."<br /><br />";
?>
--PHP-alt-<?php echo $random_hash; ?>--
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: application/octet-stream; name="<?php echo $filename?>"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="<?php echo $filename?>"
<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--
<?php
//copy current buffer contents into $message variable and delete current output buffer
$message = ob_get_clean();
//send the email
$mail_sent = @mail($to, $subject, $message, $headers);
邮件被发送和罚款我收到邮件:但附件不在那里,并在meial所有的电子邮件中编码的base64:
ontent-Type:application/octet-stream; name =“media.pdf”Content-Transfer- Encoding:base64 Content-Disposition:attachment; filename =“media.pdf”JVBERi0xLjMKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZwovT3V0bGluZXMgMiAwIFIKL1BhZ2Vz IDMgMCBSID4 + CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9Pd XRsaW5lcyAvQ291bnQgMCA + PGPL bmRvYmoKMyAwIG9iago8PCAvVHlwZSAvUGFnZXMKL0tpZHMgWzYgMCBSCjE2IDAgUgpdCi9Db3Vu dCAyCi9SZXNvdXJjZXMgPDwKL1Byb2NTZXQgNCAwIFIKL0ZvbnQgPDwgCi9GMSA4IDAgUgovRjIg OSAwIFIKPj4KL1hPYmplY3QgPDwgCi9JMSAxMiAwIFIKL0kyIDE1IDAgUgovSTMgMjAgMCBSCi9J NCAyMyAwIFIKPj4KPj4KL01lZGlhQm94IFswLjAwMCAwLjAwMCA2MTIuMDAwIDc5Mi4wMDBdCiA + PgplbmRvYmoKNCAwIG9iagpbL1BERiAvVGV4dCAvSW1hZ2VDIF0KZW5kb2JqCjUgMCBvYmoKPDwK L0NyZWF0b3IgKERPTVBERikKL0NyZWF0aW9uRGF0ZSAoRDoyMDEzMDgyMzAyMDA0NCswMCcwMCcp Ci9Nb2REYXRlIChEOjIwMTMwODIzMDIwMDQ0KzAwJzAwJykKPj4KZW5kb2JqCjYgMCBvYmoKPDwg L1R5cGUgL1BhZ2UKL1BhcmVudCAzIDAgUgovQW5ub3RzIFsgMTAgMCBSIDEzIDAgUiBdCi9Db250 ZW50cyA3IDAgUgo + PgplbmRvYmoKNyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZQovTGVu Z3RoIDI3OCA + PgpzdHJlYW0KeJyFkb1Ow0AQhHs/xZRQsNm9/2tRAnJEA1wXpUBJSIOFIAWvz9ox FwMKyNLJmtuZb3evYWJmTM/3fXNdYJIljhbRGnIxoWwxuzEQT4zyDKwuSlvuFpdrlCUWpfmd83Cr YvT4AGOJFbDWn21Tg00mYYsO1iTKJlXlBY/fnYaMH90uE0tAZNVSVrMPhnJyVfnL3NcGzkNtCG50
根据部分消息(ontent-Type: ...
),我猜测输出缓冲区已经被填满并且被自动刷新,只留下之后的输出将刷新分配给$message
。
--PHP-mixed-<?php echo $random_hash; ?>
和Content-Type: application/octet-stream; ...
之间还有两个额外的空白行可能会导致麻烦。
依靠输出缓冲来构造一个字符串既容易出错又完全不必要。这是多更好地使用PHP的HEREDOC syntax代替:
$message = <<<MSG
--PHP-mixed-$random_hash
Content-Type: multipart/alternative; boundary="PHP-alt-$random_hash"
--PHP-alt-$random_hash
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
$message<br /><br />
--PHP-alt-$random_hash--
--PHP-mixed-$random_hash
Content-Type: application/octet-stream; name="$filename"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="$filename"
$attachment;
--PHP-mixed-$random_hash--
MSG;
$mail_sent = @mail($to, $subject, $message, $headers);
注意,在邮件的行尾必须是CRLF(如\ r \ n)。如果上述方法无效,您可能需要创建一个字符串有明确的行结尾:
$message = "--PHP-mixed-$random_hash\r\n"
. "Content-Type: multipart/alternative; boundary=\"PHP-alt-$random_hash\"\r\n"
. "\r\n"
/* ... */
. $attachment
. "\r\n--PHP-mixed-$random_hash--"
. "\r\n";
见PHP的mail() manual page一些进一步的细节。
标题行在做什么?看看这个swift邮件的例子。你的混合发送电子邮件与强制文件下载。 – 2013-08-23 03:19:27