Je ne comprends pas tout à fait comment tout cela fonctionne, mais je reçois cette erreur:Zend Framework: Erreur fatale lorsque vous essayez d'utiliser Zend Mail Transport pour envoyer plusieurs emails avec pièces jointes
Erreur fatale: taille maximale autorisée pour la mémoire de 8388608 octets épuisés (essayé d'allouer 261858 octets) dans /Users/andrew/Sites/myApp/library/Zend/Mail/Transport/Smtp.php à la ligne 213
Je cours ce code localement sur mon Mac en cours d'exécution MAMP. Je ne sais pas si cela a quelque chose à voir avec ça. Ceci est mon code, essentiellement:
$config = array('ssl' => 'tls', 'port' => 587, 'auth' => 'login', 'username' => 'username', 'password' => 'password');
$smtpConnection = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);
foreach ($subscribers as $subscriber) {
$message = new Zend_Mail('utf-8');
$message->setFrom('[email protected]', 'Mailing List')
->addTo($subscriber->email)
->setSubject($subject)
->setBodyText($body);
$attachment = $message->createAttachment(file_get_contents($filepath));
$attachment->type = 'application/pdf';
$attachment->filename = $filename;
$message->send($smtpConnection);
}
Cependant, plus les abonnés il y a, plus ce nombre finit par obtenir, et ce correctif ne vous aidera si longtemps:
ini_set("memory_limit","12M");
Je dois comprendre comment envoyer un email avec une pièce jointe à quelques centaines de personnes. Voici quelque chose d'autre, je suis venu avec, mais il semble un peu hacky seulement régler le Cci et non l'adresse à:
$message = new Zend_Mail('utf-8');
$message->setFrom('[email protected]', 'Mailing list')
->setSubject($subject)
->setBodyText($body);
$attachment = $message->createAttachment(file_get_contents($filepath));
$attachment->type = 'application/pdf';
$attachment->filename = $filename;
foreach ($subscribers as $subscriber) {
$message->addBcc($subscriber->email);
}
$message->send($smtpConnection);
Cependant, même en faisant cela, je dois préciser la « memory_limit ». Pouvez-vous me diriger dans la bonne direction? Y a-t-il quelque chose que je ne fais pas?
Beaucoup de grande conseil ici! Cependant, (sans définir la limite de mémoire), et seulement l'envoi d'un email, je reçois toujours l'erreur.Est-ce que l'erreur signifie que la limite de mémoire est actuellement fixée à 8Mb, et qu'elle dépasse 250K? Je l'utilise en local (avec MAMP), donc je me demande ... si je le mets dans mon code à 32 Mo, cela sera-t-il inférieur à ce que mon serveur est capable de faire? Est-ce que je vais rendre un mauvais service en définissant cette valeur, plutôt que de trouver une meilleure solution? – Andrew
8M est trop petit. En fait, le PHP par défaut memory_limit est 16M à partir de PHP5.2.0. Le réglage à 32M ne devrait pas être un problème à moins que vous ayez un serveur/ordinateur très bas de gamme. Personnellement je cours 128M sur mon poste de travail et mon serveur (mémoire 4G/2G respectivement). En ce qui concerne votre memory_limit actuelle, ini_get ('memory_limit'). En ce qui concerne votre utilisation actuelle, memory_get_peak_usage() et memory_get_usage(). Quant à faire un mauvais service? Imho, non. L'utilisation est toujours dans les paramètres acceptables. – tommym