2013-12-13 79 views
1

我有PHP代碼發送帶附件的電子郵件,但我想要的是將所有數據,如全名,聯繫電話等等放入表中。我嘗試使用<table>,但電子郵件仍然是純文本。有人可以幫我怎麼做嗎?以html格式發送電子郵件附件

這是我的PHP代碼:

<?php 
$cname = $_POST['Name']; 
$cnumber = $_POST['Tel']; 
$cemail = $_POST['emailadd']; 
$cmess = $_POST['contactmess']; 
$index = 'index.php'; 

move_uploaded_file($_FILES["attachment"]["tmp_name"] , "/files/upload/" . $_FILES["attachment"]["name"]); 

$to = '[email protected]'; 
$subject = 'Careers Inquiry'; 
$random_hash = md5(date('r', time())); 
$headers = "From: ". $cemail ."\r\nReply-To:". $cemail; 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
$headers .= "Content-Type: text/html; charset='iso-8859-1'"; 
$attachment = chunk_split(base64_encode(file_get_contents("/files/upload/" .$_FILES["attachment"]["name"]))); 

ob_start(); 
?> 
--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/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

--PHP-alt-`<?php echo $random_hash; ?>` 
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

<html> 
<body> 
    <table> 
     <tr><td>Name: </td><td><?php echo $cname; ?></td></tr> 
     <tr><td>Contact Number: </td><td><?php echo $cnumber; ?></td></tr> 
     <tr><td>Email Address: </td><td><?php echo $cemail; ?></td></tr> 
     <tr><td>Message: </td><td><?php echo $cmess; ?></td></tr> 
    </table> 
</body> 
</html> 

--PHP-alt-`<?php echo $random_hash; ?>`-- 

--PHP-mixed-`<?php echo $random_hash; ?>` 
Content-Type: application/octet-stream; name="`<?php echo $_FILES["attachment"]["name"];?>`" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

`<?php echo $attachment; ?>` 
--PHP-mixed-`<?php echo $random_hash; ?>`-- 

<?php 
$message = ob_get_clean(); 
$mail_sent = @mail($to, $subject, $message, $headers); 
unlink('/files/upload/' . $_FILES["attachment"]["name"]); 
echo $mail_sent ? header('Location: '. $index): '<script type="text/javascript">  alert("Sorry, service temporary unavailable."); </script>'; 
?> 
+0

[不要重新發明輪子](https://github.com/Synchro/PHPMailer)。 –

回答

2

對於PHP複雜收發郵件檢出PHPMailer類。

使用PHPMailer中的函數發送複雜的電子郵件(例如HTML格式)要容易得多。

它很容易安裝和使用。查看鏈接頁面底部的示例。

0

一起來,如果可以的話,拿起就像一個圖書館:

以上所有都有點學習曲線的開始,但從長遠來看,他們將極大地幫助你。正確地獲取郵件標題和邊界以便垃圾郵件過濾器不會收到郵件是一件非常痛苦的事情 - 而其他人已經爲您解決了這些問題。

但是,如果你堅持手動構建郵件。

當構建你的頭它會更容易閱讀,如果你每一個分離到其自己的行,並確保你有\r\n

例如結束

$headers = "From: $cemail\r\n"; 
$headers .= "Reply-To: $cemail\r\n"; 
$headers .= "Content-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"\r\n"; 

看起來你可能已經錯過了最後兩個標題的幾個\r\n

此外,您複製了您的Content-Type標題。第二個是不必要的,因爲您無論如何都要在每個邊界上指定Content-Type。

字符集不應被引用。

I.E.

charset='iso-8859-1'charset="iso-8859-1"

應該

charset=iso-8859-1

有可能那些是你的問題。

通過消息林特(http://www.apps.ietf.org/content/message-lint)運行輸出不會引發除上述以外的任何特殊情況。