2

我有一个emails变量,其中包含角色中用户的电子邮件地址列表。该列表不是逗号分隔的。这是我目前拥有的代码:

    public virtual MvcMailMessage AdminNotification()
    {
        var userRoles = Roles.GetUsersInRole("Admin");
        var users = new List<MembershipUser>();
        var emails = new List<String>();
        foreach (var UserName in userRoles)
        {
            var user = Membership.GetUser(UserName, false);
            users.Add(user);
            emails.Add(user.Email);
        }

        return Populate(x =>
        {
            x.Subject = "AdminNotification";
            x.ViewName = "AdminNotification";
            emails.ForEach(user => x.To.Add(user.Email));
        });
    }

我收到一条错误消息'string' does not contain a definition for 'Email'...

我应该用什么代替x.To.Add(user.Email)

更新#1

我可以向预期的收件人发送电子邮件,但邮件正文为空白。消息正文已在视图中构建。在我使用下面答案中的代码之前它正在工作,我怎样才能让它再次工作?

4

3 回答 3

1

更新 #1 的解决方案:

对代码进行了一些小的调整,现在它按预期工作,只需要移动一些东西。这是调整的部分:

var message = new MvcMailMessage {Subject = "AdminNotification"};

foreach (string email in emails)
{
    message.To.Add(email);
    PopulateBody(message, ViewName = "AdminNotification");
}
return message;
于 2014-01-03T06:31:30.417 回答
1

这就是我重写它的方式:

public virtual MvcMailMessage AdminNotification()
{
    string[] userRoles = Roles.GetUsersInRole("Admin");

    IEnumerable<string> emails =
        userRoles.Select(userName => Membership.GetUser(userName, false))
                 .Select(user => user.Email);

    var message = new MvcMailMessage {Subject = "AdminNotification", ViewName = "AdminNotification"};

    foreach (string email in emails)
    {
        message.To.Add(email);
    }
    return message;
}

我希望它有所帮助。

于 2013-12-29T12:50:01.947 回答
1

可以使用原始代码(使用 lambda 表达式)发送电子邮件,尽管它似乎存在使用问题。在代码中的行:

return Populate(x =>
    {
        x.Subject = "AdminNotification";
        x.ViewName = "AdminNotification";
        emails.ForEach(user => x.To.Add(user.Email));
    });

重用电子邮件列表,它是一个字符串列表,因此不是在 .ForEach 中引用用户,而是电子邮件字符串应该是参数(左侧),因此解决方案是:

return Populate(x =>
    {
        x.Subject = "AdminNotification";
        x.ViewName = "AdminNotification";
        emails.ForEach(email => x.To.Add(email));
    });

它可能没有任何帮助,只是想澄清一下.. :)

于 2014-11-13T10:32:14.590 回答