我使用PHPMailer将表单中的电子邮件发送到MySQL数据库中的所有电子邮件。
我设法让表单向每封电子邮件发送电子邮件,但我现在正试图在发送给他们的电子邮件中使用他们的名字,这意味着每封电子邮件都会以"您好, [其名称],"
我使用数组循环查看数据库查询的结果,并将每封电子邮件和名称添加为$mail->addAddress('email@email.com, 'name');
我已尝试在while循环中保存变量$name = $row['name'};
,但它会将数据库中的姓氏输入到所有电子邮件中。
我的问题是:是否可以访问该功能的'name'
部分并使用每封电子邮件。或者从数据库本身取名是否更好?如果是这样我将如何去做呢?
此外,当电子邮件发送给每个收件人时,它会显示" To:"中的所有收件人。领域。这对隐私来说非常糟糕。有办法防止这种情况吗?
我对PHP和MySQL相当新,但仍然非常感谢解释性答案。
请在下面找到我的代码。
<?php
// Take message value from form
$message = preg_replace("/\r\n|\r/", "<br />", $_REQUEST['message']);
$message = trim($message);
// Error reporting on
error_reporting(E_STRICT | E_ALL);
date_default_timezone_set('Etc/UTC');
// Require PHPMailer
require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead
$mail->Port = 587;
$mail->Username = 'my@email.com';
$mail->Password = 'mypassword';
$mail->setFrom('myemail@email.com', 'Me');
$mail->addReplyTo('myemail@email.com', 'Me');
$mail->Subject = "Newsletter";
/* ----- Add address function below ----- */
// Require Database connection
require 'dbcon.php';
// SELECT email and name values from database
$query = "SELECT email, name FROM customers";
// Result = the database query
$result = $con->query($query);
// Get array of users email addresses and names.
while($row = $result->fetch_array())
{
// Add recipients from values found in database
$mail->addAddress($row["email"], $row["name"]);
}
/* ----- Add address function above ----- */
$mail->Body ="Hello, <br> <br> $message";
$mail->AltBody = $message;
if(!$mail->Send())
{
echo "Message could not be sent.";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
print 'Sent!';
?>
&#13;
答案 0 :(得分:1)
您目前正在设置发送包含多个收件人的单个电子邮件。为了安全和礼仪,您应该给自己发送电子邮件(在循环之外):
$mail->addAddress('myemail@email.com', 'Me');
...然后将所有收件人添加为BCC(在循环内):
$mail->addBCC($row["email"], $row["name"]);
至于名称字段。在循环中添加调试行并查看输出。每次名称字段是否相同?
print "Adding recipient: {$row['email']} {$row['name']}";
如果您要向每个收件人发送多封电子邮件,则需要每次在循环内实例化一封新电子邮件。
[UPDATE]
如果您想向每个收件人发送一条消息,请每次(在您的循环内)实例化一封新电子邮件:
<?php
// Take message value from form
$message = preg_replace("/\r\n|\r/", "<br />", $_REQUEST['message']);
$message = trim($message);
// Error reporting on
error_reporting(E_STRICT | E_ALL);
date_default_timezone_set('Etc/UTC');
// Require PHPMailer
require 'PHPMailer/PHPMailerAutoload.php';
// Require Database connection
require 'dbcon.php';
// SELECT email and name values from database
$query = "SELECT email, name FROM customers";
// Result = the database query
$result = $con->query($query);
// Get array of users email addresses and names.
while($row = $result->fetch_array())
{
// Instantiate a NEW email
$mail = new PHPMailer;
// Set the email settings
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead
$mail->Port = 587;
$mail->Username = 'my@email.com';
$mail->Password = 'mypassword';
$mail->setFrom('myemail@email.com', 'Me');
$mail->addReplyTo('myemail@email.com', 'Me');
$mail->Subject = "Newsletter";
// Add recipient from values found in database
$mail->addAddress($row["email"], $row["name"]);
$mail->Body ="Hello, <br> <br> $message";
$mail->AltBody = $message;
if(!$mail->Send())
{
echo "Message could not be sent.";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
print "Sent mail to: {$row["email"]}, {$row["name"]}";
}
?>