Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP mail()附件已损坏_Php_Email - Fatal编程技术网

PHP mail()附件已损坏

PHP mail()附件已损坏,php,email,Php,Email,我一直在努力尝试使用PHP发送带有附件的电子邮件。它以前可以工作,但消息正文被打乱了。现在我已经让消息体工作了,但是附件损坏了。我以前对消息体使用base64编码,但现在使用7bit。谁能告诉我我做错了什么 请不要告诉我,我应该使用一个预先制作的类来做这件事。我试过几次,但都失败了。如果我不能克服这些问题,我将永远无法学会如何正确地去做。谢谢 //define the receiver of the email $to = 'a@something.co.uk'; //define the su

我一直在努力尝试使用PHP发送带有附件的电子邮件。它以前可以工作,但消息正文被打乱了。现在我已经让消息体工作了,但是附件损坏了。我以前对消息体使用base64编码,但现在使用7bit。谁能告诉我我做错了什么

请不要告诉我,我应该使用一个预先制作的类来做这件事。我试过几次,但都失败了。如果我不能克服这些问题,我将永远无法学会如何正确地去做。谢谢

//define the receiver of the email
$to = 'a@something.co.uk';
//define the subject of the email
$subject = 'Your Disneyland Paris entry';
//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \n
$mime_boundary = "<<<--==+X[".md5(time())."]";

$path = $_SERVER['DOCUMENT_ROOT'].'/two/php/';
$fileContent =  chunk_split(base64_encode(file_get_contents($path.'CTF_brochure.pdf')));


$headers .= "From: info@blah.org.uk <info@blah.org.uk>"."\n";

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

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

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

$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: 7bit\n";
$message .= "\n";
$message .= "messagebody \n";
$message .= "--".$mime_boundary."" . "\n";

$message .= "Content-Type: application/octet-stream;\n";
$message .= " name=\"CTF-brochure.pdf\"" . "\n";
$message .= "Content-Transfer-Encoding: 7bit \n";
$message .= "Content-Disposition: attachment;\n";
$message .= " filename=\"CTF_brochure.pdf\"\n";
$message .= "\n";
$message .= $fileContent;
$message .= "\n";
$message .= "--".$mime_boundary."--\n";

//send the email
$mail_sent = mail($to, $subject, $message, $headers);
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";
//定义电子邮件的收件人
$to$a@something.co.uk';
//定义电子邮件的主题
$subject=‘您的巴黎迪士尼乐园入场券’;
//创建一个边界字符串。它必须是独一无二的
//所以我们使用MD5算法来生成一个随机散列
$random_hash=md5(日期('r',时间());
//定义我们想要传递的标题。请注意,它们用分隔符分隔\n

$mime_边界=“我可能错了,但我相信您必须以某种方式对PDF进行编码,因为PDF文件的内容超出了范围,所以它无法工作。为什么不在PDF中使用base64?

我可能错了,但我相信您必须以某种方式对PDF进行编码,因为PDF文件的内容超出了范围,因此它无法工作。为什么不在PDF中使用base64?

如果你想发送复杂的电子邮件,我建议你看看。

如果你想发送复杂的电子邮件,我建议你看看。

我知道你说过预建类,但人们这样做是有原因的——为什么要重新发明轮子?我在项目中使用SwiftMailer——这再简单不过了。有关如何创建邮件、添加附件和发送邮件的13行(包括一些空白行),请参阅


至于你的实际问题的解决方案,请投票给Josh的答案——我想再改变一下编码,看看你进展如何。你有没有试过获取一封附件有效的示例电子邮件,并检查原始数据?

我知道你说过预构建类,但人们这样做是有原因的——为什么要重新发明轮子?我在项目中使用SwiftMailer——这再简单不过了。有关如何创建邮件、添加附件和发送邮件的13行(包括一些空白行),请参阅


至于你的实际问题的解决方案,请投票给Josh的答案——我想再改变一下编码,看看你进展如何。您是否尝试过获取附件有效的示例电子邮件,并检查原始数据?

您希望自己这样做是可以理解的,但除了确切了解如何正确编码邮件外,您不会学到太多…)如果我想学点什么,我会继续我项目中有趣的部分,而不必重新发明轮子……谢谢你的建议。这是项目中唯一需要整理的部分。:)你希望自己做这件事是可以理解的,但除了准确地理解如何正确编码邮件外,你不会学到很多东西……:)如果我想学点什么,我会继续我项目中有趣的部分,而不必重新发明轮子……谢谢你的建议。这是项目中唯一需要整理的部分。:)我确实为此尝试了swiftmailer,但它不起作用。它安装的服务器非常Twitchhy,我确实为此尝试了swiftmailer,但它拒绝工作。设置它的服务器非常混乱,您具体更改了哪些代码?您是尝试对整个邮件还是仅对附件进行base64编码?更改后MIME头是什么样子的?我刚刚更改了附件。如果我将整个邮件设置为base64,我会得到奇怪的字符作为邮件正文,那么您在输出附件之前是否执行了
内容传输编码:base64\n
?如果是这样,我不确定出了什么问题。。。看起来其他一切都是对的。你能发布你完整的新代码以便社区测试吗?你具体更改了哪些代码?您是尝试对整个邮件还是仅对附件进行base64编码?更改后MIME头是什么样子的?我刚刚更改了附件。如果我将整个邮件设置为base64,我会得到奇怪的字符作为邮件正文,那么您在输出附件之前是否执行了
内容传输编码:base64\n
?如果是这样,我不确定出了什么问题。。。看起来其他一切都是对的。你能发布完整的新代码,让社区可以测试它吗?