1

データベースからメール アドレスを取得し、それらのアドレスにメールを送信するアプリケーションを開発しています。私のスクリプトでは、最初に受信者を取得し、次にメッセージをディスクに保存し、しばらくして CRON を使用して送信します。スプール ディレクトリ内のメッセージの数は、受信者の数と一致します。問題は、一部の受信者が電子メールを 2 回受信することです。そして最も奇妙なことは、全員が電子メールを 2 回受信するわけではなく、700 人の受信者のうち 40 人だけであるということです。データベースをチェックして、一部のアドレスが重複していないかどうかを確認しましたが、そうではなく、スプールされたメッセージを送信するスクリプトにはループがありません。だから私はここでかなり迷っています。あなたが与えることができるどんな助けも素晴らしいでしょう. 前もって感謝します。メッセージを作成するコードは次のとおりです。

$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);
4

0 に答える 0