php - 带附件的 PHP 邮件 - 但文件为空
问题描述
制作一个包含作为附件的文本文件的 PHP 脚本。当我发送到 GMAIL 地址时它工作得很好,但是当我发送到另一个网络托管商的地址时,我可以看到文件已附加,但是当我打开它时,文件是空的(没有内容)..什么会导致这个?这是我使用的代码:
$filename = basename($dirfilename);
$body = "File is included in mail";
$path = "downloads/";
$file = $path.$filename;
$file_size = filesize($file);
$handle = fopen($file, "r");
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$name = basename($file);
$eol = PHP_EOL;
// Headers
$header = "From: ".$from_name." <".$from_mail.">".$eol;
$header .= "Reply-To: ".$replyto.$eol;
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"";
// Message
$message = "--".$uid.$eol;
$message .= "Content-Type: text/html; charset=UTF-8".$eol;
$message .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$message .= $body.$eol;
$message .= "--".$uid.$eol;
$message .= "Content-Type: text/plain; name=\"".$filename."\"".$eol;
$message .= "Content-Transfer-Encoding: base64".$eol;
$message .= "Content-Disposition: attachment;\r\n filename*=utf-8''" . rawurlencode($filename).$eol;
$message .= $content.$eol;
$message .= "--".$uid."--";
if (mail($mail_to, $subject, $message, $header))
{
echo "File sent";
} else {
echo "Fail";
}
解决方案
如果您查看原始电子邮件:
--_004_8b72e1a6b3f242208a89b3fa9240bcf3avode_
Content-Type: application/pdf; name="TA1_031_21204-2.pdf"
Content-Description: TA1_031_20181204-2.pdf
Content-Disposition: attachment; filename="TA1_031_21204-2.pdf";
size=230847; creation-date="Mon, 10 Dec 2018 11:33:32 GMT";
modification-date="Mon, 10 Dec 2018 09:44:35 GMT"
Content-Transfer-Encoding: base64
JVBERi0xLjUNJeLjz9MNCjI4MDYgMCBvYmoNPDwvTGluZWFyaXplZCAxL0wgMjMwODQ3L08gMjgw
OC9FIDMzOTcvTiAyOC9UIDIzMDE2NS9IIFsgNDY3IDM0NF0+Pg1lbmRvYmoNICAgICAgICAgICAg
DQoyODEyIDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0Zp
bHRlci9GbGF0ZURlY29kZS9JRFs8MDU4QTRCNjk5OEFDNzE0M0JCRUZEMDFENjJCOEE5ODg+PDZG
Q0FDM0U1RTAyOTNDNDU5QzE2MkQzMTczMjM5RTYyPl0vSW5kZXhbMjgwNiAxM10vSW5mbyAyODA1
顺便说一句,您正在撰写电子邮件
$message .= "Content-Disposition: attachment;\r\n filename*=utf-8''" . rawurlencode($filename).$eol;
您在文件内容前添加了不必要的 '\r\n' 并且没有 $eol。
尝试类似:
$message .= 'Content-Disposition: attachment; filename=". rawurlencode($filename).";'.$eol.$eol;
但这将由 PHPMailer 自动完成。
推荐阅读
- mysql - IF 条件在存储过程中不起作用
- shell - 如何将环境变量作为 Dockerfile 中 shell 脚本的参数传递?
- javascript - 我如何让机器人忽略某些角色// Discord.js
- android - android清单错误@xml/文件路径
- spring - 使用 JAVA 进行 Elasticsearch UpdateByQueryRequestBuilder 单元测试
- java - Android:自定义键盘可以记录用户输入的文本吗?
- docker - SSH 配置文件端口转发在 Docker 中未按预期工作(撰写)
- oracle - 为什么 oracle '使用 NCHAR_CS' 不能处理扩展的 ASCII 字符
- python - python中列的并行处理
- java - Android:如何将列表视图保存在根目录中