当前场景:例如,在查询中使用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+电子邮件。
是否有一种方法可以在假脱机文件夹中计数邮件并使用查询总数进行验证?
处理这么多电子邮件的正确方法是什么?
发布于 2016-03-08 14:38:18
您使用的是哪个版本的ColdFusion?我很惊讶你没有遇到超时问题。自ColdFusion 6以来,我们一直将HTML、文本和电子邮件列表保存到单独的数据库中,然后对数据进行后台任务循环,并将其发送到较小的批中。
您考虑过使用事务性电子邮件服务吗?我们最近从Mandrill (因为他们将它滚动到MailChimp)切换到SparkPost (Free =100000 messages/mo)。这种类型的服务将为您提供最佳的统计信息&弹出/读取/单击检测(使用CFHTTP发送40k消息需要大约2秒)。您还可以为您发送的帐户合并使用“标记”,这样您就可以为每个客户端跟踪或设置单独的帐户。(注意:如果使用SMTP API,请确保为每个SMTP客户设置唯一的DNS CNAMES,否则ColdFusion可能使用现有的经过身份验证的连接,并使用错误的SMTP帐户发送消息。)
除了SMTP连接(同时有一条消息),REST API还允许您生成和发布一个包含HTML/文本模板、电子邮件列表、替换参数、活动id、标签、可选头等的JSON数据包。我更喜欢通过这些服务发送,因为它不会导致IP被列入黑名单或导致时间敏感消息的传递延迟。
以下是各种事务性电子邮件提供商的比较图表。
http://socialcompare.com/en/comparison/transactional-emailing-providers-mailjet-sendgrid-critsend
下面是使用SparkPost的REST调用示例。(我提供这个是因为几乎没有第三方服务为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#">https://stackoverflow.com/questions/35859777
复制相似问题