Php mail()中的电子邮件附件有问题

Php mail()中的电子邮件附件有问题,php,email,Php,Email,我正在尝试将服务器上的图像作为附件发送电子邮件。为了完成这个任务,我使用了下面的PHP脚本,它从我的服务器上获取了一个名为“screenshots”的目录中的JPG(称为“PHP.JPG”),并将其作为附件发送 <?php $path = "screenshots/php.jpg"; $fp = fopen($path, 'r'); do //we loop until there is no data left { $data = fread($fp, 8192);

我正在尝试将服务器上的图像作为附件发送电子邮件。为了完成这个任务,我使用了下面的PHP脚本,它从我的服务器上获取了一个名为“screenshots”的目录中的JPG(称为“PHP.JPG”),并将其作为附件发送

<?php

$path = "screenshots/php.jpg";
$fp = fopen($path, 'r');
do //we loop until there is no data left
{
        $data = fread($fp, 8192);
        if (strlen($data) == 0) break;
        $content .= $data;
      } while (true);
$content_encode = chunk_split(base64_encode($content));


$mime_boundary = "<<<--==+X[".md5(time())."]";

$headers .= "From: Automatic <an.e.mail@domain.net>\r\n"; 
$headers .= "To: SomeName <me@gmail.com>\r\n"; 

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;\r\n";
$headers .= " boundary=\"".$mime_boundary."\"";

$message .= "This is a multi-part message in MIME format.\r\n";
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "\r\n";
$message .= "Email content and what not: \r\n";
$message .= "This is the file you asked for! \r\n";
$message .= "--".$mime_boundary."\r\n";

$message .= "Content-Type: image/jpeg;\r\n";
$message .= " name=\"php.jpg\"\r\n";
$message .= "Content-Transfer-Encoding: quoted-printable\r\n";
$message .= "Content-Disposition: attachment;\r\n";
$message .= " filename=\"php.jpg\"\r\n";
$message .= "\r\n";
$message .= $content_encode;
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

$ok = mail("me@gmail.com", "file by email", $message, $headers);

我可以看出您没有看到图像的一个可能原因。(可能还有更多的(!)

尝试更改:

$message .= "--".$mime_boundary."\r\n"; 

关于邮件呼叫前的最后一行(即“尾声”边界)。

三件事跳出:

第一个是变量
$content
$message
$headers
的第一个附加没有显式地设置新值。也就是说,为什么不呢

$headers = "From: Automatic <an.e.mail@domain.net>\r\n";
$headers=“From:Automatic\r\n”;
而不是像你这样:

$headers .= "From: Automatic <an.e.mail@domain.net>\r\n";
$headers.=“From:Automatic\r\n”;
这就消除了一些剩余的东西挂在变量中的可能性

第二个问题是有
\r\n
而不是普通的
\n
,它应该可以在每个系统上运行,即使是Windows。但我怀疑这是个问题


第三,关闭的mime边界与打开的mime边界不同。

对于将来遇到这篇文章的任何人来说,问题来自“内容传输编码”,它应该设置为base64

$message .= "Content-Transfer-Encoding: quoted-printable\r\n";
变成:

$message .= "Content-Transfer-Encoding: base64\r\n";

到目前为止,我尝试了wallyk和Martinar的建议(谢谢大家!),但没有成功。我想知道邮件功能是否正常,只是我的fopen循环没有生成正确的图像。任何人如能提供任何其他建议,将不胜感激。谢谢大家!根据RFC 822,\r\n是结束标头字段的正确方法。
$message .= "Content-Transfer-Encoding: base64\r\n";