- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试将 swiftmailer 实现到这个邮件系统中。我的客户有大约 30 万封事件电子邮件需要半定期发送。该系统最初是为 sendmail 和 php 的 mail() 函数配置的。我已经安装了最新版本的 postfix。
可能是我的期望太高了,但我的印象是这个东西可以快速将大量电子邮件放入队列,这正是我所需要的。所有速率处理和节流都是在后缀端完成的,因此能够以我的后缀设置可以处理的速度对它们进行排队会很棒。
虽然我可以实现将联系人直接插入队列的方法,但我宁愿根据各种选项(例如 smtp 服务器的全局发送速率)限制进入队列的电子邮件输入。
下面的代码只是一些基本的测试。它遍历 30 个独立的邮件 smtp 帐户,每个帐户都有自己的费率属性。我试图从每个 cron 的数据库中提取最大数量的电子邮件,然后使用 batchsend()
发送所有邮件,然后循环到下一个 smtp 帐户,发送最大数量,等等。
从技术上讲它确实有效,但它真的很慢。以每个 smtp 帐户 60/分钟的速度,每个 smtp 帐户大约需要 15-20 秒,这显然是行不通的,而且完全不是我所期望的。
为什么发送这么慢有什么明显的原因吗? smtp 服务器看起来很好,没有重载或类似的情况。没有后缀错误,没有什么明显的。
一旦电子邮件进入队列,我就让 postfix 工作,这很神奇。以合理的速度将其放入队列变得困难。我知道 swiftmailer 是解决我所有问题的神奇解决方案,但我确信它的发送速度应该比现在快。有什么想法或建议吗?
$query = "SELECT * FROM `smtp`";
$result = mysql_query($query) or die(mysql_error());
$num_rows1 = mysql_num_rows($result);
while($row = mysql_fetch_array($result)){
$smtp = $row['ip'];
$login = $row['user'];
$pass = $row['pass'];
$smtp_domain = $row['domain'];
$querya = "SELECT * FROM `mailer_lists` ml JOIN `mailer_controller` mc ON ml.project_name = mc.project_name LIMIT ".$global_limit."";
$resulta = mysql_query($querya) or die(mysql_error());
$num_rows2 = mysql_num_rows($resulta);
// quickly check if any mail returned query
if ($num_rows2 < 1){
mysql_close($connection);
echo "Nothing to mail... \n";
die();
}
while($rowa = mysql_fetch_array($resulta)){
$email[] = $rowa['email'];
$project_name = $rowa['project_name'];
$from_name = $rowa['from_name'];
$subject = $rowa['subject'];
$body = $rowa['body'];
$from = array($spun_from_email => $spun_from_name);
}
require_once 'swift/swift_required.php';
$transport = Swift_SmtpTransport::newInstance(''.$smtp.'', 25)
->setUsername($login)
->setPassword($pass)
;
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance()
->setSubject($subject)
->setFrom($from)
// ->addPart('add part message', 'text/html')
// ->attach(Swift_Attachment::fromPath(''))
->setTo($email)
->setBody($body)
;
$mailout = $mailer->batchSend($message);
// ->addPart('add part message', 'text/html')
// ->attach(Swift_Attachment::fromPath(''))
;
$queryb = "DELETE FROM `mailer_lists` WHERE `project_name` = '".$project_name."' AND `email` = '".implode('\' OR `email` = \'',$email)."'";
$resultb = mysql_query($queryb) or die(mysql_error());
$c++;
echo "sent $num_rows1 emails to smtp $c \n";
}
最佳答案
您的问题不是您正在使用的库。这很慢,因为您正在向电子邮件服务器发送大量数据……所以 postfix 会在回复您之前尝试处理所有数据。尝试在不关闭连接的情况下一次发送 ONE 封电子邮件,这样电子邮件服务器就可以更快地处理您发送给它的每封电子邮件,也可以更快地返回答复。
require_once 'swift/swift_required.php';
延迟连接到 smtp 服务器。 您不需要每次发送电子邮件时都连接。在顶部连接一次并检查连接是否有效(否则再次连接),发送电子邮件并清除字段到
、从
等...
从顶部的数据库中获取您的 smtp 设置,然后删除巨大的 while
。这根本无法使代码可读
关于php - SwiftMailer 库执行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6102675/
我想使用 sendgrid 的 SMTP 服务器发送我的电子邮件,但是连接到它们,不是在“网络时间”,而是通过(简单)队列。 我知道 PEAR 的 Mail_Queue 可以让我做到这一点,但我可以使
我的 yii2 应用程序使用 \app\mail\layouts 中给定的默认布局成功发送了带有 yii2 swiftmailer 扩展的电子邮件。名为 html.php喜欢 Yii::$app->m
我有一个带有 swiftMailer 包的 symfony 项目。我正在尝试使用 NTLM 身份验证通过 swiftmailer 发送电子邮件。但是我还没有找到通过配置包打开 NTLM 的方法。 经过
基本上我使用 Yii2 邮件程序,但原则上,它使用 Swifmailer。所以,我想在正文电子邮件中显示图片。 我们使用 Mozilla thunderbird 的用户没有问题。但是,在我使用基于 M
我真的不知道这是关于 SwiftMailer 还是 mailtrap.io 但问题是当我尝试与上述服务建立 SMTP 连接时(mailtrap.io) 我从来没有收到任何错误,即使我不使用任何用户名或
我正在向一个 api 发送电子邮件,该 api 从附加文件中获取其内容。 我不想实际创建文件(就像一行文本)然后附加并发送它。 是否可以创建文件流并通过 swiftmailer 发送? 最佳答案 结果
我已成功配置我的 symfony web 应用程序以使用 SMTP 发送电子邮件。但我所有发送的电子邮件都被放入 spool 目录中。 只有在发送错误时才会发生这种情况。这是正确的吗? 但是如果我执行
我刚刚为 php 安装了 swiftmailer,我有一些问题: 德语变音符号有问题 - 我输入了错误的字符,我该如何正确编码邮件正文? swiftmailer 中是否有获取服务器日志的属性(发送邮件
$headers = "\r\n" . "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type:text/html;charset=iso-88
我试图在使用 Symfony 2.1 和 Swiftmailer 发送电子邮件后删除附件,但是如果我在返回响应对象(重定向)之前删除文件,电子邮件未发送。 我想这是因为 symfony 在响应中发送了
我正在尝试将 swiftmailer 实现到这个邮件系统中。我的客户有大约 30 万封事件电子邮件需要半定期发送。该系统最初是为 sendmail 和 php 的 mail() 函数配置的。我已经安装
我想使用 swiftmailer 将表单结果发送到 gmail 帐户。 我是 php 的新手(也是 ubuntu 的新手),即使在阅读文档时也处于(尴尬地)迷失的阶段。 问题: a) 我在哪里提取库?
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的非现场资源的问题对于 Stack Overflow 来说是无关紧要的
我正在尝试使用 SwiftMailer 使用以下 php 代码发送电子邮件。 $transport = Swift_SmtpTransport::newInstance('smtp.domain.co
我在此处看到了有关 Swiftmailer 处理退回邮件的建议,但我没有在文档中看到对此的支持。我错过了什么吗?在我看来,PHPMailer-BHM 是唯一具有开箱即用功能的选项。如果这不正确,请详细
我正在使用 swiftmailer 发送一封大约 300 BCC 的电子邮件。 问题是,这样做时,我在客户端收到了 30 秒的超时。 在服务器端检查时,邮件发送正确,但发送所有这些电子邮件需要一些时间
如何在不使用命令的情况下从 swiftmailer 发送假脱机? php 应用程序/控制台 swiftmailer:spool:send --env=prod 我需要以某种方式将其放入 php 文件中
我正在尝试使用 Mandrill 的标准 Swiftmail SMTP 连接,它位于此处: http://help.mandrill.com/entries/21746308-Sending-via-
我正在创建一个允许上传多个文件的表单。然后将表单字段值和附件通过电子邮件发送到特定地址。我正在使用 Swiftmailer 生成这些电子邮件。我知道如何使用 Swiftmailer 附加一个文件,但不
我无法连接 Gmail SMTP 服务器。 看: $transport = Swift_SmtpTransport::newInstance() ->setHost('smtp
我是一名优秀的程序员,十分优秀!