使用php mailer和ajax发送批量消息

使用php mailer和ajax发送批量消息,php,email,phpmailer,Php,Email,Phpmailer,我需要帮助发送大量电子邮件。 这是斯坎纳里奥。 下拉列表包含要提取的电子邮件的类别。然后,所选的(值)通过一个函数传递,该函数从db中获取每个所选值的所有电子邮件。电子邮件被传递到邮件发送者的addAddress方法。 sql查询工作正常,但my Header仅显示网络会话中选定的值,而不是所有返回的电子邮件。我包括php代码和ajax代码以及响应头 PHP块 $accountid = $_POST['accountid']; $selectedstatus = $_POST['bulkre

我需要帮助发送大量电子邮件。 这是斯坎纳里奥。 下拉列表包含要提取的电子邮件的类别。然后,所选的(值)通过一个函数传递,该函数从db中获取每个所选值的所有电子邮件。电子邮件被传递到邮件发送者的addAddress方法。 sql查询工作正常,但my Header仅显示网络会话中选定的值,而不是所有返回的电子邮件。我包括php代码和ajax代码以及响应头

PHP块

$accountid = $_POST['accountid'];


$selectedstatus = $_POST['bulkrecipients']; //From dropdown 
$emailtype = $_POST['emailtype'];
$subject = sanitize_text($_POST['bulksubject']);

$message = sanitize_text($_POST['bulkmessage']);

//Pass recipientemails to function and extract individual emails.
$getemails = getAllEmailsFromStatus($selectedstatus , $_SESSION['username']);

$name = 'Tester';

$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPKeepAlive = true;
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = "";
$mail->Password = '';
$mail->Port = 465;
$mail->SMTPSecure = "ssl";
$mail->isHTML(true);
$mail->setFrom('testproject222', $name);
$mail->Subject = ("$subject");
$mail->Body = $message;


foreach ($getemails as $row) {

    try {

        $mail->addAddress($row['email']);
    } catch (Exception $ex) {
        echo 'Invalid address skipped: ' . htmlspecialchars($row['email']) . '<br>';
        continue;
    }


    try {
        if ($mail->send()) {
            $status = "success";
            $response = "Email is sent";

            //Save the contact details to db.        
            saveAllEmployerEmails($accountid , $subject, emailtype, $message );
        
        } else {
            $status = "failed";
            $response = 'Something is wrong ' . $mail->ErrorInfo;
        }

        exit(json_encode(array("status" => $status, "response" => $response)));
    } catch (Exception $ex) {
        echo 'Mailer Error (' . htmlspecialchars($row['email']) . ') ' . $mail->ErrorInfo . '<br>';
        $mail->getSMTPInstance()->reset();
    }
    $mail->clearAddresses();
    $mail->clearAttachments();
}
响应表单标题数据

accountid: 2
emailtype: bulk
bulksubject: Test
bulkrecipients: shortlisted
bulkmessage: <p>Testing... </p>
accountid:2
电子邮件类型:批量
主题:测试
收件人:入围名单
消息:正在测试


我希望邮件地址能代替“入围”的收件人。我希望看到2封回信。“入围名单”应该用于获取该类别(入围名单)的电子邮件。

您的代码通常看起来是正确的,但这令人困惑:

$mail->setFrom('Test',$name);
//$mail->From=(“$email”);
$email
未定义,并且
测试
不是有效的发件人地址。我怀疑您试图使用任意用户提交的电子邮件地址作为发件人地址。这不适用于Gmail,因为Gmail不允许设置任意地址;它只允许您以帐户所有者(您在
用户名中输入的内容)或您在gmail设置中预设的别名的身份发送。如果你尝试使用其他任何东西,它会忽略它,而使用你的帐户地址。这就是您所说的“仅从网络会话中选择的值”吗

gmail这样做是完全合理的,因为根据定义,除了你的账户地址之外,几乎任何东西都可能是伪造的,没有人喜欢这样


如果您希望发送电子邮件,答复将转到用户提交的地址,请在发件人地址中使用您自己的地址,并将用户提交的地址用作答复收件人。请参阅以了解如何操作。

您所说的是哪种类型的“标题”?您试图调试这个问题的原因是什么?@NicoHaase来自控制台。ajax返回了标题。你说的“来自控制台”是什么意思?你能通过编辑你的问题来分享更多细节吗?好的。对不起,我指的是网络部分,在查看页面时。来自标题部分的ie表单数据。我使用单个电子邮件作为发件人地址(请注意,我有一个完整的工作脚本用于发送单个邮件),我在发布之前做了一些编辑(我的坏消息)。我所说的“仅来自网络会话的所选值”是指由“id”返回的值。我只获取选定的值,而不获取电子邮件批量代码块现在可以工作,但现在只发送给一个收件人,而不是函数返回的从db获取的两封电子邮件。”getAllEmailsForInterviewStatus(…)'
accountid: 2
emailtype: bulk
bulksubject: Test
bulkrecipients: shortlisted
bulkmessage: <p>Testing... </p>