【问题标题】:WCF Service fails to send mail through MailDefinitionWCF 服务无法通过 MailDefinition 发送邮件
【发布时间】:2011-11-03 08:20:43
【问题描述】:
    // 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);
}

我明白了:

值不能为空。参数名称:基本路径

在 System.Web.Util.UrlPath.Combine(String appPath, String basepath, 字符串相对)
在 System.Web.UI.WebControls.MailDefinition.CreateMailMessage(字符串 收件人、字典替换、控件所有者)
在 Damnation.Website.Main.Common.MailTemplating.Server.SendCreationMail(MembershipUser 用户、IServerAccountRequest 请求、控件所有者)
在 Damnation.Website.Main.Common.MailTemplating.Server.SendCreationMail(IServerAccountRequest 请求)
在 Damnation.Website.Main.Business.Model.ServerAccountRequest.UpdateRequestsAfterServerProcessing(IEnumerable`1 结果)

问题是我没有要传递给它的实际控件,我想知道如何设置一个控件来避免这种无意义的异常。我使用的是相对路径...所以这没有任何意义。

拥有该服务的应用程序在 ASP.NET WebForms .NET 4 下。消费者应用程序是一个控制台应用程序,也在 .NET 4 下

【问题讨论】:

    标签: c# wcf email


    【解决方案1】:

    我遇到了同样的问题,我了解到这是因为在尝试执行您的定义时找不到控件的路径。CreateMailMessage。您想创建一个空白的 Web 用户控件。也许这不是最优雅的解决方案,但它确实有效。

    这就是我所做的:

    1) 在您的项目中添加一个 Web 用户控件文件,例如 Test.ascx。

    2) 在您的 .svc 文件中添加以下代码:

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

    3) 将您的定义.CreateMailMessage 行更新为:

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

    您将不再获得基本路径空异常。

    【讨论】:

    • LoadControl 调用出现异常:“此处不允许使用相对虚拟路径”。这是 VS 2015 社区上 .Net 4.5.2 中的控制台应用程序。
    【解决方案2】:

    我遇到了同样的问题,但这是因为我在一个项目 .NET 控制台应用程序上,当我将代码传递给 ASP.NET 时,我在没有创建页面和测试的情况下运行良好。

    【讨论】:

      【解决方案3】:

      我遇到了同样的错误,但对我来说,问题是我对 BodyFileName 和 EmbeddedObjects 使用了相对路径。将它们更改为绝对路径为我修复了此错误。

      【讨论】:

        猜你喜欢
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-19
        • 2013-01-24
        相关资源
        最近更新 更多