我正在使用Swiftmailer PHP版本4.3.0,我想在BCC中发送一封包含1500个电子邮件地址的电子邮件 .
我的服务器限制允许我可以在24小时内发送多达10000封电子邮件 . 我没有超过这个限制 .
但是,当我尝试使用Swiftmailer发送电子邮件时,它会返回以下错误消息(有关详细信息,请参阅下文)
“在这方面有421条消息太多了”
只有来自BCC 1500个电子邮件地址的999封电子邮件才能收到该电子邮件 . 我多次执行此实验,也将BBC中的电子邮件数量更改为1000或2000 - 每次只发送999封电子邮件 . 是否有可能在Swiftmailer中有某个限制,它不允许在BCC中设置超过999个电子邮件地址?如果是这样,是否可以更改此限制?如果没有,还有什么可能导致这个问题?
以下是Swiftmailer的完整错误消息:
异常'Swift_TransportException',消息'预期响应代码250但得到代码“421”,消息“421此连接中有太多消息”'/ is / htdocs / www / swift / lib / classes / Swift / Transport / AbstractSmtpTransport .php:386堆栈跟踪:#0 /is/htdocs/www/swift/lib/classes/Swift/Transport/AbstractSmtpTransport.php(281):Swift_Transport_AbstractSmtpTransport - > _ assertResponseCode('421我太多了......',数组) #1 /is/htdocs/www/swift/lib/classes/Swift/Transport/EsmtpTransport.php(245):Swift_Transport_AbstractSmtpTransport-> executeCommand('MAIL FROM:executeCommand('MAIL FROM:_doMailFromCommand('me@mydomain.n . ..')#4 /is/htdocs/www/swift/lib/classes/Swift/Transport/AbstractSmtpTransport.php(466):Swift_Transport_AbstractSmtpTransport - > _ doMailTransaction(Object(Swift_Message),'me@mydomain.n ......' ,Array,Array)#5 /is/htdocs/www/swift/lib/classes/Swift/Transport/AbstractSmtpTransport.php(178):Swift_Transport_AbstractSmtpTransport - > _ sendBcc(Object(Swift_Message),'me @ mydomain .n ...',Array,Array)#6 /is/htdocs/www/swift/lib/classes/Swift/Mailer.php(86):Swift_Transport_AbstractSmtpTransport-> send(Object(Swift_Message),Array)#7 /是/ htdocs / www / swift / lib / swift_required.php(133):Swift_Mailer-> send(Object(Swift_Message))#8 /is/htdocs/www/mydomain.net/test.php(21):sendMessage() #9
执行此代码时:
/*
* Autoloader and dependency injection initialization for Swift Mailer.
*/
if (defined('SWIFT_REQUIRED_LOADED')) {
return;
}
define('SWIFT_REQUIRED_LOADED', true);
//Load Swift utility class
require dirname(__FILE__) . '/classes/Swift.php';
if (!function_exists('_swiftmailer_init')) {
function _swiftmailer_init()
{
require dirname(__FILE__) . '/swift_init.php';
}
}
//Start the autoloader and lazy-load the init script to set up dependency injection
Swift::registerAutoload('_swiftmailer_init');
sendMessage();
function sendMessage(){
try{
// LARGE ARRAY with 1500 entries
$bcc = array("test1@mydomain.net","test2@mydomain.net", ... , "test1500@mydomain.net")
// Create the Transport
$transport = Swift_SmtpTransport::newInstance('***', 25);
$transport->setUsername('***');
$transport->setPassword('***');
// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
// Create the message
$message = Swift_Message::newInstance();
// Give the message a subject
$message->setSubject("This is a test mail");
// Set the From address with an associative array
$message->setFrom(array('me@mydomain.net' => 'My Name'));
$message->setTo("specialMail@mydomain.net");
$message->setBcc($bcc);
$message->setBody("Hi, this is a test mail. Enjoy.");
$result = $mailer->send($message);
echo "Success";
}
catch(Exception $exception)
{
echo $exception;
}
}
2 回答
该消息来自远程SMTP服务器 . 您的邮件托管帐户可能每天接受10000封邮件,但这与您可能拥有的其他限制完全无关(收件人总数,每封邮件的收件人数,每个连接的邮件数,邮件大小,允许的发件人数......) .
密件抄送通过发送单个邮件在内部工作,每个收件人一个邮件,因此达到某些限制这样做是明智的 .
将收件人列表拆分为块并发送多个邮件副本应该不难:
我 Build 了一个系统,必须向多个人发送电子邮件,但没有收件人知道电子邮件发送给谁,收件人的数量可以是从10到50,000 .
您应该瞄准的最终产品是在一个循环中发送电子邮件,以便它将电子邮件直接发送给您拥有的1,500个收件人中的每一个 . 这真的是摆脱困境的唯一途径 .
但是,使用此方法,您可能会发现自己违反了批量邮件发件人(例如SendGrid,Mailgun等)设置的规则,这些规则限制了您每小时发送的电子邮件数量 .
在我的情况下,我在数据库中创建了一条记录,其中包含所有电子邮件信息和收件人信息(因此您将创建1,500个单独的记录),然后创建一个每分钟运行一次的cronjob . cronjob将运行电子邮件发送脚本,该脚本将发送大约15封电子邮件 . 但是你可以随着时间的推移增加这个数字,直到你达到最佳位置 .