为了让生活变得困难,我正在努力的客户使用的是一个在PHP4.0上运行的非常大的旧系统,他们不想添加任何额外的库。
我正在尝试通过PHP发送一封包含附件和附带的text / html内容的电子邮件,但我无法通过一封电子邮件发送这两封电子邮件。
这会发送附件:
$headers = "Content-Type: text/csv;\r\n name=\"result.csv\"\r\n Content-Transfer-Encoding: base64\r\n Content-Disposition: attachment\r\n boundary=\"PHP-mixed-".$random_hash."\"";
$output = $attachment;
mail($emailTo, $emailSubject, $output, $headers);
这会发送text / html:
$headers = "Content-Type: text/html; charset='iso-8859-1'\r\n";
$output = $emailBody; // $emailBody contains the HTML code.
这会发送包含text / html及附件内容的附件:
$headers = "Content-Type: text/html; charset='iso-8859-1'\r\n".$emailBody."\r\n";
$headers = "Content-Type: text/csv;\r\n name=\"result.csv\"\r\n Content-Transfer-Encoding: base64\r\n Content-Disposition: attachment\r\n boundary=\"PHP-mixed-".$random_hash."\"";
$output = $attachment;
我需要知道的是如何在电子邮件正文中发送包含text / html的电子邮件,并为其添加附件。我确定我在这里错过了一些非常简单的东西!
提前致谢。
答案 0 :(得分:14)
好的,我终于搞砸了!供参考:
$emailBody .= "<html><body>Blah</body></html>";
$emailSubject = "Subject";
$emailCSV = "\"Col1\", \"Col2\"\r\n"; // etc.
$attachment = $emailCSV;
$boundary = md5(time());
$header = "From: Name <address@address.com>\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed;boundary=\"" . $boundary . "\"\r\n";
$output = "--".$boundary."\r\n";
$output .= "Content-Type: text/csv; name=\"result.csv\";\r\n";
$output .= "Content-Disposition: attachment;\r\n\r\n";
$output .= $attachment."\r\n\r\n";
$output .= "--".$boundary."\r\n";
$output .= "Content-type: text/html; charset=\"utf-8\"\r\n";
$output .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$output .= $emailBody."\r\n\r\n";
$output .= "--".$boundary."--\r\n\r\n";
mail($emailTo, $emailSubject, $output, $header);
答案 1 :(得分:2)
尝试使用PHP mail()
函数发送附件是一种令人沮丧的练习;简而言之,这不值得努力。即使在当前的PHP版本中,我也永远不会曾建议甚至尝试它。我总是使用像phpMailer这样的库。
我知道你说你不能使用第三方图书馆,但在这种情况下,你会疯狂不使用它。我们谈论的是一天工作和一年之间的差异;这是一笔大买卖。 PHP mail()
函数非常难以使用,并且尝试使用它来编写代码以从头开始发送附件将使您留下脆弱的,错误的代码,在所有情况下都需要永远可靠地工作。这就是为什么像phpMailer这样的库存在。
所以我建议不管他们想要你做什么,你都应该下载phpMailer - PHP4版本仍然可用 - 看看它是否适合你。 (下载页面甚至还有真正的旧版本,所以你应该能够及时找到适合PHP 4.0的版本。它不应该花费你任何时间得到一个简单的演示并运行它。证明它有效;这可能会软化他们对第三方图书馆的立场。
(如果它没有软化他们的立场,那么这个项目在很长一段时间内完成的希望并不大。在这种情况下,你能做的最好的事情就是在你的报价中添加一些额外的零。项目价格并咬紧牙关)