编辑:我忘记了我自己创建了SendMail();
函数,这就是为什么解释一开始没有提到它做什么。
我在使用PHPMailer (https://github.com/PHPMailer/PHPMailer)时遇到了一些问题,尝试发送两个电子邮件,一个紧接着另一个。
这个脚本基本上是默认的,只有一些修改,例如`foreach`循环以允许多个地址,而且一切正常。
但是,如果我尝试调用多个`SendMail();`实例,我会收到错误消息:
Fatal error: Cannot override final method Exception::__clone() in .... online 0
以前我使用内置的mail();
函数,它允许我连续多次使用,但是使用PHPmailer似乎并不那么简单:
$to = me@me.com;
$to2 = me2@me2.com';
$headers = 'php headers etc';
$subject = 'generic subject';
$message = 'generic message';
mail($to, $subject, $message, $headers);
mail($to2, $subject, $message, $headers);
上述代码会导致相同的电子邮件发送给不同的人,但我无法使用PHPmailer轻松复制此功能。是否有一种方式可以堆叠这些请求,以便我可以连续发送电子邮件而不会出错?强制脚本等待第一个电子邮件发送也可行,尽管不是首选。正如我所提到的,当仅调用一个实例时,我知道它可以工作,但是我似乎无法重复使用该函数。我没有包含源代码,但它都可以在上面提供的链接中找到。先行感谢。
// First Email
$to = array(
'test@test.com',
'test2@test.com',);
$subject = "Subject";
$message = $message_start.$message_ONE.$message_end;
sendMail();
// Second Email
$to = array(
'test@test.com',
'test2@test.com',);
$subject = "Subject";
$message = $message_start.$message_TWO.$message_end;
sendMail();
以下是我希望这个功能的工作方式,就像使用
mail();
一样。第一个电子邮件将正常工作,而第二个电子邮件将无法正常工作。
SendMail() 代码
这是来自PHPmailer网站的代码,被定义为SendMail();
。与示例唯一的区别是AddAddress
的循环以及包含$to
作为全局变量。$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "smtp1.example.com;smtp2.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "jswan"; // SMTP username
$mail->Password = "secret"; // SMTP password
$mail->From = "from@example.com";
$mail->FromName = "Mailer";
foreach($to as $to_add){
$mail->AddAddress($to_add); // name is optional
}
$mail->AddReplyTo("info@example.com", "Information");
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments
$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name
$mail->IsHTML(true); // set email format to HTML
$mail->Subject = "Here is the subject";
$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";
PHPMailer
对象发送这两封邮件?你需要为第二封邮件创建一个全新的PHPMailer
对象,或者你可以使用AddAddress
将同一封邮件发送到多个地址。如果你不希望发件人看到彼此的电子邮件地址,请使用 BCC。 - sjagrPHPMailer
对象。我们可以看看PHPMailer的示例代码,但显然你的代码并不完全像示例那样编写。 - sjagr