我正在尝试从我的用户数据库向选定的电子邮件发送消息。当我将它发送到“some@gmail.com但我收到错误”消息无法发送时,我正在获取身体内容中user_mail的值.Mailer错误:您必须提供至少一个收件人“,当我我正在尝试发送到“user_email。有什么建议?
代码:
<?php require_once("connection.php");?>
<?require_once('libraries/PHPMailer.php');?>
/*** select the users name from the database ***/
$dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
/*** $message = a message saying we have connected ***/
/*** set the error mode to excptions ***/
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->prepare("SELECT user_email FROM users
WHERE user_id = :user_id" );
/*** bind the parameters ***/
$stmt->bindParam('user_id', $_SESSION['user_id'], PDO::PARAM_INT);
/*** execute the prepared statement ***/
$stmt->execute();
/*** check for a result ***/
$user_email = $stmt->fetchColumn();
}
catch (Exception $e)
{
/*** if we are here, something is wrong in the database ***/
$message = 'We are unable to process your request. Please try again later"';
}
$mail = new PHPMailer;
$mail->IsSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.mandrillapp.com'; // Specify main and backup server
$mail->Port = 587; // Set the SMTP port
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'someone@app.com'; // SMTP username
$mail->Password = 'key'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
$mail->From = 'someone@app.com';
$mail->FromName = 'App';
$mail->AddAddress ($user_mail); // Add a recipient
$mail->IsHTML(true); // Set email format to HTML
$mail->Subject = ' Subject';
$mail->Body = ' working fine';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->Send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
答案 0 :(得分:1)
添加收件人地址的正确方法
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");
如上所述,尝试对$地址进行硬编码,如果有效,那么您的代码中可能会出现异常,但不允许您设置$ user_email
将您的catch块更改为:
catch (Exception $e)
{
/*** if we are here, something is wrong in the database ***/
$message = 'We are unable to process your request. Please try again later"';
echo $message;
echo $e;
}
答案 1 :(得分:0)
我不知道你的情况是否和我的情况一样。
我尝试将$ mail-&gt; AddAddress($ user_mail);进入一个while循环,它可以工作。
例如:
$email_res = mysql_query($email);
while($email_row = mysql_fetch_assoc($email_res)) {
$mail->AddAddress($email_row[email]);
}
我试图在()中放入2个电子邮件字符串,但它不起作用。
我认为$ mail-&gt; AddAddress()可以在$ mail-&gt; AddAddress()中只有一个电子邮件地址时工作,所以我尝试将$ mail-&gt; AddAddress()放入while循环。
每次while循环运行时,它都会生成一个电子邮件地址,电子邮件地址位于$ mail-&gt; AddAddress()中,因此该程序可以运行。
答案 2 :(得分:0)
为了更加强调Jean的答案,他绝对正确,“$mail->AddAddress
”一次仅适用于一个电子邮件地址。此课程不接受以逗号分隔的电子邮件地址列表。
Jean展示了如何从MySQL查询循环。
如果您已经掌握了以逗号分隔的地址列表,那么您当然可以使用PHP的爆炸功能来遍历电子邮件地址。所以:
$_to=explode(',',$to);
foreach ($_to as $sendto)
{
$mail->AddAddress($sendto);
if(!$mail->Send())
{
echo '<p class="center">Mailer Error: <strong style="color:#f00">' . $mail->ErrorInfo .'</strong></p>
}
else
{
echo '<p style="text-align:center">Message sent to: <strong>'.$sendto.'!</strong></p>';
}
}