gpt4 book ai didi

PHP 向 Amazon SES 发送大量电子邮件

转载 作者:行者123 更新时间:2023-12-03 23:54:19 24 4
gpt4 key购买 nike

我有一个向 Amazon SES 发送电子邮件的在线软件。目前,我有一个 cron 作业,它通过 SMTP 使用 phpmailer 发送电子邮件以发送消息。目前我必须将发送限制设置为每分钟大约 300 次,以确保我的服务器不会超时。我们看到了增长,最终我想发送到 10,000 或更多。

有没有更好的方法发送到 Amazon SES,或者其他人都这样做,但只有更多的服务器运行工作负载?

提前致谢!

最佳答案

您可以尝试使用适用于 PHP 的 AWS 开发工具包。您可以通过 SES API 发送电子邮件,SDK 允许您并行发送多封电子邮件。这是一个代码示例(未经测试,仅部分完成),可帮助您入门。

<?php

require 'vendor/autoload.php';

use Aws\Ses\SesClient;
use Guzzle\Service\Exception\CommandTransferException;

$ses = SesClient::factory(/* ...credentials... */);

$emails = array();
// @TODO SOME SORT OF LOGIC THAT POPULATES THE ABOVE ARRAY

$emailBatch = new SplQueue();
$emailBatch->setIteratorMode(SplQueue::IT_MODE_DELETE);

while ($emails) {
// Generate SendEmail commands to batch
foreach ($emails as $email) {
$emailCommand = $ses->getCommand('SendEmail', array(
// GENERATE COMMAND PARAMS FROM THE $email DATA
));
$emailBatch->enqueue($emailCommand);
}

try {
// Send the batch
$successfulCommands = $ses->execute(iterator_to_array($emailBatch));
} catch (CommandTransferException $e) {
$successfulCommands = $e->getSuccessfulCommands();
// Requeue failed commands
foreach ($e->getFailedCommands() as $failedCommand) {
$emailBatch->enqueue($failedCommand);
}
}

foreach ($successfulCommands as $command) {
echo 'Sent message: ' . $command->getResult()->get('MessageId') . "\n";
}
}

// Also Licensed under version 2.0 of the Apache License.

您也可以考虑使用 Guzzle BatchBuilder and friends使其更加健壮。

您需要对这段代码进行微调,但您也许能够实现更高的电子邮件吞吐量。

关于PHP 向 Amazon SES 发送大量电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19088649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com