Спулер 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 или текущий код?
У меня есть клиент, они посылают почти 40 тыс. За один раз, еще больше. Я дал несколько учетных записей своему клиенту, иногда они одновременно отправляли два или три пользователя по 40k + 40k+ писем.
Есть ли способ, которым я могу подсчитывать сообщения в папке спулера и проверять общее количество запросов?
Как правильно обрабатывать столько писем?
1 ответ
Какую версию ColdFusion вы используете? Я удивлен, что вы не сталкиваетесь с проблемами тайм-аута. Начиная с ColdFusion 6, мы сохраняли HTML, TEXT и список адресов электронной почты в отдельной базе данных, а затем выполняли цикл фоновых задач над данными и отправляли их небольшими партиями.
Рассматривали ли вы использование транзакционной электронной почты? Недавно мы перешли с Mandrill (потому что они переносят его в MailChimp) на SparkPost (уровень бесплатного доступа = 100000 сообщений в месяц). Этот тип сервиса предоставит вам лучшую статистику и обнаружение отказов / считываний / кликов (и отправка 40 тыс. Сообщений займет около ~2 секунд с использованием CFHTTP.) Вы также можете использовать "теги" для отправляемых вами учетных записей, чтобы вы могли отслеживать или настраивать отдельные учетные записи для каждого клиента. (ПРИМЕЧАНИЕ. Если вы используете SMTP API, не забудьте настроить уникальные DNS CNAMES для каждого клиента SMTP, или ColdFusion может использовать существующее аутентифицированное соединение и отправлять сообщения с использованием неправильной учетной записи SMTP.)
В дополнение к SMTP-соединениям (одно сообщение за раз) доступны API-интерфейсы REST, которые позволяют создавать и публиковать один JSON-пакет, содержащий шаблоны HTML/TEXT, список электронной почты, параметры подстановки, идентификатор кампании, теги, необязательные заголовки и т. Д. Я предпочитаю отправлять через эти сервисы, потому что это не приводит к тому, что мои IP-адреса попадают в черный список и не вызывают задержку доставки чувствительных ко времени сообщений.
Вот сравнительная таблица различных поставщиков транзакционной электронной почты.
http://socialcompare.com/en/comparison/transactional-emailing-providers-mailjet-sendgrid-critsend
Вот пример вызова API REST с использованием SparkPost. (Я предоставляю это, потому что почти никакие сторонние сервисы не предоставляют примеры кода для 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#">