2016-03-08 58 views
2

当前场景: 使用cfmail标记查询例如。coldfusion 11假脱机程序和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

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

您是否考虑过使用交易电子邮件服务?我们最近从Mandrill切换到SparkPost(Free tier = 100,000 messages/mo),因为它们将它们转换为MailChimp。这种类型的服务将为您提供最佳状态&跳出/读取/点击检测(使用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" = "[email protected]", "name"="User 1 Name"}, "substitution_data"= {"fullname"="Mr. User 1"}}, 
     {"address" = {"email" = "[email protected]", "name"="User 2 Name"}, "substitution_data"= {"fullname"="Ms. User 2"}}, 
    ], 
    "content" = { 
     "tags" = ["testing", "demo"], 
     "from" = {"email"="[email protected]", "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#"> 
+0

感谢您的答复....使用'的ColdFusion 11 IM,视窗2012,sendgrid' –

+0

所以你说,如果即时通讯API在我的情况下即时通讯使用sendgrid它可以发送40K在一个拍摄? –

+0

使用SendGrid的“mail.send”端点,它们只允许“每个API请求最多10,000个收件人”。您必须执行4个以上的帖子才能发送一封电子邮件作业。他们还需要将收件人地址发布到单独的表单字段中(ugh,10,000+表单字段?)https://sendgrid.com/docs/API_Reference/Web_API/mail.html它似乎没有允许替换参数(即hello {name})。 –