【问题标题】:PHP mail attachment is blankPHP 邮件附件为空白
【发布时间】:2011-01-04 09:38:58
【问题描述】:

我收到了接受附件并发送附件的表格,但如果是文档,则为空白:

$fileatt = $_FILES['file']['tmp_name']; $fileattType = $_FILES['file']['type']; $fileattName = $_FILES['file']['name']; $file = fopen($fileatt,'rb'); $data = fread($file,filesize($fileatt)); fclose($文件); $semi_rand = md5(时间()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $headers = "来自:$email"; $headers .= "\nMIME-Version: 1.0\n" 。 “内容类型:多部分/混合;\n”。 " 边界=\"{$mime_boundary}\""; $content = "用户信息"; $content = "这是一条 MIME 格式的多部分消息。\n\n" . "--{$mime_boundary}\n" 。 “内容类型:文本/纯文本;字符集=\”iso-8859-1\“\n”。 “内容传输编码:7bit\n\n”。 $内容。 "\n\n"; $data = chunk_split(base64_encode($data)); $content .= "--{$mime_boundary}\n" 。 “内容类型:{$fileattType};\n”。 " name=\"{$fileattName}\"\n" 。 “内容处置:附件;\n”。 " 文件名=\"{$fileattName}\"\n" 。 “内容传输编码:base64\n\n”。 $数据。 “\n\n”。 "--{$mime_boundary}--\n"; $send = mail("user@provider.com", "Form", $content, $headers); 如果($发送) header('位置:成功页面'); 别的 header('位置:失败页面');

电子邮件发送正确,附件名称、文件类型和文件大小正确。打开的时候是空的。

我从 sitepoint 获得了教程:http://articles.sitep... ... mail-php/5

我测试了他们提供的文件,同样的事情发生了。任何想法都会很棒。谢谢大家!

【问题讨论】:

  • 这不是PHPBB.....不要使用[code]标签。
  • 我在异地服务器上尝试了我的代码。我保持文件完全一样,我什至留下了 ini_set 调用: ini_set("SMTP","smtp.server.com"); ini_set("smtp_port","25"); ini_set("sendmail_from","$email");让我相信问题出在 php 所在的 Web 服务器上。有什么想法吗?

标签: php attachment


【解决方案1】:

【讨论】:

  • 问题是,php 似乎正在剥离标题。我将处理发送带有附件的电子邮件的 php 放在另一台服务器上,它运行良好。
【解决方案2】:

欢迎来到 SO。

这不是您问题的直接答案,但我建议您使用现成的邮件类,如PHPMailer。它具有已经内置的所有怪癖、编码和附加功能,这比手动操作更不容易出错。如果你想这样做,也许 PHPMailer 上的this collection of tutorial links 会帮助你开始。

【讨论】:

  • 我在其他有关邮件处理的论坛上多次看到此建议。我去看看。
【解决方案3】:

也许您可以使用\r\n 而不是那些\n\n

【讨论】:

  • +1 第一个直接答案。这还不够,但这是一个很好的起点,您必须使用“\r\n”而不是“\n\n”。
【解决方案4】:

我会强烈建议使用预先存在的工具来发送电子邮件,例如 Swift。它会为您处理很多注意事项,并且非常易于使用。

【讨论】:

    【解决方案5】:

    为什么不使用像样的库来发送电子邮件?

    我强烈建议您开始使用库来发送电子邮件,它简化了编写电子邮件的过程并使代码更加短暂。

    我可以为 Swiftmailer 担保,这是一个积极开发的库,具有出色的功能。

    附件、内嵌图像和多个收件人等特别复杂的任务可以轻松实现。

    【讨论】:

    • Swiftmailer 的网站包含了既实用又深入的优秀文档。该库的快速参考向您展示了如何创建消息:swiftmailer.org/docs/message-quickref 祝您好运!
    • 我是否需要先将附件上传到我的网络服务器才能发送?
    • 您希望发送的任何附件都应该在您的 PHP 环境中可用,即您的网络服务器上的可读目录。
    • “为什么不使用像样的库来发送电子邮件?”可能是因为像您建议的那样体面的库是由 141 个 php 文件组成的,当一个简短且编写良好的简单脚本可用于发送带有一个小附件的简单邮件时。
    • @Marco Demaio:我猜你并不特别喜欢使用库。对我来说,当有完美的 FREE 库存在时,人们试图重新发明功能似乎很奇怪。尤其是在团队工作的情况下,图书馆不仅提供高质量的工具,而且还充当团队沟通的通用语法和词汇......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多