提问人:TerryMars 提问时间:9/8/2023 最后编辑:TerryMars 更新时间:9/9/2023 访问量:38
PHPMailer:在不上传文件的情况下添加附件
PHPMailer: Add attachment without uploading the file
问:
我正在使用 PHPMailer 6.8.1,我不想在通过电子邮件发送文件之前将文件(可以是图像、pdf 或 docx)上传到服务器。此调用不起作用:
$mail->addAttachment($_FILES['document']['tmp_name'], $_FILES['document']['name']);
我收到一个错误,说“无法访问文件”。
但是,如果我上传文件,然后将上传文件的完整路径提供给函数,那么它就像一个魅力,我会收到带有文件的邮件。move_uploaded_file()
addAttachment()
是否可以在不将文件保存在服务器上的情况下发送文件?
答:
1赞
Ron
9/8/2023
#1
如果您在 POST 中有一个值,则此时您已经将文件(至少)上传到服务器上的临时文件夹中。所以在这一点上你可以移动它..连接它,它就可以工作了......不出所料。$_FILES
通过电子邮件发送未附加的文件的唯一方法是(从公共端点)链接它,而不是“附加它”
评论
0赞
TerryMars
9/9/2023
谢谢你的回答。我很难在发送电子邮件时附加一个临时保存在服务器上的文件。这将简化我的代码,而无需移动文件,然后在发送邮件后将其删除。
0赞
Ron
9/9/2023
这是完全可行的,但从本质上讲,您仍然在上传它,然后附加它,发送它,然后删除它。但这偏离了原来的问题,因为你仍然上传它:)
1赞
Synchro
9/8/2023
#2
常规的PHP文件上传(即任何涉及的内容)将始终以磁盘上的文件的形式到达您的脚本。实际上没有任何方法可以绕过这种特定机制。$_FILES
但是,您可以以完全不同的方式处理上传,使用 Javascript 将上传作为一种流进行上传,这将作为 的属性到达您的脚本中。当然,这受到内存大小的限制。$_REQUEST
在 PHPMailer 中,您可以使用 addStringAttachment()
将内存中的字符串作为附件附加,其工作方式如下:
$mail->addStringAttachment($_REQUEST['file'], 'filename.pdf');
MIME 类型和编码是自动设置的。
评论
0赞
TerryMars
9/9/2023
谢谢你的回答。这应该使用适当的 JS 代码处理流转换,对吧?
0赞
Synchro
9/11/2023
是的,没错。不过,JS不是我的菜,所以我不打算试图解释如何做到这一点:)
评论