如何使用 PHPMailer 向电子邮件添加多个附件
How to Add Multiple Attachments to an Email Using PHPMailer
我一次只能将一个 pdf 附加到电子邮件中。有人可以帮我弄清楚如何使用 PHPMailer 向电子邮件添加多个附件吗?我最初尝试只使用多个添加附件语句。
$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();
这没有用。上网查了一下,发现一般只能在一次允许多次提交的表单输入中接收附件时,才可以在一封邮件中添加多个附件https://phppot.com/php/send-email-with-multiple-attachments-using-php/。这些文件作为一个数组存储在一起,并通过循环遍历该数组来附加。不要从一个表单输入中检索多个文件对我来说很重要,所以我不喜欢这个选项。我认为如果我自己将文件信息存储在数组中可能会有所帮助,但这也没有用。
$fileNameArray = array($file1Name, $file2Name, $file3Name);
$filePathArray = array($file1Path, $file2Path, file3Path);
// . . .
for($i = 0; $i < 3; $i++) {
$mail->addAttachment($fileDataArray[$i], $fileNameArray[$i]);
}
$mail->Send();
接下来,我尝试了一个解决方案,我尝试发送多封电子邮件,每封电子邮件都回复前一封电子邮件,其中包含一个附件。这也没有用。在第一封电子邮件之后,没有包含其他附件。
$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 将多个附件添加到电子邮件中,您能帮帮我吗?非常感谢您的帮助。谢谢。
此问题已由 synchro 在另一个线程中回答。 https://github.com/PHPMailer/PHPMailer/issues/2098
"您所指的话题已有多年历史了!
关于唯一 ID 的文章早已过时;具有重复 cid 值的内联附件仍将被忽略,但这是预期的行为,并且仅适用于使用 addEmbeddedImage() 和 addStringEmbeddedImage() 创建的内联附件。
这里的关键问题是您没有正确处理上传。 PHP 文档中介绍了您应该如何处理上传,并且在 PHPMailer 参与之前发生的所有事情。
首先,您需要了解文件输入的工作原理。这些决定了 PHP 为您填充的 $_FILES 超全局中显示的内容。您可以有多个 file-type 输入,每个 select 一个文件,或者您可以有一个允许您 select 多个文件的输入。 PHPMailer 不关心任何一种方式,但你必须关心。
接下来,您需要确保使用 move_uploaded_file 或至少 is_uploaded_file 以验证 $_FILES 超全局中的内容,否则不安全。
第三,您需要检查对 addAttachment() 的调用是否成功 – 目前,您只是假设它们有效并且根本没有错误检查。
因此,我建议您看一下单个和多个文件上传示例,这两个示例都完成了上述所有操作,并且添加多个附件没有已知问题。"
我一次只能将一个 pdf 附加到电子邮件中。有人可以帮我弄清楚如何使用 PHPMailer 向电子邮件添加多个附件吗?我最初尝试只使用多个添加附件语句。
$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();
这没有用。上网查了一下,发现一般只能在一次允许多次提交的表单输入中接收附件时,才可以在一封邮件中添加多个附件https://phppot.com/php/send-email-with-multiple-attachments-using-php/。这些文件作为一个数组存储在一起,并通过循环遍历该数组来附加。不要从一个表单输入中检索多个文件对我来说很重要,所以我不喜欢这个选项。我认为如果我自己将文件信息存储在数组中可能会有所帮助,但这也没有用。
$fileNameArray = array($file1Name, $file2Name, $file3Name);
$filePathArray = array($file1Path, $file2Path, file3Path);
// . . .
for($i = 0; $i < 3; $i++) {
$mail->addAttachment($fileDataArray[$i], $fileNameArray[$i]);
}
$mail->Send();
接下来,我尝试了一个解决方案,我尝试发送多封电子邮件,每封电子邮件都回复前一封电子邮件,其中包含一个附件。这也没有用。在第一封电子邮件之后,没有包含其他附件。
$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 将多个附件添加到电子邮件中,您能帮帮我吗?非常感谢您的帮助。谢谢。
此问题已由 synchro 在另一个线程中回答。 https://github.com/PHPMailer/PHPMailer/issues/2098
"您所指的话题已有多年历史了!
关于唯一 ID 的文章早已过时;具有重复 cid 值的内联附件仍将被忽略,但这是预期的行为,并且仅适用于使用 addEmbeddedImage() 和 addStringEmbeddedImage() 创建的内联附件。
这里的关键问题是您没有正确处理上传。 PHP 文档中介绍了您应该如何处理上传,并且在 PHPMailer 参与之前发生的所有事情。
首先,您需要了解文件输入的工作原理。这些决定了 PHP 为您填充的 $_FILES 超全局中显示的内容。您可以有多个 file-type 输入,每个 select 一个文件,或者您可以有一个允许您 select 多个文件的输入。 PHPMailer 不关心任何一种方式,但你必须关心。
接下来,您需要确保使用 move_uploaded_file 或至少 is_uploaded_file 以验证 $_FILES 超全局中的内容,否则不安全。
第三,您需要检查对 addAttachment() 的调用是否成功 – 目前,您只是假设它们有效并且根本没有错误检查。
因此,我建议您看一下单个和多个文件上传示例,这两个示例都完成了上述所有操作,并且添加多个附件没有已知问题。"