使用MvcMailer将电子邮件发送到多个地址

时间:2013-12-29 12:33:03

标签: c# asp.net-mvc email mvcmailer

我有一个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

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

3 个答案:

答案 0 :(得分: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;
}

我希望它有所帮助。

答案 1 :(得分:1)

更新#1的解决方案:

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

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

foreach (string email in emails)
{
    message.To.Add(email);
    PopulateBody(message, ViewName = "AdminNotification");
}
return message;

答案 2 :(得分: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));
    });

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