我正在开发一个应用程序,它从数据库中获取邮件地址,然后向这些地址发送电子邮件。在我的脚本中,我首先获取收件人,然后将消息保存到磁盘中,一段时间后使用 CRON 发送它们。假脱机目录中的邮件数与收件人数相匹配。问题是某些收件人会收到两次电子邮件。最奇怪的是不是每个人都收到了两次电子邮件,只有 40 个收件人的 700 个。我检查了数据库,看看是否有一些地址重复,但事实并非如此,发送假脱机消息的脚本没有循环,所以我在这里很迷失。你能提供的任何帮助都会很棒。提前致谢。这是我创建消息的代码:
$spool = new Swift_FileSpool(__DIR__."/spool");
// Setup the transport and mailer
$transport = Swift_SpoolTransport::newInstance($spool);
$mailer = Swift_Mailer::newInstance($transport);
$result = array();
foreach($cliente as $cliente){
$archivo = explode("/", $cliente->pdf);
$correo = explode(";", $cliente->mail);
$message = Swift_Message::newInstance($asunto);
if(is_dir($directorio . "/" . $mes)){
$prueba[$x] = rename($cliente->pdf, $directorio . "/" . $mes . "/".$archivo[1]);
}
else{
mkdir($directorio . "/" . $mes, 0777);
chmod($directorio . "/" . $mes, 0777);
$prueba[$x] = rename($cliente->pdf, $directorio . "/" . $mes . "/" .$archivo[1]);
}
$fp=fopen("datos/clientes.txt","a") or die("No se pudo crear el archivo");
fwrite($fp, "$cliente->nombre,,$cliente->mail,,$cliente->pdf" . PHP_EOL);
fclose($fp);
if($prueba[$x]){
$copiados++;
}
else{
$errorcopiar[] = "No se ha podido cambiar de carpeta la factura correspondiente al cliente " . $cliente->nombre;
}
$cuerpo = "this is the message body";
//Se crea el mensaje sin archivo adjunto.
if (!$archivosubido){
$message->setFrom($origen);
$message->setReturnPath($returnpath);
$message->setTo($correo);
$message->setReplyTo($returnpath);
$message->setBody($cuerpo,
'text/html');
$message->attach(Swift_Attachment::fromPath($directorio . "/" . $mes . "/" .$archivo[1]));
}
//Se crea el mensaje con archivo adjunto.
else{
$message->setFrom($origen);
$message->setReturnPath($returnpath);
$message->setTo($correo);
$message->setBody($cuerpo,
'text/html');
$message->attach(Swift_Attachment::fromPath($directorio . "/" . $mes . "/" .$archivo[1]));
$message->attach(Swift_Attachment::fromPath('subidos/' . $archivosubido));
}
//Se envía el mensaje.
$result[$x] = $mailer->send($message);
$x++;
}
这是我发送假脱机消息的代码:
$spool = new Swift_FileSpool(__DIR__."/spool");
$transport = Swift_SpoolTransport::newInstance($spool);
$realtransport = Swift_SmtpTransport::newInstance($servidor,
25)
->setUsername($user)
->setPassword($password);
$spool = $transport->getSpool();
$spool->setMessageLimit(10000);
$spool->setTimeLimit(10000);
$sent = $spool->flushQueue($realtransport, $fallos);