Я не совсем понимаю, как все это работает, но я получаю эту ошибку:Zend Framework: Фатальная ошибка при попытке использовать Zend почтового транспорта отправить несколько писем с вложениями
Фатальная ошибка: Разрешены памяти размером из 8388608 байт исчерпан (пытался выделить 261858 байт) в /Users/andrew/Sites/myApp/library/Zend/Mail/Transport/Smtp.php в строке 213
Я запускаю этот код локально на моем Mac работает MAMP. Не уверен, что это имеет к этому какое-то отношение. Это мой код, в основном:
$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);
}
Однако, чем больше абонентов есть, чем выше это число заканчивает тем, что становится, и это исправление только поможет так долго:
ini_set("memory_limit","12M");
мне нужно выяснить, как отправить электронное письмо с приложением на пару сотен человек. Вот кое-что еще я придумал, но это кажется немного Hacky, чтобы установить только ОЦК и не обращаться:
$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);
Однако, даже делая это, мне нужно указать «memory_limit». Не могли бы вы указать мне в правильном направлении? Что-то я не делаю?
Много больших совет здесь! Однако (без установки предела памяти), и только отправка одного сообщения электронной почты, я все еще получаю ошибку.Имеет ли ошибка, что ограничение памяти в настоящее время установлено на 8Mb, и что он перейдет на 250K? Я запускаю это локально (с помощью MAMP), поэтому я задаюсь вопросом ... если я установил это в своем коде как 32Mb, это будет меньше, чем мой сервер способен? Будет ли я делать плохую услугу, установив это значение, вместо того, чтобы найти лучшее решение? – Andrew
8M слишком мало. На самом деле, по умолчанию PHP memory_limit составляет 16M от PHP5.2.0. Установка его на 32M не должна быть проблемой вообще, если у вас нет очень низкого уровня сервера/компьютера. Лично я запускаю 128M на моей рабочей станции и на моем сервере (соответственно 4G/2G памяти). Что касается вашего текущего memory_limit, ini_get ('memory_limit'). Что касается вашего текущего использования, memory_get_peak_usage() и memory_get_usage(). Что касается неприятности? Имхо, нет. Использование все еще находится в допустимых параметрах. – tommym