C# 防止SendGrid邮件中的电子邮件地址重复?

C# 防止SendGrid邮件中的电子邮件地址重复?,c#,sendgrid,asp.net-core-2.1,sendgrid-api-v3,C#,Sendgrid,Asp.net Core 2.1,Sendgrid Api V3,使用和SendGrid API v3,如果您意外地包含相同的电子邮件地址两次,则会导致电子邮件根本无法发送 根据SendGrid: 单个个性化设置对象(收件人、抄送或密件抄送字段)中的所有收件人都将看到完全相同的电子邮件,正如该个性化设置中的数据所定义的那样,因此我们不允许在单个个性化设置中这3个数组之间出现重复的电子邮件 例如: var msg = new SendGridMessage(); msg.AddTo("test@example.com");

使用和SendGrid API v3,如果您意外地包含相同的电子邮件地址两次,则会导致电子邮件根本无法发送

根据SendGrid:

单个个性化设置对象(收件人、抄送或密件抄送字段)中的所有收件人都将看到完全相同的电子邮件,正如该个性化设置中的数据所定义的那样,因此我们不允许在单个个性化设置中这3个数组之间出现重复的电子邮件

例如:

        var msg = new SendGridMessage();
        msg.AddTo("test@example.com");
        msg.AddBcc("test@example.com"); // duplicate email address, nothing will be sent
在发送电子邮件之前,我想检查SendGrid
个性化设置
,并删除任何重复的电子邮件

以下是我目前掌握的代码:

        var msg = new SendGridMessage();
        msg.AddTo("test@example.com");
        msg.AddBcc("test@example.com"); //has a duplicate email address, nothing will be sent

        foreach (var p in msg.Personalizations)
        {
            var emails = new List<EmailAddress>();
            emails.AddRange(p.Tos);
            emails.AddRange(p.Ccs);
            emails.AddRange(p.Bccs);

            // find duplicates
            var duplicates = emails.GroupBy(x => x.Email)
                            .Where(g => g.Count() > 1)
                            .Select(y => y.Key)
                            .ToList();

            // remove all but one...
            // remove duplicates from Bccs first, then Ccs, then Tos
            foreach (var d in duplicates)
            {

            }
        }
var msg=new SendGridMessage();
msg.AddTo(“test@example.com");
msg.AddBcc(“test@example.com"); //有重复的电子邮件地址,将不发送任何内容
foreach(消息个性化中的变量p)
{
var=新列表();
电子邮件地址范围(p.Tos);
电子邮件地址范围(p.Ccs);
电子邮件地址范围(p.Bccs);
//查找重复项
var duplicates=emails.GroupBy(x=>x.Email)
.Where(g=>g.Count()>1)
.选择(y=>y.Key)
.ToList();
//删除除一个以外的所有。。。
//首先从BCC、Ccs、Tos中删除重复项
foreach(变量d重复)
{
}
}

我一直在寻找将重复的电子邮件地址减少为唯一的电子邮件地址的最佳方法。有没有人找到一个好方法来强制SendGrid没有重复的电子邮件地址

最好不要通过维护一个你已经添加的所有电子邮件的列表来添加它们,从“收件人”列表开始。如果你不能做到这一点,并且你必须在事后将其删除,请创建上面的优步列表,然后通过抄送和密件抄送删除优步列表中已有的优步列表

var existingEmails = new HashSet<String>();

foreach (String email in MyToList)
{
   if(!existingEmails.ContainsKey(email)
   {
       msg.AddTo(email);
       existingEmails.Add(email);
   }
}

foreach (String email in MyCCList)
{
   if(!existingEmails.ContainsKey(email)
   {
       msg.AddCC(email);
       existingEmails.Add(email);
   }
}

foreach (String email in MyBCCList)
{
   if(!existingEmails.ContainsKey(email)
   {
       msg.AddBCC(email);
       existingEmails.Add(email);
   }
}
var existingEmails=new HashSet();
foreach(MyToList中的字符串电子邮件)
{
如果(!existingEmails.ContainsKey(电子邮件)
{
msg.AddTo(电子邮件);
现有电子邮件。添加(电子邮件);
}
}
foreach(MyCCList中的字符串电子邮件)
{
如果(!existingEmails.ContainsKey(电子邮件)
{
msg.AddCC(电子邮件);
现有电子邮件。添加(电子邮件);
}
}
foreach(MyBCCList中的字符串电子邮件)
{
如果(!existingEmails.ContainsKey(电子邮件)
{
msg.AddBCC(电子邮件);
现有电子邮件。添加(电子邮件);
}
}

如果你想使用上面的代码,在获得副本列表后,你必须
foreach
每个
p.Tos
p.CCs
等。然后检查当前电子邮件地址的副本列表。如果是副本,则将其从列表中删除。你永远不必检查
to
l这是你一直想要的。

最好不要通过维护一个你已经添加的所有电子邮件的列表来添加它们,从“收件人”列表开始。如果你做不到这一点,你必须在事后删除它们,请创建上面的优步列表,然后通过抄送和密件抄送删除优步列表中已经存在的邮件

var existingEmails = new HashSet<String>();

foreach (String email in MyToList)
{
   if(!existingEmails.ContainsKey(email)
   {
       msg.AddTo(email);
       existingEmails.Add(email);
   }
}

foreach (String email in MyCCList)
{
   if(!existingEmails.ContainsKey(email)
   {
       msg.AddCC(email);
       existingEmails.Add(email);
   }
}

foreach (String email in MyBCCList)
{
   if(!existingEmails.ContainsKey(email)
   {
       msg.AddBCC(email);
       existingEmails.Add(email);
   }
}
var existingEmails=new HashSet();
foreach(MyToList中的字符串电子邮件)
{
如果(!existingEmails.ContainsKey(电子邮件)
{
msg.AddTo(电子邮件);
现有电子邮件。添加(电子邮件);
}
}
foreach(MyCCList中的字符串电子邮件)
{
如果(!existingEmails.ContainsKey(电子邮件)
{
msg.AddCC(电子邮件);
现有电子邮件。添加(电子邮件);
}
}
foreach(MyBCCList中的字符串电子邮件)
{
如果(!existingEmails.ContainsKey(电子邮件)
{
msg.AddBCC(电子邮件);
现有电子邮件。添加(电子邮件);
}
}
如果你想使用上面的代码,在获得副本列表后,你必须
foreach
每个
p.Tos
p.CCs
等。然后检查当前电子邮件地址的副本列表。如果是副本,则将其从列表中删除。你永远不必检查
to
l这是你一直想要的