multithreading - coldfusion 11后台处理程序和cfmail线程

标签 multithreading coldfusion cfml coldfusion-11 cfmail

当前场景:
例如,将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邮件/月)。这种类型的服务将为您提供最佳的统计信息和跳出/读取/点击检测(使用CFHTTP发送40k消息大约需要2秒钟。)您还可以在发送的帐户中加入“标签”,这样您就可以跟踪或为每个客户设置单独的帐户。 (注意:如果您使用SMTP API,请确保为每个SMTP客户设置唯一的DNS CNAMES,否则ColdFusion可能会使用现有的经过身份验证的连接,并使用错误的SMTP帐户发送邮件。)

除了SMTP连接(一次只发送一条消息)之外,还提供了REST API,使您可以生成和发布单个JSON数据包,其中包含HTML/TEXT模板,电子邮件列表,替换参数,广告系列ID,标签,可选 header 等。我更喜欢通过这些服务进行发送,因为它不会导致我的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#">

关于multithreading - coldfusion 11后台处理程序和cfmail线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35859777/

相关文章:

Coldfusion 的 StructCopy 和 URL 范围

coldfusion - 即使导入证书后,cfhttp 也无法从 https 站点读取数据

multithreading - 在Windows Store App中生成线程会在UI线程中的任何定时等待调用中导致死锁

c# - 在 C# 中实现自己的线程

java - 按优先级调度周期性线程

database - 如何在集群环境中管理 cfc 的状态

coldfusion - 使用 CFHtmlToPdf 将 CFML 转换为 CFScript

C++加入多线程

loops - ColdFusion 在同一代码中循环到看似不同的时间

javascript - 二进制解码为 JavaScript