Предотвратить дублирование адресов электронной почты в сообщении SendGrid? - PullRequest
0 голосов
/ 04 декабря 2018

Использование SendGrid для библиотеки C # и SendGrid API v3, если вы случайно включите один и тот же адрес электронной почты дважды, это приведет к тому, что сообщение вообще не будет отправлено.

Согласно SendGrid документация :

Все получатели в одном объекте персонализации (в полях to, cc или bcc) будут видеть одно и то же сообщение электронной почты, как определено данными вэта персонализация, поэтому мы не разрешаем дублирование электронных писем между этими тремя массивами в одной персонализации.

Например:

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

До отправки писем я бы хотелпроверьте SendGrid Personalizations и удалите все дублирующиеся электронные письма.

Вот код, который у меня есть на данный момент:

        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)
            {

            }
        }

Я застрял на лучшем способ уменьшить количество дублирующихся адресов электронной почты внизодному уникальному.Кто-нибудь нашел хороший способ обеспечить отсутствие дублирующих адресов электронной почты с SendGrid?

1 Ответ

0 голосов
/ 04 декабря 2018

Лучше не добавлять их, сохраняя список всех писем, которые вы уже добавили, начиная со списка Кому.Если вы не можете этого сделать, и вам нужно удалить их по факту, создайте этот список убер, приведенный выше, а затем пройдите через CC, а затем BCC, удаляя те, которые уже есть в списке убер.

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);
   }
}

Если вы хотите сделать это с кодом, указанным выше, вам нужно будет foreach каждый из p.Tos и p.CCs и т. Д. После получения списка дубликатов.Затем проверьте список дубликатов для текущего адреса электронной почты.Если это дубликат, удалите его из списка.Вы никогда не должны проверять список To, как вы всегда хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...