我有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>';
?>
答案 0 :(得分:2)
答案 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)运行输出并不会引发除上述之外的任何特定内容。