簡體   English   中英

帶有pdf附件的PHP電子郵件發送

[英]PHP email sending with pdf attachment

嘗試發送帶有pdf附件的電子郵件,嘗試使用swiftmailer,但此方法不起作用,此代碼只能使用zip,但不能使用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 ); 

郵件發送得很好,我也收到了郵件:但是附件不存在,並且在郵件中,所有的base64都編碼在電子郵件中,例如:

ontent-Type:應用程序/八位字節流; name =“ media.pdf” Content-Transfer-Encoding:base64 Content-Disposition:附件; 文件名= “media.pdf” JVBERi0xLjMKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZwovT3V0bGluZXMgMiAwIFIKL1BhZ2Vz IDMgMCBSID4 + CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9PdXRsaW5lcyAvQ291bnQgMCA + PGPL bmRvYmoKMyAwIG9iago8PCAvVHlwZSAvUGFnZXMKL0tpZHMgWzYgMCBSCjE2IDAgUgpdCi9Db3Vu dCAyCi9SZXNvdXJjZXMgPDwKL1Byb2NTZXQgNCAwIFIKL0ZvbnQgPDwgCi9GMSA4IDAgUgovRjIg OSAwIFIKPj4KL1hPYmplY3QgPDwgCi9JMSAxMiAwIFIKL0kyIDE1IDAgUgovSTMgMjAgMCBSCi9J NCAyMyAwIFIKPj4KPj4KL01lZGlhQm94IFswLjAwMCAwLjAwMCA2MTIuMDAwIDc5Mi4wMDBdCiA + PgplbmRvYmoKNCAwIG9iagpbL1BERiAvVGV4dCAvSW1hZ2VDIF0KZW5kb2JqCjUgMCBvYmoKPDwK L0NyZWF0b3IgKERPTVBERikKL0NyZWF0aW9uRGF0ZSAoRDoyMDEzMDgyMzAyMDA0NCswMCcwMCcp Ci9Nb2REYXRlIChEOjIwMTMwODIzMDIwMDQ0KzAwJzAwJykKPj4KZW5kb2JqCjYgMCBvYmoKPDwg L1R5cGUgL1BhZ2UKL1BhcmVudCAzIDAgUgovQW5ub3RzIFsgMTAgMCBSIDEzIDAgUiBdCi9Db250 ZW50cyA3IDAgUgo + PgplbmRvYmoKNyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZQovTGVu Z3RoIDI3OCA + PgpzdHJlYW0KeJyFkb1Ow0AQhHs / xZRQsNm9 / 2tRAnJEA1wXpUBJSIOFIAWvz9ox FwMKyNLJmtuZb3evYWJmTM / 3fXNdYJIljhbRGnIxoWwxuzEQT4zyDKw uSlvuFpdrlCUWpfmd83Cr YvT4AGOJFbDWn21Tg00mYYsO1iTKJlXlBY / fnYaMH90uE0tAZNVSVrMPhnJyVfnL3NcGzkNtCG50

基於部分消息( ontent-Type: ... ),我猜測輸出緩沖區已滿並被自動刷新,僅在刷新后將輸出分配給$message

--PHP-mixed-<?php echo $random_hash; ?>之間還有兩個額外的空行--PHP-mixed-<?php echo $random_hash; ?> --PHP-mixed-<?php echo $random_hash; ?>Content-Type: application/octet-stream; ... Content-Type: application/octet-stream; ...可能會造成麻煩。

依靠輸出緩沖來構造字符串既容易出錯,也完全沒有必要。 這是更好的使用PHP的定界符來代替:

  $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()手冊頁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM