默认情况下,smtp服务器可以在Sitecore web.config中进行配置。但是有可能劫持整个电子邮件发送部分使用不同的方法而不是smtp服务器吗?有某种管道吗?
例如,我想使用其他网络服务发送所有电子邮件,或者我想将所有电子邮件保存到数据库中而不是实际发送它们?
另外一个问题是,内容传递实例是否需要默认发送电子邮件?我会假设所有开箱即用的电子邮件发送都来自内容创作实例吗?
根据我的理解,Sitecore中只有工作流程需要发送电子邮件,并且可以通过更改电子邮件操作进行自定义。 (假设没有电子邮件营销活动模块,没有适用于市场的Webform模块等)
任何见解都会有很大的帮助,谢谢!
--------------更新--------------------- 29/09/2015 ------ --------
我得到了答案,谢谢大家。
基本上我不需要在CDS实例上处理smtp服务器,并且所有电子邮件发送都可以由CAS实例上的管道控制。
然而,当我检查源代码时,只有一个地方“提醒”使用smtp服务器直接发送电子邮件。因此,如果此功能对您很重要,您应该考虑更新此功能。
答案 0 :(得分:3)
是绝对的。
在运行时,在定义SMTPClient
时,您可以通过以下代码设置服务器的属性
SmtpClient client=new SmtpClient("Host");
client.Credentials=new NetworkCredential("username", "password");
MailMessage mailMessage = new MailMessage();
mailMessage.from="sender@gmail.com";
mailMessage.To.Add("recipient@gmail.com");
mailMessage.body="body";
mailMessage.subject="subject";
client.Send(mailMessage);
您可以执行的操作,而不是在代码中硬编码值,您可以从Sitecore项检索值并使用它们,这将允许更好地控制内容编辑器,甚至在功能的不同部分使用不同的SMTP服务器。 / p>
Item emailItem = Sitecore.Context.Database.GetItem("Id of Item");
string from = emailItem["From"];
string to = emailItem["To"];
string server = emailItem["Mail server"];
string subject = emailItem["Subject"];
string message = emailItem["Message"];
Sitecore的SendEmail
又名pipeline
有EXM
ECM
个,如果您采用EXM
路线,您可以覆盖它们。它有两个processors
FillEmail
和SendEmail
您可以使用或删除并添加您自己的processor
以实际发送消息。
可以将电子邮件保存到数据库,或者更确切地说是内容,而不是发送它们。这可以通过Sitecore中的自定义代码或Webforms for Marketers
来实现,其中Save Actions
用于发送电子邮件或保存到数据库,并且配置非常简单。
正如您所说,无需在任何场合发送电子邮件,更多的是确定您要实现的目标,以及发送电子邮件,保存到数据库等是否更具相关性。关于Sitecore的好处是您可以以编程方式创建Items
并将信息存储在那里,除了担心创建数据库表,管理ConnectionStrings
,设置EntityFramework
等。
以下是creating Sitecore Items Programmatically上的简单博客。
发送电子邮件的Sitecore工作流程是可选的,可以通过从Send Email
项目下方删除CommandAction
WorkflowState
项目然后发布来删除。
答案 1 :(得分:1)
拦截所有电子邮件的最简单方法是将Sitecore配置为将所有电子邮件发送到本地托管的SMTP服务器(127.0.0.1),然后使用您的自定义代码从那里获取它们。
有很多免费的SMTP服务器,只需确保您在投入生产之前使用大量电子邮件进行测试。