php邮件发两遍,PHPmailer – 多次发送电子邮件

本文探讨了如何使用PHPMailer发送多封电子邮件,解决了循环中邮件地址和附件发送的问题。作者分享了代码片段,并提到了正确实现循环和清除收件人及附件的方法,确保每个收件人收到各自的附件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在使用PHPmailer发送电子邮件.截至目前,我成功地将电子邮件发送到一个地址.现在,我想只需点击一下即可发送多封电子邮件.

问题:我曾尝试使用下面的一些循环发送多封电子邮件,但我的输出错了.是的,它发送电子邮件但只发送一个地址,电子邮件地址正在收到应该通过电子邮件发送到其他电子邮件的所有电子邮件.

例如,当我发送17封电子邮件时,这17封电子邮件只发送到一个地址.电子邮件应根据数据库中的地址发送,并附带相应的唯一附件.示例:abc@gmail.com应附加abc.pdf,123 @gmail.com应附加123.pdf.

我认为这是在循环中.请帮我搞清楚.谢谢.

require_once('phpmailer/class.phpmailer.php');

include("phpmailer/class.smtp.php");

$mail = new PHPMailer();

$body = file_get_contents('phpmailer/body.html');

$body = preg_replace('/\/b]/','',$body);

$file ='phpmailer/mailpass.txt';

if($handle = fopen($file,"r")){

$contentpass = fread($handle,'15');

fclose($handle);

}

$mail->IsSMTP();

$mail->Host = "smtp.gmail.com";

$mail->SMTPDebug = 1;

$mail->SMTPAuth = true;

$mail->SMTPSecure = "tls";

$mail->Host = "smtp.gmail.com";

$mail->Port = 587;

$mail->Username = "email@gmail.com";

$mail->Password = $contentpass;

$mail->SetFrom("email@gmail.com", "Subject");

$mail->AddReplyTo("email@gmail.com","Subject");

$mail->Subject = "Subjects";

$mail->AltBody = "Subject";

$mail->MsgHTML($body);

$file='current_schoolyear.txt';

if($handle = fopen($file,"r"))

{

$content = fread($handle,'9');

fclose($handle);

}

$input = addslashes($_POST['depchair']);

$email = "select email_address from sa_student where schoolyear = '$input'";

if ($p_address=mysql_query($email))

{

while($row = mysql_fetch_assoc($p_address))

{

$mail->AddAddress($row['email_address']);

$input = addslashes($_POST['depchair']);

$control = "select control_no from sa_student where schoolyear = '$input'";

if($ctrl=mysql_query($control)){

$ctrl_no = mysql_result($ctrl, 0);

$mail->AddAttachment("fpdf/pdf_reports/document/".$ctrl_no.".pdf");

}

else

{

echo "No attached document.";

}

if(!$mail->Send()) {

$message = "

Error sending email. " . $mail->ErrorInfo ."

";

} else {

$message = "

Email have been sent to the examinees in ".$input_depchair. "!

";

}

}

}

else

{

echo (mysql_error ());

}

更新的代码:运行下面的代码后,我能够发送一封电子邮件并附上正确的附件.但是,只发送了一封电子邮件(数据库中的最后一个电子邮件地址),其余电子邮件未发送.

$input = addslashes($_POST['depchair']);

$email = "select email_address, control_no from sa_student where schoolyear = '$input'";

if ($p_address=mysql_query($email))

{

while($row = mysql_fetch_assoc($p_address))

{

$cloned = clone $mail;

$cloned->AddAddress($row['email_address']);

$cloned->AddAttachment("fpdf/pdf_reports/document/".$row['control_no'].".pdf");

if(!$cloned->Send()) {

$message = "

Error sending email. " . $mail->ErrorInfo ."

";

} else {

$message = "

Email have been sent to the examinees in ".$input_depchair. "!

";

}

unset( $cloned );

}

}

else

{

echo (mysql_error ());

}

解决方法:

发送电子邮件$mail-> Send()后,执行以下命令:

$mail->ClearAllRecipients();

在你的while循环中.

所以你的基本while循环结构如下所示:

while($row = mysql_fetch_assoc($p_address)){

$mail->AddAddress($row['email_address']);

$mail->AddAttachment("fpdf/pdf_reports/document/".$ctrl_no.".pdf");

$mail->send();

$mail->ClearAllRecipients();

$mail->ClearAttachments(); //Remove all attachements

}

标签:php,mysql,email,sendmail,phpmailer

来源: https://codeday.me/bug/20191005/1856051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值