РЕДАКТИРОВАТЬ: Добавлен пример замены заполнителя.
Я бы предложил написать шаблон в HTML, а затем сохранить этот HTML в вашей базе данных.Затем вы можете просто создать функцию, которая может запросить вашу базу данных, затем заполнить и отправить вашу электронную почту.Это было бы довольно легко.
<cfscript>
// Our mail function.
public Void function genEmail ( required Numeric templateTypeID, required String userEmail, required Struct placeholder ) {
// Created fake query of templates.
emailTemplateQuery = queryNew(
"templatetypeid,templatesubject,templatetext",
"integer,varchar,varchar",
[
{ templatetypeid=1,templatesubject='Welcome',templatetext='<h1>Thanks for registering!</h1><p>[[p1]]</p><p>[[p2]]</p>' },
{ templatetypeid=2,templatesubject='Password Reset',templatetext='<h1>You requested a password reset.</h1><p>[[p1]]</p><p>[[p2]]</p>' },
{ templatetypeid=3,templatesubject='Another Email',templatetext='<h1>You did something.</h1><p>[[p1]]</p><p>[[p2]]</p><p>[[p3]]</p>' }
]
) ;
///////////////////////////////////
// Build the query.
local.sql = "SELECT templatesubject, templatetext FROM emailTemplateQuery WHERE templateTypeID = :templateTypeID" ;
// Which template?
local.params = { templateTypeID = arguments.templateTypeID };
// Query options?
local.queryoptions = {
dbtype="query"
// datasource="myDSN" << Use your DSN for final query.
} ;
// Create a new query and execute it.
local.emailQ = QueryExecute(local.sql, local.params, local.queryoptions ) ;
local.finalEmailString = local.emailQ.templatetext ;
// Let's inject our placeholder info into our email template
for ( var p IN arguments.placeholder ) {
local.finalEmailString = local.finalEmailString.replaceNoCase(
"[[" & p & "]]" ,
arguments.placeholder[p] ,
"All"
) ;
}
// Create a new mail object.
local.sendEmail = new mail() ;
// Save mail body to a variable.
savecontent variable="emailBody" {
writeOutput(local.finalEmailString);
}
// Set From, To, Type, etc.
sendEmail.setFrom("fromMe@domain.com");
sendEmail.setTo(arguments.userEmail);
sendEmail.setType("html");
sendEmail.setSubject(local.emailQ.templatesubject);
// Send the email. So uncomment next line to send.
//sendEmail.send(body=emailBody);
// We don't have to return anything, but for this demo, we want to see what email will be sent.
writeDump(local.emailQ.templatesubject);
writeDump(local.finalEmailString);
}
// To send an email, just call genEmail() and pass the type and who to.
genEmail(1,"bill@beexcellent.com",{"p1":"This is my first replacement.","p2":"This is my second replacement."}) ;
writeoutput("<br><br>");
genEmail(2,"ted@beexcellent.com",{"p1":"This is my third replacement.","p2":"This is my fourth replacement."}) ;
writeoutput("<br><br>");
genEmail(3,"rufus@beexcellent.com",{"p1":"This is my fifth replacement.","p2":"This is my sixth replacement.","p3":"This is my seventh replacement."}) ;
</cfscript>
Это можно немного упростить.Большая часть моего кода была настройка тестовых данных и использование Query Of Query.Вы хотели бы использовать регулярный вызов к вашему источнику данных.Вы также можете более эффективно использовать результаты запроса внутри тега cfmail
.Я настоятельно рекомендую сделать много фильтрации и проверки, прежде чем разрешить что-либо отправлять электронную почту из вашей системы.Вы также можете вернуть код состояния из функции электронной почты, чтобы проверить успешность (или другую информацию).
Вы можете сохранить процесс электронной почты в свой собственный CFC, а затем кэшировать его для использования в своем приложении.
ПРИМЕЧАНИЕ: Я также предпочитаю сценарий тегамдля большинства CF, но моя логика выше может быть преобразована обратно в теги, если вы хотите.
https://cffiddle.org/app/file?filepath=639e2956-a658-4676-a0d2-0efca81d7c23/ce5629c9-87e6-4bff-a9b8-86b608e9fc72/c8d38df7-f14d-481f-867d-2f7fbf3238f2.cfm
РЕЗУЛЬТАТЫ: С моими выше тестами,Вы получаете электронные письма со следующим HTML.
genEmail(1,"bill@beexcellent.com",{"p1":"This is my first
replacement.","p2":"This is my second replacement."})
Добро пожаловать
Спасибо за регистрацию!
Это моя первая замена.
Это моя вторая замена.
genEmail(2,"ted@beexcellent.com",{"p1":"This is my third
replacement.","p2":"This is my fourth replacement."})
Сброс пароля
Вы запросили сброс пароля.
Это моя третья замена.
Это моя четвертая замена.
genEmail(3,"rufus@beexcellent.com",{"p1":"This is my fifth
replacement.","p2":"This is my sixth replacement.","p3":"This is my
seventh replacement."})
Другое письмо
Вы что-то сделали.
Это моя пятая замена.
Это моя шестая замена.
Это моя седьмая замена.