繁体   English   中英

如何使用 PHPMailer 向 Email 添加多个附件

[英]How to Add Multiple Attachments to an Email Using PHPMailer

我一次只能将一个 pdf 连接到 email。 有人可以帮我弄清楚如何使用 PHPMailer 向 email 添加多个附件吗? 我最初尝试只使用多个相互添加的附件语句。

$file1Name = $_FILES['myfile1']['name'];
$file1Path = $_FILES['myfile1']['tmp_name'];
$file2Name = $_FILES['myfile2']['name'];
$file2Path = $_FILES['myfile2']['tmp_name'];
$file3Name = $_FILES['myfile3']['name'];
$file3Path = $_FILES['myfile3']['tmp_name'];
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = '587';
$mail->SMTPAuth = true;
$mail->Username = 'email@gmail.com';
$mail->Password = 'password';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
// . . .
$mail->Body = $mail_body;
$mail->addAttachment($file1Path, $file1Name);
$mail->addAttachment($file2Path, $file2Name);
$mail->addAttachment($file3Path, $file3Name);
$mail->Send();

这没有用。 在网上查看后,我发现您通常只能将多个附件添加到 email 当从允许一次多次提交的表单输入接收附件时https://phppot.com/php/send-email-with-多个附件-使用-php/ 这些文件作为一个数组存储在一起,并通过遍历数组来附加。 对我来说重要的是不要从一个表单输入中检索多个文件,所以我不喜欢这个选项。 我认为如果我自己将文件信息存储在 arrays 中可能会有所帮助,但这也不起作用。

$fileNameArray = array($file1Name, $file2Name, $file3Name);
$filePathArray = array($file1Path, $file2Path, file3Path);
// . . .
for($i = 0; $i < 3; $i++) {
$mail->addAttachment($fileDataArray[$i], $fileNameArray[$i]);
}
$mail->Send();

接下来,我尝试了一个解决方案,我尝试发送多封电子邮件,每封都回复前一封电子邮件,其中包含一个附件。 这也没有奏效。 在第一个 email 之后,没有包含其他附件。

$fileNameArray = array($file1Name, $file2Name, $file3Name);
$filePathArray = array($file1Path, $file2Path, file3Path);
for($i = 0; $i < 3; $i++) {
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->Host = 'smtp.gmail.com'; 
$mail->Port = '587';        
$mail->SMTPAuth = true;       
$mail->Username = 'email@gmail.com';     
$mail->Password = 'password';     
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;     
//  . . .
$mail->Body = $mail_body;
 
$mail->addAttachment($filePathArray[$i], $fileNameArray[$i]);   

我还查看了一些涉及编辑 PHPMailer 代码的修复程序。 这两个修复都与内容 ID 有关。 我要么找不到修复引用的代码,要么似乎在发布修复后,PHPMailer 已更新并实施了修复。

https://sourceforge.net/p/phpmailer/discussion/130418/thread/42bf5695/ https://developer-paradize.blogspot.com/2015/02/how-to-fix-multiple-attachments-problem.html

在这一点上,我有点迷失了。 如果有人知道如何使用 PHPMailer 向 email 添加多个附件,您能帮帮我吗? 非常感谢您的帮助。 谢谢你。

这个问题由另一个线程上的同步回答。 https://github.com/PHPMailer/PHPMailer/issues/2098

“你指的那根线是有年头的!

关于唯一 ID 的文章早已过时; 具有重复 cid 值的内联附件仍将被忽略,但这是预期的行为,并且仅适用于使用 addEmbeddedImage() 和 addStringEmbeddedImage() 创建的内联附件。

这里的关键问题是您没有正确处理上传。 PHP 文档中介绍了您应该如何处理上传,以及在 PHPMailer 参与之前发生的所有事情。

首先,您需要了解文件输入的工作原理。 这些决定了 PHP 为您填充的 $_FILES 超全局中显示的内容。 您可以有多个文件类型输入,即 select 每个文件,或者您可以有一个允许您输入 select 多个文件的单个文件。 PHPMailer 不关心任何一种方式,但你必须这样做。

接下来,您需要确保使用 move_uploaded_file 或至少 is_uploaded_file 以验证 $_FILES 超全局中的内容,否则不安全。

第三,您需要检查对 addAttachment() 的调用是否成功 - 目前,您只是假设它们可以正常工作并且根本没有错误检查。

所以,我建议你看一下单文件和多文件上传的例子,它们都做到了以上所有,并且添加多个附件没有已知的问题。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM