I'm trying to send a set of emails using episerver mail. I've written the following as a proof of concept
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);
But it keeps crashing with
Exception has been thrown by the target of an invocation. [Object
reference not set to an instance of an object.
Specifically it can't get a reference to the site. SiteHandler.Instance.CurrentSite
is null
I've tried this as part of a scheduled task (where it ultimately needs to be) and in the context of a page just to try. It's null in both cases.
Has anyone got any idea of how i get this reference. The documentation is obscure for this. I fear it's not possible.
I'm using episerver 7
Many Thanks
EDIT
Digging further into the SDK - the code
EPiServerMailSection.Instance.CurrentSite.SiteId
will return the correct site id. So the scheduler knows the site it just is failing to pick up the site object.
Also the code
SiteHandler.Instance.GetSiteList().Count()
returns a count of 0 so it's clearly not loading a collection of sites somewhere along the line. This seems to be the key issue with it