Coldfusion 11 假脱机程序和 cfmail 线程

coldfusion 11 spooler & cfmail threading

当前场景: 例如,使用带有查询的 cfmail 标签。

<cfmail   
    query="qName"   
    to="#tomailvar#" 
    from="#frommailvar#>"
    subject="#subjectvar#"  
    type="html" 
    server="smtp.sendgrid.net" 
    timeout="360"  
    username="#myuservar#"  
    password="#mypwdvar#"  
>

我如何在 cfmail 标记或当前代码中进行线程化?

我有客户他们在一段时间内一次拍摄发送了将近 40k。 我给我的客户提供了多个帐户,有时他们会同时向两个用户或三个用户发送 40k + 40k+ 封电子邮件。

有没有一种方法可以计算后台处理程序文件夹中的邮件数量并验证我的查询总数?

what is the right way to handle this much emails?

您使用的是哪个版本的 ColdFusion?我很惊讶您没有遇到超时问题。从 ColdFusion 6 开始,我们一直在将 HTML、TEXT 和电子邮件列表保存到单独的数据库中,然后对数据进行后台任务循环并以较小的批次发送。

您是否考虑过使用交易电子邮件服务?我们最近从 Mandrill(因为他们正在将其整合到 MailChimp 中)切换到 SparkPost(免费套餐 = 100,000 messages/mo)。这种类型的服务将为您提供最好的统计数据和 bounce/read/click 检测(使用 CFHTTP 发送 40k 消息大约需要 2 秒。)您还可以为您发送的帐户使用 "tags"您可以跟踪或为每个客户设置单独的帐户。 (注意:如果您使用 SMTP API,请务必为每个 SMTP 客户设置唯一的 DNS CNAMES,否则 ColdFusion 可能会使用现有的经过身份验证的连接并使用错误的 SMTP 帐户发送邮件。)

除了 SMTP 连接(一次一条消息)之外,REST APIs 是可用的,它允许您生成 & post 一个包含 HTML/TEXT 模板、电子邮件列表、替代参数、活动 ID、标签、可选 headers 等。我更喜欢通过这些服务发送,因为它不会导致我的 IP 被列入黑名单或导致 [=29= 的交付延迟] 消息。

这是各种交易电子邮件提供商的比较表。

http://socialcompare.com/en/comparison/transactional-emailing-providers-mailjet-sendgrid-critsend

这是一个使用 SparkPost 的示例 REST API 调用。 (我提供这个是因为几乎没有 third-party 服务为 CFML 提供代码示例。)

<cfscript>
APIKey = "abc123";
/* Generate Message Object */
messageObject = {
    "campaign_id" = "Test1234",
    "options" = {
        "open_tracking" = Javacast("boolean", true),
        "click_tracking" = Javacast("boolean", true)
    },
    "recipients" = [
        {"address" = {"email" = "user1@email.com", "name"="User 1 Name"}, "substitution_data"= {"fullname"="Mr. User 1"}},
        {"address" = {"email" = "user2@email.com", "name"="User 2 Name"}, "substitution_data"= {"fullname"="Ms. User 2"}},
    ],
    "content" = {
        "tags" = ["testing", "demo"],
        "from" = {"email"="my@email.com", "name"="My Name"},
        "subject" = "Oh hey {{fullname}} (#Request.DateTimeFormat(StartTime,'m/d/yyyy')#)",
        "html" = "<b>Testing REST API {{fullname}}</b><br><br>Sending email using a transactional email service.",
        "text" = "Testing REST API {{fullname}} - Sending email using a transactional email service.",
        "headers" = {
            "X-CUSTOM-HEADER" = "foo bar"
        }
    }
};
/* Recommend using JSONUtil for proper casting of boolean values */
JSONUtil = CreateObject("component","JSONUtil");
MessageJSON = JSONUtil.Serialize(var=messageObject, strictMapping=true);
</cfscript>

<cfhttp url="https://api.sparkpost.com/api/v1/transmission" method="post" result="httpResp" timeout="60" getasbinary="never">
    <cfhttpparam type="header" name="Content-Type" value="application/json">
    <cfhttpparam type="header" name="Authorization" value="#APIKey#">
    <cfhttpparam type="body" value="#MessageJSON#">
</cfhttp>

<CFDUMP VAR="#httpResp#">