Служба WCF не может отправить почту через MailDefinition - PullRequest
6 голосов
/ 25 августа 2011
    // stuff......

    return SendCreationMail(Membership.GetUser((Guid)request.UserEntityId), request, new Control());
}

private const string TemplateRoot = "~/app_shared/templates/mail/";
private const string ServerRoot = TemplateRoot + "server/";

public static bool SendCreationMail(MembershipUser user, IServerAccountRequest request, Control owner)
{
    var definition = new MailDefinition { BodyFileName = string.Concat(ServerRoot, "creation.htm"), IsBodyHtml = true };
    var subject = "New {0} account created!".FormatWith(request.ServerApplicationContract.Id);

    var data = ExtendedData(DefaultData, subject, user);

    data.Add("<%ServerApplication%>", request.ServerApplicationContract.Id);
    data.Add("<%ServerApplicationName%>", request.ServerApplicationContract.ApplicationName);
    data.Add("<%AccountUsername%>", request.AccountUsername);

    data.Add("<%ServerInfo%>", "/server/{0}/info".FormatWith(request.ServerApplicationContract.Id.ToLower()));

    return definition.CreateMailMessage(user.Email, data, owner).Send(subject, ApplicationConfiguration.MailSenderDisplayName);
}

Я получаю:

Значение не может быть нулевым.Имя параметра: basepath

в System.Web.Util.UrlPath.Combine (String appPath, String basepath, String относительный)
в System.Web.UI.WebControls.MailDefinition.CreateMailMessage (строковые получатели, IDictionaryЗамены, владелец элемента управления)
в Damnation.Website.Main.Common.MailTemplating.Server.SendCreationMail (пользователь MembershipUser, запрос IServerAccountRequest, владелец элемента управления)
в Damnation.Website.Main.Common.MailTemplating.Crever.ServerЗапрос IServerAccountRequest)
на Damnation.Website.Main.Business.Model.ServerAccountRequest.UpdateRequestsAfterServerProcessing (результаты IEnumerable`1)

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

Приложение, имеющее службу, находится под ASP.NET WebForms .NET 4. Потребительское приложение является консольным приложением также под .NET 4

Ответы [ 3 ]

4 голосов
/ 06 октября 2011

У меня была та же проблема, и я узнал, что это происходит, потому что он не может найти путь к элементу управления при попытке выполнить ваше определение. CreateMailMessage. Вы хотите создать пустой веб-пользовательский элемент управления. Возможно, это не самое элегантное решение, но оно работает.

Вот что я сделал:

1) Добавьте файл веб-контроля пользователя в свой проект, например Test.ascx.

2) Добавьте в ваш файл .svc следующий код:

Page page = new Page();

Test test = (Test)page.LoadControl("Test.ascx");

3) Обновите определение. Создайте строку MailMessage:

return definition.CreateMailMessage(user.Email, data, test).Send(subject, ApplicationConfiguration.MailSenderDisplayName);

Вы больше не получите исключение нулевого базового пути.

0 голосов
/ 31 мая 2019

У меня была та же ошибка, но проблема для меня заключалась в том, что я использовал относительные пути для моих BodyFileName и EmbeddedObjects.Изменение их на абсолютные пути исправило эту ошибку для меня.

0 голосов
/ 19 июня 2015

У меня была та же проблема, но это было из-за того, что я работал над консольным приложением .NET проекта, когда я передавал код в ASP.NET не так хорошо, без создания Page и Test.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...