【问题标题】:Can I replace Sitecore Email Sending Service?我可以替换 Sitecore 电子邮件发送服务吗?
【发布时间】:2015-09-29 08:24:08
【问题描述】:

默认情况下 smtp 服务器可以在 Sitecore web.config 中配置。但是,是否可以劫持整个电子邮件发送部分以使用不同的方法而不是 smtp 服务器?有什么管道吗?

例如,我想使用另一个 Web 服务来发送所有电子邮件,或者我想将所有电子邮件都保存到数据库中而不是实际发送?

另外一个问题是,内容交付实例是否需要默认发送电子邮件?我会假设所有开箱即用的电子邮件发送都来自内容创作实例,对吗?

据我了解,Sitecore 中只有工作流程需要发送电子邮件,并且可以通过更改电子邮件操作进行自定义。 (假设没有电子邮件营销模块,没有市场网络表单模块等)

任何见解都会有很大帮助,谢谢!

-------------更新----------29/09/2015------ --------

我已经得到答案了,谢谢大家。

基本上我不需要在 CDS 实例上处理 smtp 服务器,并且所有电子邮件发送都可以由 CAS 实例上的管道控制。

但是,当我查看源代码时,只有一个地方“提醒”使用 smtp 服务器直接发送电子邮件。所以如果这个函数对你很重要,你应该考虑更新这个函数。

【问题讨论】:

    标签: email smtp sitecore


    【解决方案1】:

    绝对是的。

    在运行时定义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 服务器。

    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 的 EXM 又名 ECM 之外,还有一个 SendEmail pipeline,如果您采用 EXM 路线,您可以覆盖它。它有两个processorsFillEmailSendEmail,您可以使用或删除并添加您自己的processor 来实际发送消息。

    可以将电子邮件保存到数据库或内容中,而不是发送它们。这可以通过 Sitecore 或 Webforms for Marketers 中的自定义代码来实现,Save Actions 用于发送电子邮件或保存到数据库,并且配置非常简单。

    正如您所说,无需每次都发送电子邮件,更多的是确定您要实现的目标以及发送电子邮件、保存到数据库等是否更相关。 Sitecore 的伟大之处在于您可以通过编程方式创建 Items 并将信息存储在其中,省去您创建数据库表、管理 ConnectionStrings、设置 EntityFramework 等的烦恼。

    这是creating Sitecore Items Programmatically 上的一个简单博客。

    Sitecore 工作流发送电子邮件是可选的,可以通过从 WorkflowState 项目下方删除 Send Email CommandAction 项目然后发布来删除。

    【讨论】:

    • 感谢您的回答。但是,如果电子邮件发送来自我的代码,那也没关系。我试图找出使用 smtp 服务器的内部 Sitecore 电子邮件发送地点,并想看看我是否可以劫持那些。但是您后来关于 EXM、工作流程和 WFFM 的回答有点回答了我的问题,基本上如果网站上没有任何自定义电子邮件发送,所有电子邮件发送都来自 CAS,主要可以使用 piepelines 进行设置。
    • 是的 - 你可以通过管道发送它。值得一提的是,WFFM、Workflow 和 EXM 都包含项目上的 MailSettings 字段(邮件服务器、发件人、收件人、用户名、密码等)。发送电子邮件保存操作上的 WFFM、发送电子邮件操作项上的工作流和信使更新电子邮件项上的 EXM。因此,您在此处输入 CAS 的详细信息
    【解决方案2】:

    拦截所有电子邮件的最简单方法是将 Sitecore 配置为将所有电子邮件发送到本地托管的 SMTP 服务器 (127.0.0.1),然后使用您的自定义代码从那里获取它们。

    有很多免费的 SMTP 服务器,只需确保在投入生产之前使用大量电子邮件对其进行测试。

    【讨论】:

      猜你喜欢
      • 2016-01-18
      • 2013-11-11
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 2021-07-07
      相关资源
      最近更新 更多