以html格式发送带附件的电子邮件

时间:2013-12-13 08:53:05

标签: php html html-table html-email email-attachments

我有PHP代码发送带附件的电子邮件,但我想要的是将所有数据,如全名,联系电话等放入表中。我尝试使用<table>,但电子邮件仍然是纯文本。有人可以帮我怎么做吗?

这是我的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 = 'peace@gmail.com'; 
 $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>'; 
?>

2 个答案:

答案 0 :(得分:2)

对于使用PHP的复杂电子邮件,请检查PHPMailer类。

使用PHPMailer中的函数发送复杂的电子邮件(例如HTML格式)要容易得多。

易于安装和使用。查看链接页面底部的示例。

答案 1 :(得分:0)

首先,如果可以的话,选择一个像:

这样的图书馆

以上所有内容都有一点学习曲线,但从长远来看,它们会对你有很大的帮助。正确获取邮件标题和边界以便垃圾邮件过滤器不会收到邮件是一件非常痛苦的事情 - 其他人已经为您解决了这些问题。

但是,如果您坚持手动构建邮件。

构建标题时,如果将每个标题拆分为自己的行并确保以\r\n

结尾,则会更容易阅读

E.g。

$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。

charset不应该被引用。

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

应该是

charset=iso-8859-1

这些可能是你的问题。

通过Message Lint(http://www.apps.ietf.org/content/message-lint)运行输出并不会引发除上述之外的任何特定内容。