我有一个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中构建。它在我使用下面答案中的代码之前工作,我怎样才能让它再次运行?
答案 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));
});
它可能没有任何帮助,只是想澄清......:)