通过PHPMailer将电子邮件发送到MySQL上的单个电子邮件地址


Send email via PHPMailer to single email address on MySQL

"搜索结果"会显示一个表,每行的末尾都有一个"电子邮件按钮"。访问者点击一个"电子邮件按钮",系统就会向注册的"用户"发送一封电子邮件。

PHPMailer和邮件系统运行良好,但仅适用于静态电子邮件!

问:我需要在代码上更改什么才能将电子邮件发送到访问者选择的单个电子邮件。我在$query中添加了一个"WHERE"条件,但它似乎没有影响。

以下两行的邮件功能正在中运行

$mail->AddAddress("support@domain.co.uk", "John Doe");
$mail->AddAddress("admin@domain.co.uk");

以下行是不是正在工作

$mail->AddAddress("$email", "John Doe");

错误消息显示:

"无效地址:无法发送邮件。"
"Mailer错误:您必须至少提供一个收件人电子邮件地址。"

 <?php
//mailer.php
$dbhost = 'xxx.xxx.xxx.xxx'; 
$dbuser = 'user_name';
$dbpass = 'password';  
$dbtable = 'tablename';
$db = 'db_name';
$conn = mysqli_connect($dbhost,$dbuser,$dbpass,$db) or
die("Could not connect: " . mysql_error());
mysqli_select_db($conn,$db);
if(isset($_POST['requestedEmail'])){
    $requestedEmail = $_POST['requestedEmail'];
    }
//Connecting to database
$link = mysqli_connect($dbhost, $dbuser, $dbpass, $db) OR DIE ("Unable to connect to database! Please try again later.");
mysqli_select_db($conn,$db);
//Fetching from database table.
$query = "SELECT email FROM db_name WHERE email='". $requestedEmail . "'";
if ($result) 
{
while ($row = mysqli_fetch_array($result)) {
  send_mail($row['email']);
}
}
//$email = $row['email']; 
?>


<?php
  require 'PHPMailer_5.2.0/class.phpmailer.php';
  $email = $row['email'];      
  $mail = new PHPMailer();
$mail->IsSMTP();                                 // set mailer to use SMTP
$mail->Host = "domainname.co.uk;domainname.co.uk";  // specify main and back`enter code here`up server
$mail->SMTPAuth = true;     // turn on SMTP authentication
$mail->Username = "support@domain.co.uk";  // SMTP username
$mail->Password = "password"; // SMTP password
$mail->From = "support@domain.co.uk";
$mail->FromName ="Company Name";
$mail->AddAddress($email, "John Doe");
$mail->AddReplyTo("info@domain.co.uk", "Information"); 
$mail->WordWrap = 50;                                 // set word wrap to 50 characters
$mail->IsHTML(true);                                  // set email format to HTML
$mail->Subject = "Here is the subject 3.4";
$mail->Body    = "This is the HTML message body <b>in bold!</b>";
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
if(!$mail->Send())
{
 echo "Message could not be sent. <p>";
 echo "Mailer Error: " . $mail->ErrorInfo;
 exit;
}
echo "Message has been sent to: " . $email; // $email is not printed out
?>

这似乎是错误的

$query = "SELECT email FROM db_name WHERE email=$row[email]";

它从哪里得到$row[电子邮件]?你需要在那里有一个有效的变量,比如post数组中的变量(假设你是从表单中传递变量的)

if(isset($_POST['requestedEmail'])){
$requestedEmail = $_POST['requestedEmail']}
// other code
$query = "SELECT email FROM db_name WHERE email='". $requestedEmail . "';

然后,您从返回的$行中获得电子邮件(假设您使用的是返回查询中的变量

$email = $Row['email'];

然后你可以使用$email(没有引号,因为它是一个变量而不是字符串):

$mail->AddAddress($email, "John Doe");

此行:

$mail->AddAddress("$email", "John Doe");

应更改为:

$mail->AddAddress($email, "John Doe");

在PHP中将变量作为参数传递时,不会像传递字符串那样在变量周围使用引号。因此,在您的代码中,您传递的不是变量$email,而是字符串"$email"。