Php 发送带有附件的电子邮件(问题是文件大小为0k)

Php 发送带有附件的电子邮件(问题是文件大小为0k),php,excel,email,Php,Excel,Email,亲爱的朋友们:, 我的文件附件有问题,我正在为我的项目使用带有附件的电子邮件功能,我在该邮件中附加了file.xls,但在邮件中我无法获取该文件的值,它显示为0k。 但该文件在本地有一些数据,但它不工作,而运行该电子邮件功能,附件有0k大小,谁能帮我。。。 我的代码在下面 $filename = "test.xls"; $path = $_SERVER['DOCUMENT_ROOT']."/path/to/Documents/"; $file = $path.$file

亲爱的朋友们:, 我的文件附件有问题,我正在为我的项目使用带有附件的电子邮件功能,我在该邮件中附加了file.xls,但在邮件中我无法获取该文件的值,它显示为0k。 但该文件在本地有一些数据,但它不工作,而运行该电子邮件功能,附件有0k大小,谁能帮我。。。 我的代码在下面

    $filename = "test.xls";
    $path = $_SERVER['DOCUMENT_ROOT']."/path/to/Documents/"; 
    $file = $path.$filename;

    $to = "example@test.com";
    $subject = 'Repairs List Report';

    $message = "Please find the attachment file for repairs list of Last week...";  //strip_tags($_POST['message']);
    $attachment = chunk_split(base64_encode(file_get_contents($file)));
    //$filename = $_FILES['file']['name'];

    $boundary =md5(date('r', time())); 

    $headers = "From: test@example.com\r\nReply-To: example@test.com";
    $headers .= "MIME-Version: 1.0";

    $message="This is a multi-part message in MIME format. --_1_$boundary Content-Type: multipart/alternative; boundary=\"_2_$boundary\" --_2_$boundary Content-Type: text/plain; charset=\"iso-8859-1\" Content-Transfer-Encoding: 7bit $message --_2_$boundary-- --_1_$boundary Content-Type: application/vnd.ms-excel; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment $attachment --_1_$boundary--";
    mail($to, $subject, $message, $headers);

首先要做的是输出$message,看看它是否确实生成了一封有效的MIME格式的电子邮件。我们不能确定,只要看看你的代码。。但有一件事:

$headers = "From: test@example.com\r\nReply-To: example@test.com";
$headers.= "MIME-Version: 1.0";
应该是:

$headers = "From: test@example.com\r\nReply-To: example@test.com\r\n";
$headers.= "MIME-Version: 1.0";
你忘了把所有的换行符都放在你的留言里了:

$body ="This is a multi-part message in MIME format. (preamble)\r\n";
$body.="--_1_$boundary\r\n";
$body.="Content-Type: multipart/alternative; boundary=\"_2_$boundary\"\r\n";
$body.="--_2_$boundary\r\n";
$body.="Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$body.="Content-Transfer-Encoding: 7bit\r\n";
$body.="\r\n";
$body.="$message\r\n";
$body.="--_2_$boundary--\r\n";
$body.="--_1_$boundary\r\n";
$body.="Content-Type: application/vnd.ms-excel; name=\"$filename\"\r\n";
$body.="Content-Transfer-Encoding: base64\r\n";
$body.="Content-Disposition: attachment\r\n";
$body.="\r\n";
$body.="$attachment\r\n";
$body.="--_1_$boundary--";

mail($to, $subject, $body, $headers);

我不确定我是否错过了什么,但你可以从这个开始。最后,您可以使用我制作的一个类,它简化了mime电子邮件的制作。

您能告诉我们您正在使用的代码吗?另外,您的意思是“收到的附件为0 kb”吗?我不太清楚,请详细说明你的问题。任何一种情况都可能发生。您收到或未收到您的电子邮件文件。这种情况很奇怪。请发布您的代码。请尝试更改
$file
的权限。PHP能读吗?