为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用PHPMailer将多个文件附加到两个不同的电子邮件?

如何使用PHPMailer将多个文件附加到两个不同的电子邮件?

PHP
喵喔喔 2021-04-29 13:12:10
我正在使用PHPMailer向两个不同的收件人发送两个不同的电子邮件。我想附加用户上传到两个电子邮件的多个文件。现在,多文件附件适用于第一个邮件,但不适用于第二个邮件。使用我当前的代码,文件仅附加到第一封邮件,而没有附件附加到第二封邮件:// First e-mail to recipient 1    $mail = new PHPMailer;    $mail->setFrom('example@example.com');    $mail->addAddress('recipient1@example.com');    $mail->Subject = 'Subject';    $mail->isHTML(true);    $mail->Body = '...';    // Attach multiple files one by one    for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {        $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name'][$ct]));        $filename = $_FILES['userfile']['name'][$ct];        if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {            $mail->addAttachment($uploadfile, $filename);        } else {            $msg .= 'Failed to move file to ' . $uploadfile;        }    }    $mail->send(); // I only wrote this once because as it turns out, it sends both of the mails// Second e-mail to recipient 2    $mail = new PHPMailer;    $mail->setFrom('example@example.com');    $mail->addAddress('recipient2@example.com');    $mail->Subject = 'Subject';    $mail->isHTML(true);    $mail->Body = '...';    // Attach multiple files one by one    for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {        $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name'][$ct]));        $filename = $_FILES['userfile']['name'][$ct];        if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {            $mail->addAttachment($uploadfile, $filename);        } else {            $msg .= 'Failed to move file to ' . $uploadfile;        }    }然后,我尝试不将整个功能复制到两个邮件中,而只添加$mail->addAttachment($uploadfile, $filename); 到第二封电子邮件。但是,这只会添加第一个给定的文件,并且复制此行会使同一文件发送两次。有什么想法如何将多个(在我的情况下为3个)文件附加到两个不同的电子邮件中?
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

我解决了这样的问题:


// First e-mail to recipient 1


    $mail = new PHPMailer;

    $mail->setFrom('example@example.com');

    $mail->addAddress('recipient1@example.com');

    $mail->Subject = 'Subject';

    $mail->isHTML(true);

    $mail->Body = '...';


    // Attach multiple files one by one

    for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {

        $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name'][$ct]));

        $filename = $_FILES['userfile']['name'][$ct];

        if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {

            $mail->addAttachment($uploadfile, $filename);

        } else {

            $msg .= 'Failed to move file to ' . $uploadfile;

        }

    }



// Altered e-mail to recipient 2


    $mail->ClearAddresses(); // avoid recipient 1 getting this altered mail

    $mail->addAddress('recipient2@example.com');

    $mail->Subject = 'New subject overwriting the first one';

    $mail->Body = 'New body overwriting the first one';



    $mail->send(); // send both mails

这样,同一封邮件基本上会发送两次,包括附件,但会通过覆盖(例如,主题和正文)进行一些更改。


查看完整回答
反对 回复 2021-05-07
?
呼唤远方

TA贡献1856条经验 获得超11个赞

发送第一封邮件时,您已将上传的文件从临时存储区中移出,因此在第二次尝试中不再存在。

move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)

您需要先移动上载的文件,然后使用该变量$uploadfile两次。

您实际上应该将所有这些放到一个函数中,这样您也不会重复自己。


查看完整回答
反对 回复 2021-05-07
  • 2 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号