【发布时间】:2021-08-16 06:06:57
【问题描述】:
我构建了一个 PHP/Ajax 脚本来通过 PHPMailer 发送大量时事通讯电子邮件,除了从 HTML INPUT BOX 中获取电子邮件主题的值外,它工作得非常好。
该表使用以下 HTML/Bootstrap 从 MySQL 数据库中获取值;
<div class="table-responsive">
<table class="table table-bordered table-striped">
<tr>
<th>Customer Name</th>
<th>Email</th>
<th>Select</th>
<th>Action</th>
</tr>
<?php
$count = 0;
foreach($result as $row)
{
$count = $count + 1;
echo '
<tr>
<td>'.$row["customer_name"].'</td>
<td>'.$row["customer_email"].'</td>
<td>
<input type="checkbox" name="single_select" class="single_select" data-email="'.$row["customer_email"].'" data-name="'.$row["customer_name"].'" />
</td>
<td>
<button type="button" name="email_button" class="btn btn-info btn-xs email_button" id="'.$count.'" data-email="'.$row["customer_email"].'" data-name="'.$row["customer_name"].'" data-action="single">Send Single</button>
</td>
</tr>
';
}
?>
<tr>
<td colspan="3"></td>
<td><button type="button" name="bulk_email" class="btn btn-info email_button" id="bulk_email" data-action="bulk">Send Bulk</button></td></td>
</tr>
<tr>
</table>
</div>
下面的AJAX/POST提交数据到PHP调用PHPMailer函数;
<script>
$(document).ready(function(){
$('.email_button').click(function(){
$(this).attr('disabled', 'disabled');
var id = $(this).attr("id");
var action = $(this).data("action");
var email_data = [];
if(action == 'single')
{
email_data.push({
email: $(this).data("email"),
name: $(this).data("name")
});
}
else
{
$('.single_select').each(function(){
if($(this).prop("checked") == true)
{
email_data.push({
email: $(this).data("email"),
name: $(this).data("name")
});
}
});
}
$.ajax({
url:"send_mail.php",
method:"POST",
data:{email_data:email_data},
beforeSend:function(){
$('#'+id).html('Sending...');
$('#'+id).addClass('btn-danger');
},
success:function(data){
if(data == 'ok')
{
$('#'+id).text('Success');
$('#'+id).removeClass('btn-danger');
$('#'+id).removeClass('btn-info');
$('#'+id).addClass('btn-success');
}
else
{
$('#'+id).text(data);
}
$('#'+id).attr('disabled', false);
}
})
});
});
</script>
以下 PHP 脚本抓取数据并发送电子邮件,效果非常好。
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer-master/src/Exception.php';
require 'PHPMailer-master/src/PHPMailer.php';
require 'PHPMailer-master/src/SMTP.php';
if(isset($_POST['email_data']))
{
$output = '';
foreach($_POST['email_data'] as $row)
{
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->XMailer = "Gleez CMS 0.10.5";
$mail->SMTPKeepAlive = true;
$mail->Host = "smtp.gmail.com";
$mail->Port = 587;
$mail->SMTPAuth = TRUE;
$mail->Username = "user@gmail.com";
$mail->Password = "password";
$mail->SMTPSecure = "tls";
$mail->From = "user@gmail.com";
$mail->FromName = "Jack N";
$mail->AddAddress($row["email"], $row["name"]);
$mail->WordWrap = 50;
$mail->IsHTML(true);
$mail->Subject = "You have a new message";
$mail->Body = "This line also supports html";
$mail->AltBody = '';
$result = $mail->Send();
if($result["code"] == '400')
{
$output .= html_entity_decode($result['full_error']);
}
}
if($output == '')
{
echo 'ok';
}
else
{
echo $output;
}
}
?>
我面临的挑战是替换
$mail->Subject = "You have a new message";
与
$mail->Subject($row["subject"]);
我尝试的操作是在我的 HTML 页面中包含以下行,例如,
<input type="text" name="subject" id="subject">
// modify the AJAX Script
subject:$(this).data("subject")
or var subject = document.getElementById("subject");
但没有成功! :(
请指导一下?谢谢!祝大家身体健康。干杯。
【问题讨论】:
-
不确定您将
$(this).data("subject")放在哪里,但这一切都取决于this是什么,以及是否具有适当的data-subject属性。 -
var subject = document.getElementById("subject");将变量设置为匹配元素。不过,您可能想要元素的值。