尝试使用episerver邮件以编程方式发送邮件

时间:2013-04-16 16:03:16

标签: c# episerver episerver-7

我正在尝试使用episerver邮件发送一组电子邮件。我写了以下内容作为概念证明

        ISite site = (Site)SiteHandler.Instance.CurrentSite;
       ICategory category = site.Categories[0]; //..  hack I know

        Message message = new Message(subject: "Test 1",
                                        bodyText: "Test 1",
                                        bodyHtml: "Test 1",
                                        container: GetRecipientContainer(),
                                        fromAddress: "demo@demo.com",
                                        fromName: "Email User",
                                        addParametersToRedirectedLinks: false,
                                        category: category,
                                        site: site);

        var returnMessage = EPiServerMailHandler.Send(message, true);

但它一直在崩溃

  

调用目标抛出了异常。 [宾语   引用未设置为对象的实例。

具体而言,它无法获得对该网站的引用。 SiteHandler.Instance.CurrentSite为空

我已经尝试过将此作为计划任务的一部分(最终需要),并在页面的上下文中尝试。在这两种情况下它都是空的。

有没有人知道我如何得到这个参考。文档对此不明确。我担心这是不可能的。

我正在使用episerver 7

非常感谢

修改

进一步深入SDK - 代码

EPiServerMailSection.Instance.CurrentSite.SiteId

将返回正确的网站ID。因此,调度程序知道该站点无法获取站点对象。

还有代码

SiteHandler.Instance.GetSiteList().Count()

返回0的计数,因此它显然没有加载沿线某处的网站集合。这似乎是它的关键问题

1 个答案:

答案 0 :(得分:1)

好的 - 我终于解决了这个问题。

  1. 您必须至少在episerver邮件中创建一个部分。如果没有,则CurrentSite为null
  2. 获得该网站后,可以从以下代码中获取该类别。然后send方法停止错误。它是否发送邮件是一个悬而未决的问题 - 我似乎有SMPT服务器/垃圾邮件过滤器类型问题。哦,好吧。

    ISite site = (ISite)SiteHandler.Instance.CurrentSite;
    ICategory category = EPiServerMailModule.Instance.GetSiteCategory(site);