如何使用 PHPmailer 构建电子邮件队列?

2024-03-03

在插入表后,我已经使用 PHPmailer 构建了一个电子邮件脚本,但是,由于脚本超时,我收到了错误的网关 502。发送 300 多封电子邮件来响应网络请求对我来说听起来不是一个好主意。所以我的问题是如何构建一个在后台发送电子邮件的队列?

据我了解,我需要新桌子email_queue_table插入电子邮件地址、内容,然后有一个名为status发送或排队创建一个 while 循环,例如if($status == "queued"){ //then send the email here} else{ // nothing to be sent.}

如果您知道更有效/更好的方法来做到这一点,我会洗耳恭听。谢谢你的帮助。


它如何工作的逻辑——用一些代码来帮助你——是这样的:

将以下字段添加到您的email_queue_table table:

  • email_address, 电子邮件地址(至:)
  • content,留言内容。如果它是the same要发送给每个用户的消息,您最好将其存储在其他地方。如果只是需要更改内容中的一些内容(例如用户名),则使用 PHPstr_replace()做类似的事情str_replace('%name%', 'Andy') where %name%位于您的模板中,并将在每个循环中根据需要进行替换。理想情况下,您不会有此列或在此处重复相同的数据 -例如,如果您的消息为 50 Kb 并且您有 3000 个用户,那么您将不必要地在表中存储 150 Mb 的数据。
  • sent_status, 发送状态(默认=“未发送”,或0)
  • retry_attempts重试尝试(默认 =0)

创建一个执行以下操作的 PHP 脚本:

  • SELECT email_address, content FROM email_queue_table LIMIT 0, 50。这样每个循环就有 50 个人。重复直到列表末尾 - 为此,您需要知道表中可以使用的记录总数COUNT()
  • On each loop (each person you're sending mail to):
    • 使用 PHPMailer 尝试发送content to email_address
    • 阅读return来自 PHPMailer 的状态。如果发送成功flagsent_status作为“已发送”(1)。如果没有,则将其标记为“未发送”(0).
  • 延迟,例如sleep(60)每批 50 份之间。这会将脚本的执行暂停 1 分钟(60 秒),并可能有助于缓解您的服务器被标记为一次尝试发送大量电子邮件的情况。

发送所有消息后,您可以选择返回该表以尝试重新发送未发送的消息。依然保留着LIMIT逻辑,因为可能有大量未发送的地方,例如

SELECT email_address, content FROM email_queue_table WHERE sent_status = 0 AND retry_attempts < 5 LIMIT 0, 50

增加retry_attempts场地。如果尝试次数超过(例如 5 次),则停止。

您无法通过浏览器执行上述脚本,因为它会超时。

相反,您可以从命令行手动触发它,例如

php send_email.php

或者在 Cron 上设置上述内容,每晚运行,或以任何需要的频率运行。

或者您可以通过 ajax 调用触发它并更新浏览器中的进度。看:在php中为长时间运行的进程创建后台进程 https://stackoverflow.com/questions/21605585/creating-background-processes-in-php-for-long-running-process

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PHPmailer 构建电子邮件队列? 的相关文章

  • mysql连接3个表

    如何连接三个具有一个公共列 id 的mysql表 例如 从表1中选择a b 从表2中选择c d 从表3中选择e f 其中id x 谢谢 SELECT t1 a t1 b t2 c t2 d t3 e t3 f FROM table1 t1
  • jQuery mobile 在 Opera Mini 浏览器中失败。如何获得错误输出?

    I have a jQuery Mobile http en wikipedia org wiki JQuery Mobile website that works great on normal browsers but it fails
  • PHP内部hashCode函数

    我正在寻找与 JAVA 等效的 PHP SomeString hashCode 功能 我正在寻找的 hashCode 应该与 PHP 中用于索引 Hashmap 的 hashCode 相同 我希望你可以帮助我 EDIT 好的 找到了我正在搜
  • php isset 或空中的偏移类型非法

    我的这段代码最初可以工作 但在重新启动计算机后就无法工作 我收到的错误是 警告 第 4 行 D xampp htdocs cookieboylive classes Session php 中 isset 中存在非法偏移类型或为空 我的网站
  • Spreadsheet_Excel_Writer数据输出损坏

    我使用 Spreadsheet Excel Writer 生成 xls 文件 它工作正常 直到我必须处理大量数据 在某些阶段 它只是写入一些无意义的字符并停止填充某些列 然而 有些列直到最后都是字段 通常是数字数据 我不太确定xls文档是如
  • 如何在mySQL数据库中安全地插入代码

    我正在构建一个网站 用户可以使用 PHP 和 mySQL 数据库来存储代码片段 但我不知道如何安全地将用户输入的代码插入我的数据库 我无法使用我通常使用的 安全 功能来转换输入 trim stripslashes等 因为重点是您可以将代码视
  • 如何使 PHPunit 在警告时返回非零退出状态

    当在一些失败并出现警告的测试中调用 PHPunit 时 我得到 phpunit c phpunit xml group app Warning MongoCollection insert expects parameter 1 to be
  • 如何将所有输入字段值更改为大写

    我有一组 PHP 字段 在将值发送到查询之前 我想将字母更改为大写 有没有办法做类似的事情 cust name john cust gender male lower upper conversion 那么现在 john 已更改为 JOHN
  • mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,布尔值给出

    看来我的 mysqli query 不起作用 我该怎么办 在密码附近的查询中使用 AND 而不是逗号 这就是查询返回 false 并抛出该错误的原因 select
  • 在 Zend Framework 2 (ZF2) 中创建新控制器的问题

    我正在使用 ZF2 Skeleton 应用程序 为了在现有模块中创建新控制器 我修改了模块 config php像这样的文件
  • PCRE 库版本太旧

    Bug Genie 3 需要 PCRE 库 8 0 或更高版本 你有 版本 7 8 2008 09 05 将您的系统更新到最新版本 你常用的来源 在我查看问题并尝试通过以下步骤更新我的 PCRE 库后 wget the latest sou
  • PHP 生成唯一的字符串

    我在表中有一个 ID 列 用于存储行 ID 号 自动递增 例如 1 2 3 我想生成一个随机且唯一的字符串 该字符串只能包含数字 字母 破折号 和下划线 字符串长度为4 6 且唯一 有人可以帮我如何生成吗 谢谢 使用这个 base conv
  • 我应该将 PHP include/require 语句放在 HTML 中的什么位置?

    我在文件中创建了一个 PHP 类 现在我想在 HTML 页面中使用它 我应该把它放在哪里require or includeHTML 页面内的声明 有没有表现在 HTML 的开头或结尾加载它之间的区别 还是根本没有区别 应该是在 PHP 脚
  • 我被击败了 我只是想开发自己的画廊 但一开始我就失败了 在 a 中显示图像作为背景 div 我已经把我的代码颠倒了 搜索了网络 搜索了 stackoverflow 尽管我无法解决问题 这是我的代码 HTML PHP div class im
  • Laravel:如何模拟依赖注入类方法

    我正在使用GitHub API https github com KnpLabs php github api通过一个Laravel API 包装器 https github com GrahamCampbell Laravel GitHu
  • PHP - 使用大量参数和默认值初始化对象的最佳方法

    我正在设计一个类 它定义一个高度复杂的对象 其中包含大量 50 大部分可选参数 其中许多参数都有默认值 例如 type foo width 300 interactive false 我试图确定设置构造函数和实例 类变量的最佳方法 以便能够
  • 如何接收在 PHP 中使用“application/octet-stream”发送的 POST 数据?

    这就是我正在处理的事情 我们的一个计划有一个支持表格 用户可以使用它来请求支持 此表单的作用是 它向 PHP 脚本执行 HTTP POST 请求 该脚本应该收集信息并将其转发到支持电子邮件地址 POST 请求包含三个类型的文本字段Conte
  • 将订单总重量添加到 WooCommerce 新订单电子邮件通知

    是否可以在 WooCommerce 新订单 电子邮件通知 针对管理员 中显示订单的总重量 这是挂钩在 woocommerce email after order table 操作挂钩中的自定义函数 它将在 新订单 电子邮件通知中显示总重量
  • 如何使用 php 将文本区域中的链接转换为链接元素?

    我正在创建一个脚本 它包含一个发布脚本 但我希望用户直接从其他任何地方复制链接 当他们发布链接文本时 链接文本应自动将链接转换为链接元素 a 例如 Ask this on http stackoverflow com now 成为 Ask
  • PHP/regex:如何获取HTML标签的字符串值?

    我需要有关正则表达式的帮助或preg match http php net preg match因为我对这些还没有那么丰富的经验 所以这就是我的问题 我需要获取值 get me 但我认为我的函数有错误 html 标签的数量是动态的 它可以包

随机推荐

  • 代号一 - iOS 上的密码字段屏蔽和取消屏蔽

    TextField password new TextField Pass Word 15 TextField PASSWORD CheckBox maskAndUnmaskCheck new CheckBox maskAndUnmaskC
  • C# ExcelPackage (EPPlus) DeleteRow 不会更改工作表尺寸?

    我正在尝试构建一个数据导入工具 它接受用户的 EXCEL 文件并解析文件中的数据以将数据导入到我的应用程序中 我在删除行时遇到了一个奇怪的问题 我似乎无法在网上找到任何信息 尽管似乎以前有人遇到过这个问题 如果这是一个重复的问题 我很抱歉
  • 像在 iPhone SMS 应用程序中一样实现添加联系人

    我想构建 添加用户 功能 因为它在消息应用程序中可用 当用户开始输入用户名时 应用程序会搜索适当的用户并将其显示在一个圆圈中 如下面的屏幕截图所示 这是内置功能吗 如果是的话 它叫什么 我还想知道如何实现包含用户名的栏 特别是在编辑栏时自动
  • SQL Server - 将字符串添加到文本列(相当于 concat)

    如何将字符串添加到 SQL Server 中的列 UPDATE myTable SET myText myText 那是行不通的 数据类型 varchar 和 text 在 add 运算符中不兼容 您会在 MySQL 上使用 concat
  • 异步双向 RPC

    我正在寻找使用 TCP 的 Java 或 Python 首选 Python 的 RPC 库 它应该支持 异步 双向 RPC 某种事件循环 带有回调或类似 有什么建议吗 我看过像 bjsonrpc 这样的东西 这似乎是正确的东西 但是服务器似
  • Cloudformation 模板在 UserData 完成之前完成部署

    在我正在部署的 CloudFormation 模板中 我在 UserData 块中运行长时间运行的操作 它看起来如下 UserData Fn Base64 Fn Join usr local bin mylongrunningscript
  • Mac OS Mavericks 上的 NPM 安装问题

    我正在尝试掌握 AngularJS NodeJS 和 Ruby on Rails 当尝试安装 yeoman grunt 等 npm 软件包时 我在终端中收到一个错误 如下所示 npm ERR Error EACCES open Users
  • 如何增加Google Cloud Platform后端服务配额?

    我正在使用 Kubernetes 并且正在尝试创建一个入口资源 http kubernetes io v1 1 docs user guide ingress html 我使用以下方法创建它 kubectl create f my ingr
  • 如何根据 AngularJS 中的角色和身份验证使用 ui-router 路由页面

    我是 javascript 和 angularjs 的新手 我想要为我的角度应用程序登录和角色 我已经编写了用于登录的java Rest api 当我使用用户凭据调用登录 API 时 它返回 TOKEN 和 ROLES 我还有 TOKEN
  • backbone.js Model.get() 返回未定义,范围使用咖啡脚本+咖啡烤面包机?

    我正在使用 Coffeescript 和咖啡烤面包机 一个很棒的用于拼接的 NPM 模块 编写一个应用程序 该应用程序构建了我的 app js 文件 我的许多应用程序类和模板都需要有关当前用户的信息 因此我有一个 User 类 扩展 Bac
  • 在windows和linux上用Python获取唯一的计算机ID

    我想在 Windows 和 Linux 上使用 Python 获得一个唯一的计算机 ID 它可以是 CPU ID 主板序列号 或其他任何内容 我查看了几个模块 pycpuid psi 但没有运气 关于如何做到这一点有什么想法吗 似乎没有直接
  • 在 div 中以与在文本区域中相同的方式包装文本

    我正在创建一个建议面板 同时实时编辑 HTML 文本区域 为了获取 x y 坐标 我使用放置在文本区域后面的隐藏 div 我获取了插入符位置 然后将插入符之前的文本加上 span 标记复制到隐藏的 div 中 然后我获取跨度坐标并将其提供给
  • 使用 XPath 选择 XML 节点时如何忽略名称空间

    我必须解析如下所示的 XML 文档
  • sqlite 准备好的语句已完成

    我有一个错误java sql SQLException 准备好的语句已完成当我第二次调用同一个 preparedStatement 时会发生这种情况 我在方法中调用它 这是数据库 Java 类 相关部分 create the charge
  • android.database.sqlite.SQLiteException:靠近“ORDER”:语法错误(代码1):,

    我不断收到此错误 我确信这是一个简单的语法错误 有人看到吗 我调试了大约 30 分钟 似乎找不到它 query DELETE FROM SuccessfulCalls ORDER BY id DESC LIMIT 2 要插入到数据库的实际代
  • 在 Android 中下载文件时“不幸的是,...已停止”

    我正在尝试在 Android Studio 中制作一个应用程序 它要求您将文件下载到用户设备上的 sdcard Download 文件夹中 问题是 当我输入要下载的 URL 并单击 下载 时 应用程序显示 不幸的是 已停止 我有很多文件 所
  • 使用python检查文件夹/文件ntfs权限

    正如问题标题可能暗示的那样 我非常想知道如何检查给定文件或文件夹的 ntfs 权限 提示 这些是您在 安全 选项卡中看到的权限 基本上 我需要的是获取文件或目录的路径 在本地计算机上 或者最好在远程计算机上的共享上 并获取用户 组的列表以及
  • Android 应用程序上的 UID 没有权限访问 URI 错误

    我正在构建一个简单的应用程序来选择图像或从相机中拍摄图像并裁剪它 但是 它向我抛出了这个错误 java lang SecurityException Uid 10076 does not have permission to uri 0 c
  • 使用 numpy 进行 blinn-phong 着色

    我正在尝试在 numpy 中实现 blinn phong 着色以用于教育目的 然而 我几天来一直在调试参数的作用 我的总体想法如下 由于方程是针对通道给出的 我将模型应用于每个颜色通道以获得通道中的相对像素强度 然后将通道重新组合在一起以获
  • 如何使用 PHPmailer 构建电子邮件队列?

    在插入表后 我已经使用 PHPmailer 构建了一个电子邮件脚本 但是 由于脚本超时 我收到了错误的网关 502 发送 300 多封电子邮件来响应网络请求对我来说听起来不是一个好主意 所以我的问题是如何构建一个在后台发送电子邮件的队列 据