【问题标题】:Send bulk message using php mailer with ajax使用带有 ajax 的 php mailer 发送批量消息
【发布时间】:2020-11-16 21:19:27
【问题描述】:

我在发送批量电子邮件方面需要帮助。 这是这个扫描仪。 下拉列表包含要获取的电子邮件类别。然后将选定的(值)传递给一个函数,该函数从 db.xml 中获取每个选定值的所有电子邮件。并将电子邮件传递给邮件程序的 addAddress 方法。 sql 查询工作正常,但我的标题仅显示来自网络会话的选定值,而不是所有返回的电子邮件。我包括 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();
}

Ajax

       function sendBulk() {
                    var url = "./inc/emailjobs.php";
                    var accountid = $("#accountid");
                    var emailtype = $("#emailtype");                   
                    var recipientemails = $("#bulkrecipients");
                    var bulksubject = $("#bulksubject");
                    var bulkmessage = $('#' + 'bulkmessage').html( tinymce.get('bulkmessage').getContent() );
                   
                    if (isNotEmpty(recipientemails) /*&& isNotEmptyTextArea("bulkmessage")*/) {
                        $.ajax({
                            url: url,
                            method: 'POST',
                            cache: false,
                            dataType: 'json',
                            beforeSend: function () {
 
                                $('#bulksendbtn').text("Sending...");
                            },
                            data: {
                                accountid: accountid.val(),
                                emailtype: emailtype.val(),
                                bulksubject: bulksubject.val(),
                                bulkrecipients: recipientemails.val(),
                                bulkmessage: bulkmessage.val()
                            }
                            , success: function (response) {
                                $('#bulkemailForm')[0].reset();
                                $('.bulksendmessage').text("Emails Sent.");
                                $('#bulksendbtn').text("Sent");
                            },
                        });
                    }
                }

响应表单标题数据

accountid: 2
emailtype: bulk
bulksubject: Test
bulkrecipients: shortlisted
bulkmessage: <p>Testing... </p>

我期望的是电子邮件地址,而不是批量收件人的“入围名单”。我希望看到 2 封退回的电子邮件。 “入围”应该用于获取该类别的电子邮件(入围)。

【问题讨论】:

  • 你说的是哪种“标题”?您尝试过什么调试问题?
  • 来自控制台的@NicoHaase。 ajax 返回标头。
  • “来自控制台”是什么意思?您可以通过编辑您的问题来分享更多详细信息吗?
  • 好的就行。对不起,我的意思是网络部分,在检查页面时。即来自标题部分的表单数据。

标签: php email phpmailer


【解决方案1】:

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

$mail->setFrom('Test', $name);
//$mail->From = ("$email");

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

gmail 这样做是完全合理的,因为根据定义,除了您的帐户地址之外的任何内容都可能是伪造的,而且没有人喜欢这样。

如果您想发送电子邮件,回复 将发送到用户提交的地址,请在发件人地址中使用您自己的地址,并使用用户提交的地址作为回复。请参阅the contact form example provided with PHPMailer 了解如何执行此操作。

【讨论】:

  • 我使用单个电子邮件作为 from 地址(请注意,我有一个用于发送单个邮件的完整且有效的脚本)我在发布之前进行了一些编辑(我的坏的)。我所说的“仅从网络会话中选择的值”的意思是,bulkrecipients 'id' 的返回值。 我只得到选择的值而不是电子邮件
  • 批量代码块现在可以工作,但现在只发送给一个收件人,而不是从函数返回的 db 获取的 2 封电子邮件。 'getAllEmailsForInterviewStatus(...) '
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 2021-01-24
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多