2013-04-16 1 views
1

Я пытаюсь отправить набор сообщений электронной почты, используя почту episerver. Я написал следующее в качестве доказательства концепцииПопытка и отказ от программной отправки почты с использованием почты 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: "[email protected]", 
             fromName: "Email User", 
             addParametersToRedirectedLinks: false, 
             category: category, 
             site: site); 

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

Но он продолжает врезаться с

Исключение было брошено на цели вызова. [Объект ссылка не установлена ​​в экземпляр объекта.

В частности, он не может получить ссылку на сайт. SiteHandler.Instance.CurrentSite is null

Я пробовал это как часть запланированной задачи (где это в конечном счете должно быть) и в контексте страницы, чтобы попробовать. В обоих случаях это не имеет значения.

У кого-нибудь есть представление о том, как я получаю эту ссылку. Документация неясна для этого. Боюсь, это невозможно.

Я использую EPiServer 7

Большое спасибо

EDIT

Копаем дальше в SDK - код

EPiServerMailSection.Instance.CurrentSite.SiteId 

будет возвращать правильный идентификатор сайта. Поэтому планировщик знает сайт, на котором он просто не может найти объект сайта.

Также код

SiteHandler.Instance.GetSiteList().Count() 

возвращает число 0, так что это явно не загружая коллекцию сайтов где-то вдоль линии. Это, по-видимому, ключевой вопрос с ним

+1

Вы имеете в виду 'SiteHandler.Instance' является нулевым или' SiteHandler.Instance.CurrentSite'? Первый, который, я думаю, не может быть нулевым, поскольку он создается в статическом конструкторе .. если вы его вручную не установили, не так ли? – Lanorkin

+0

Извините - исправление комментария (удалено). Экземпляр не является нулевым - это просто CurrentSite. Менее таинственный –

+0

EPiMail внутренне использует 'spEPiServerMailSiteGetSiteList' для получения списка сайтов. Вы можете просмотреть его через свой db, чтобы понять, пока он возвращает пустой список – Lanorkin

ответ

1

ОК - Я, наконец, исправил это.

  1. У вас должен быть хотя бы один раздел, созданный в почтовой почте. Без этого CurrentSite имеет значение
  2. После того, как у вас есть сайт, тогда категория может быть получена из приведенного ниже кода. Затем метод отправки останавливает ошибку. Отправляет ли он почту или нет, это открытый вопрос на данный момент - у меня, похоже, проблемы с фильтром SMPT-сервера/спама. Ну что ж.

    ISite site = (ISite)SiteHandler.Instance.CurrentSite; 
    ICategory category = EPiServerMailModule.Instance.GetSiteCategory(site); 
    
Смежные вопросы