2

当前场景:例如使用带有查询的 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+ 封电子邮件。

有没有办法我可以计算后台处理程序文件夹中的消息并用我的查询总数进行验证?

处理这么多电子邮件的正确方法是什么?

4

1 回答 1

4

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

您是否考虑过使用事务性电子邮件服务?我们最近从 Mandrill(因为他们将其滚动到 MailChimp)切换到 SparkPost(免费层 = 100,000 条消息/月)。这种类型的服务将为您提供最好的统计数据和退回/阅读/点击检测(使用 CFHTTP 发送 40k 条消息大约需要 2 秒。)您还可以为您正在发送的帐户使用“标签”,这样您就可以跟踪或为每个客户设置单独的帐户。(注意:如果您使用 SMTP API,请务必为每个 SMTP 客户设置唯一的 DNS CNAMES,否则 ColdFusion 可能会使用现有的经过身份验证的连接并使用错误的 SMTP 帐户发送消息。)

除了 SMTP 连接(一次一条消息)之外,还提供 REST API,它允许您生成和发布包含 HTML/TEXT 模板、电子邮件列表、替换参数、活动 ID、标签、可选标题等的单个 JSON 数据包。我更喜欢通过这些服务发送,因为它不会导致我的 IP 被列入黑名单或导致时间敏感消息的传递延迟。

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

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

这是使用SparkPost的示例 REST API 调用。(我提供这个是因为几乎没有第三方服务提供 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#">
于 2016-03-08T14:38:18.797 回答