我是Phpmailer的新手,我正在使用它从一个非正式帐户向超过一千人发送批量电子邮件。当我向一两个人发送电子邮件时,代码工作正常,但当我发送给每个人(包括我自己)时,它会转到垃圾邮件。另一个问题是电子邮件的详细信息,它显示了发送给它的所有人的电子邮件ID,我不希望它这样做。 代码如下:
//date_default_timezone_set('America/Toronto');
require_once('../class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = "smtp1.site.com;smtp2.site.com";
$mail->SMTPAuth = true;// enable SMTP authentication
$mail->SMTPKeepAlive = true;// SMTP connection will not close after each email sent
$mail->Host = "mail.yourdomain.com"; // sets the SMTP server
$mail->Port = 26; // set the SMTP port for the server
$mail->Username = "yourname@yourdomain"; // SMTP account username
$mail->Password = "yourpassword"; // SMTP account password
$mail->SetFrom('noreply@mydomain.com', 'List manager');
$mail->AddReplyTo('list@mydomain.com', 'List manager');
$mail->Subject = 'Newsletter';
$ids = mysql_query($select, $connection) or die(mysql_error());
while ($row = mysql_fetch_row($ids)) {
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->MsgHTML($body);
$mail->AddAddress($row[0]);
$mail->Send();//Sends the email
}
答案 0 :(得分:12)
正如JoLoCo指出的那样,AddAddress()
方法只是将新地址添加到现有收件人列表中。而且,由于你是以添加/发送循环方式进行的,所以你向第一个收件人发送了大量重复副本,第二个收件人减少了一个,等等......
您需要的是:
while($row = mysql_fetch_row(...)) {
$mail->AddAddress($row[0]);
$mail->send();
$mail->ClearAllRecipients(); // reset the `To:` list to empty
}
另一方面,由于这会使您的邮件服务器发送大量单个电子邮件,另一个选择是生成一封SINGLE电子邮件,并BCC所有收件人。
$mail->AddAddress('you@example.com'); // send the mail to yourself
while($row = mysql_fetch_row(...)) {
$mail->AddBCC($row[0]);
}
$mail->send();
此选项最有可能更可取。您只生成一封电子邮件,让邮件服务器处理向每个收件人发送副本的繁重工作。
答案 1 :(得分:3)
我认为您要将新地址添加到已发送的电子邮件中 - 因此第一封电子邮件将发送给一个人,第二封电子邮件将发送给同一个人和另一个人,第三封电子邮件将发送给另一个人加一个,依此类推。
另外,我认为您不需要每次都设置AltBody和MsgHTML。
您应首先将所有地址添加到BCC字段,然后发送。
所以试试......
// rest of code first
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->MsgHTML($body);
$mail->AddAddress("you@example.com")
$ids = mysql_query($select, $connection) or die(mysql_error());
while ($row = mysql_fetch_row($ids)) {
$mail->AddBCC($row[0]);
}
$mail->Send();//Sends the email
答案 2 :(得分:2)
使用BCC(盲碳复制)隐藏收件人列表。 与垃圾邮件问题相关,它取决于收件人的电子邮件提供商什么是垃圾邮件,什么不垃圾邮件,并且有很多因素。