Лучший подход для заказа электронной почты в C # 4.0 для максимальной задержки и предотвращения возможной ложной тревоги спама - PullRequest
0 голосов
/ 19 ноября 2011

Я отправлю всем своим зарегистрированным игрокам очень важное объявление.Теперь я хочу заказать все электронные письма в моей базе данных.Этот порядок будет выглядеть как

first@hotmail.com
first@gmail.com
first@yahoo.com
first@mymail.com

, тогда начинается вторая строка

second@hotmail.com
second@gmail.com
second@yahoo.com
second@mymail.com

Цель заказа - отправить электронное письмо на домен с максимально возможной задержкой.(повторная отправка электронного письма на адрес @ domain1, @ domain2, ... @ domain99, @ domain1, @ domain2. Я сделаю заказ только 1 раз, поэтому время, которое он займет, не важно.электронные письма.

Я хочу сделать это с помощью wpf-приложения c # 4.0. Какой будет наилучший из возможных подходов. Можно предположить, что в каждом письме есть идентификатор. Это упростит заказ.

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011

Это позволит отсортировать ваши адреса электронной почты, предполагая, что переменная электронная почта здесь равна IEnumerable<string>.

email
    .OrderBy(e => e.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries).ElementAt(0))
    .ThenBy(e => e.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries).ElementAt(1));

Однако, в зависимости от того, сколько комбинаций адресов электронной почты и доменов, вы, вероятно, все еще будете повторять эторезультирующий набор слишком быстрый, чтобы хосты электронной почты не выходили из себя, поэтому вы, вероятно, также захотите добавить некоторую задержку в цикл обработки.

1 голос
/ 19 ноября 2011

Вот один из подходов, но он требует, чтобы вы сохранили дополнительное поле mailorder с каждой записью пользователя.

Просмотрите каждую запись пользователя и добавьте ее идентификатор в список списков, где каждый изsublists состоит из адреса электронной почты для конкретного хоста.Таким образом, у вас будет один список для gmail.com, один для yahoo.com и т. Д.

Рассчитайте длину «самого короткого» списка, превышающего некоторый разумный минимум, чтобы ни в одном списке не было больше 2 или 3раз количество предметов в этом коротком списке.Для каждого списка рассчитайте количество адресов за раунд, которое нужно взять из этого списка, используя верхний предел длины списка, деленный на длину «самого короткого» списка.Должно быть не меньше 1. Вызовите itemCount i для списка i.

Установите mailOrder в 0.

Goчерез список списков, извлекая первые itemCount i идентификаторы из каждого списка i и обновляя поле mailorder для соответствующих записей со значением переменной mailOrder,Увеличивайте mailOrder на единицу и повторяйте, пока все списки не будут исчерпаны.

При отправке электронных писем сортируйте записи пользователей по столбцу mailorder (было бы неплохо иметь индекс для этого, чтобы сделать его быстрым).Периодически перезапускайте алгоритм для учета новых пользователей, которым может быть предоставлено временное mailorder на единицу больше, чем максимальное mailorder.

Альтернативный, возможно, лучший, подход будет заключаться в фиксированном максимальном числеколичество писем в каждом раунде до тех пор, пока список не будет исчерпан, и отправляйте по одному электронному письму на все адреса конкретного хоста (возможно, используя Bcc) сразу в каждом раунде.Это поможет минимизировать количество электронных писем, которые вы на самом деле отправляете.Выберите количество адресов за раунд в зависимости от того, что вы можете безопасно отправить на этот почтовый хост, не выходя за его пределы.

...