PHP电子邮件附件pdf和docx文件不';我不能被正确地发送

PHP电子邮件附件pdf和docx文件不';我不能被正确地发送,php,email,pdf,email-attachments,docx,Php,Email,Pdf,Email Attachments,Docx,好的,虽然我仍然知道更好的解决方案,但我正在使用手动PHP脚本发送带有附件的电子邮件。我唯一的问题是,一些附件(PDF、DOCX)在收到电子邮件时是空白的。 我注意到,当我检查$data变量(文档文本存储的位置)时,在扩展名为pdf或docx的文件中,有一些额外的字符不是文件中消息的一部分。在DOCX文件中有一些额外的字符,而在PDF中,内容根本不显示,但显示了一些随机的垃圾(编码?)。理论上应该有一种附加PDF和Docx文件的方法。 不知道如何解决这个问题。非常感谢您的帮助!我不想使用PHPM

好的,虽然我仍然知道更好的解决方案,但我正在使用手动PHP脚本发送带有附件的电子邮件。我唯一的问题是,一些附件(PDF、DOCX)在收到电子邮件时是空白的。 我注意到,当我检查
$data
变量(文档文本存储的位置)时,在扩展名为pdf或docx的文件中,有一些额外的字符不是文件中消息的一部分。在DOCX文件中有一些额外的字符,而在PDF中,内容根本不显示,但显示了一些随机的垃圾(编码?)。理论上应该有一种附加PDF和Docx文件的方法。 不知道如何解决这个问题。非常感谢您的帮助!我不想使用PHPMailer或SwiftMailer

这是我的密码:

$attachment = $_FILES['uploaded']['tmp_name'];
$att_type = $_FILES['uploaded']['type'];
$att_name = $_FILES['uploaded']['name'];

if (is_uploaded_file($attachment)) {
    // Read the file to be attached ('rb' = read binary)
    $file = fopen($attachment, 'rb');
    $data = fread($file, filesize($attachment));
    fclose($file);

    // Generate boundary string
    $semi_rand     = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

    // Add headers for file attachment
    $from .= "MIME-Version: 1.0\r\n";
    $from .= "Content-Type: multipart/mixed; boundary=\"{$mime_boundary}\"\r\n\r\n";

    // Message
    $message = "This is a multi-part message in MIME format.\r\n";
    $message .= "--{$mime_boundary}\r\n";
    $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n\r\n";
    $message .= $msg . "\r\n\r\n";

    $data = chunk_split(base64_encode($data));

    // Attachment
    $message .= "\r\n--{$mime_boundary}\r\n";
    $message .= "Content-Type: {$att_type}; name=\"{$att_name}\"\r\n";
    $message .= "Content-Transfer-Encoding: base64\r\n";
    $message .= "Content-Disposition: attachment; filename=\"{$att_name}\"\r\n\r\n";
    $message .= $data . "\r\n";
    $message .= "--{$mime_boundary}--\r\n";
} else {
    $message = $msg;
}

// Send message
$success = mail($to, $subject, $message, $from);
有没有办法附加我丢失的PDF和docx文件?也许这和编码有关?或者我必须以不同的方式读取文件(如果这是唯一的方法)。不确定。有什么建议吗

编辑:.pdf添加编码后,文件现在可以工作了。然而,.docx文件仍然是空白的。所以关于docx的问题仍然存在!我用我所做的更改编辑了上面的代码


编辑2:.docx文件工作正常!我用来测试的文件是不正确的,正常的docx文件可以正常运行!所以问题解决了。没有必要求助于PHPMailer,尽管我确实尝试过,而且效果很好。我将立即切换到PHPMailer,或者在需要向发送机制添加更多功能时使用它。否则,这个小脚本就足以处理带有1个附件的简单电子邮件。

使用它,它会更简单,并且经过测试:


两个文件现在都可以正常工作。PDF文件必须有编码(base64),在我添加后,它们才有效。Docx文件总是有效的,但我最初使用了错误的文件进行测试。这就是问题的根源。所以问题解决了。没有必要求助于PHPMailer,但是我也尝试过,而且效果也很好。

注意:对于随机值,只需使用
uniqid()
。天哪,它刚刚起作用!!事实上,为了使PDF正确显示,我必须使用64位编码。测试docx。。。。不!!!好吧,那个还是不起作用。。。皱眉我明天再处理。我只想把这个放在这里,因为这非常有帮助(这是我见过的mime格式的最好解释)-我用PHPMailer写的这篇文章和docx有同样的问题,我怀疑我的docx文件是不合法的。我现在要测试一下。