【问题标题】:Sending Email with attachment in html format以html格式发送带有附件的电子邮件
【发布时间】:2017-06-23 18:01:25
【问题描述】:

我有发送带有附件的电子邮件的 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>'; 
?>

【问题讨论】:

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


【解决方案1】:

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

使用 PHPMailer 中的功能可以更轻松地发送复杂的电子邮件(例如 HTML 格式)。

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

【讨论】:

    【解决方案2】:

    首先,如果可以,请选择一个图书馆,例如:

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

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

    在构建标题时,如果您将每个标题拆分到单独的行并确保以\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

    这可能是你的问题。

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

    【讨论】:

      猜你喜欢
      • 2016-01-05
      • 2013-11-26
      • 2010-11-26
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多