在 PHP 中使用 MIME 的电子邮件文件附件

Posted

技术标签:

【中文标题】在 PHP 中使用 MIME 的电子邮件文件附件【英文标题】:Email file attachments using MIME in PHP 【发布时间】:2013-07-22 18:40:14 【问题描述】:

我正在尝试使用 php 发送带有附件的电子邮件。 我按照http://webcheatsheet.com/PHP/send_email_text_html_attachment.php#attachment 的优秀教程进行了以下更改:

--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: application/txt; name="<?php echo $_POST[log_file]?>"  
Content-Transfer-Encoding: base64  
Content-Disposition: attachment 

原始脚本或我修改后的脚本似乎都没有将任何文件附加到我的电子邮件中。 任何人都知道我做错了什么。

注意:我附加到表单的文件都是文本文件(各种文件扩展名,例如 .log、.txt 等)。


好的,我现在已经证明我认为这个脚本的 MIME 编码部分不起作用。 我在上传目录中放置了一个文本文件并将脚本更改为:

--PHP-mixed-<?php echo $random_hash; ?>   
Content-Type: text/plain; name="<?php echo $_SERVER['DOCUMENT_ROOT']. '/upload/test.txt' ?>" 
Content-Transfer-Encoding: base64  
Content-Disposition: attachment 

查看收据时的电子邮件来源时,我在 Content-Type 下看到完整路径和文档名称:text/plain; name=,但没有附件,编码或其他。

有谁知道我是如何让它工作的?

我尝试了以下方法:

--PHP-mixed-<?php echo $random_hash; ?>   
Content-Type: text/plain; name="<?php echo $_FILES['file']['name']; ?>"
Content-Transfer-Encoding: base64  
Content-Disposition: attachment

这显示了电子邮件源中的文件名,但没有附件,有趣的是:

--PHP-mixed-<?php echo $random_hash; ?>   
Content-Type: text/plain; name="<?php echo $_FILES['file']['temp_name']; ?>"
Content-Transfer-Encoding: base64  
Content-Disposition: attachment 

返回一个空文件名并且仍然不是附件,我只能假设在我执行此操作时临时文件已被删除?

【问题讨论】:

看看这是否有帮助:***.com/questions/6275070/… 使用:name="" 是否有效,或者我必须将文件存储在临时位置的某个位置并在之前参考该位置进行检索发送? 它看起来有效。您只需要确保其中有有效值 ($_POST['log_file']) 更改为 @Maximus2012 谢谢你,但它没有任何区别。查看收到的电子邮件源,我看到以下内容:--PHP-mixed-edc3b09aea5aa11614b07dadbf00098f Content-Type: application/txt; name="TEST.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment 它似乎是从我的表单中找到文件名,即 $_POST[log_file] 但它没有附加/编码文件? 【参考方案1】:

OK 最终通过将临时文件移动到我服务器上的另一个位置,然后对该文件进行编码来完成这项工作。

不知道为什么我不能在不保存临时文件的情况下对其进行编码,但至少我现在可以正常工作了。

感谢所有花时间回复此问题的人,您对我的帮助很大。

【讨论】:

以上是关于在 PHP 中使用 MIME 的电子邮件文件附件的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 的邮件正文中的 MIME 信息

使用 S/MIME (PHP) 发送带有附件的电子邮件

PHP不发送带有附件的邮件

带有附件问题的 PHP Pear Mime 邮件

带有附件的梨邮件在 $mime = new Mail_mime 处失败

如何在 Mime php 中创建和附加带有电子邮件的 excel 文件