2011-06-03 126 views
0

我试图发送带有多个附件的电子邮件。PHP电子邮件附件

这是一个例子:
$uid = md5(uniqid(time()));
$header = "From: Test <[email protected]>\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
$header .= "--" . $uid . "\r\n";
$header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= "Test Email\r\n\r\n";
$header .= "--" . $uid . "\r\n";
$header .= "Content-Type: text/x-csv; name=\"1.csv\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"1.csv\"\r\n\r\n";
$header .= $csvfile1 . "\r\n\r\n";
$header .= "--" . $uid . "--";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= "Test Email\r\n\r\n";
$header .= "--" . $uid . "\r\n";
$header .= "Content-Type: text/x-csv; name=\"2.csv\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"2.csv\"\r\n\r\n";
$header .= $csvfile2 . "\r\n\r\n";
$header .= "--" . $uid . "--";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= "Test Email\r\n\r\n";
$header .= "--" . $uid . "\r\n";
$header .= "Content-Type: text/x-csv; name=\"3.csv\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"3.csv\"\r\n\r\n";
$header .= $csvfile3 . "\r\n\r\n";
$header .= "--" . $uid . "--";

我也得到了一些奇怪的字符在CSV文件的最后,是这样的:
w־סֽד·ֽסמ׳fק־ןo,
‰z{­©}ךֺxn+¢”j״¶'Eט²¶*Jײֻrֵz°¶+·$j״¶'5ל†·u+¶+‰ֻ{²װj״¶',

可能是什么问题呢?

谢谢。

+3

如果您避免重新发明轮子并使用类似[phpmailer](http://sourceforge.net/projects/phpmailer)的功能,您可能会发现您的生活更轻松。 – 2011-06-03 12:10:53

+0

您是否尝试输出'$ header'的内容?调试起来会更容易,而且您会发现在某些地方还有一些额外的新线条,而其他地方有些则缺失。 – 2011-06-03 12:11:05

回答

1

的一些问题:

  • 应该有一个边界之前只有一个新的生产线。你有2个。
  • 你应该只有最后一个边界后有2个破折号。
  • 有2个地方需要Content-Transfer-Encoding之前有一个新的行。
  • 可能忘记了base64编码你的文件。
  • 你的代码看起来像一些可怕的复制粘贴的结果。
  • 也许其他。

正如El Yobo在评论中所说的,也许你应该尝试使用这个库。