powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / EmailSender в asp.net mvc
71 сообщений из 71, показаны все 3 страниц
EmailSender в asp.net mvc
    #38722931
RDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDS
Гость
Ребят, поделитесь опытом. Как реализовать отправку Email наиболее правильно, реализуя следующий сценарий:
1) Пользователь вносит заявку, заполняя поля формы;
2) Нажимает кнопку Сохранить;
3) Запускается действие контроллера, там заявка сохранятся в базе через репозиторий.
4) .... и теперь надо разослать копии писем всем заинтересованным лицам...
Где это надо делать? Там же в методе(action) контроллера? Или в методе создать объект Task, и в параллельном потоке пускай делает рассылку?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723045
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RDSГде это надо делать?

добавляете задание шедулеру, в шедулере реализуете обработку очереди и отправку писем.

подробней:

http://www.quartz-scheduler.net/

http://stackoverflow.com/questions/6647272/how-to-setup-quartz-net-for-scheduling-emails

...
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723468
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttдобавляете задание шедулеру, в шедулере реализуете обработку очереди и отправку писем.Планировщик-то тут зачем? Разовая же акция. Очередь же тут была бы к месту, но тащить целую очередь ради банальной отправки писем десятку-другому получателей считаю несколько чрезмерным.

RDS, не усложняй сейчас параллельными потоками, репозиториями и прочей мишурой. Отправляй всё как есть, в контроллере. И очень рекомендую использовать Postmark .
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723536
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучhVosttдобавляете задание шедулеру, в шедулере реализуете обработку очереди и отправку писем.Планировщик-то тут зачем? Разовая же акция.
Не согласен. Не известна реальная нагрузка на сайт, чтобы утверждать, что это "разовая акция". На сайте могут в течении минуты сотни, тысячи заявок создаваться. У них могут меняться статусы и прочие атрибуты, на это так же нужна реакция. Самый правильный способ - способ, предложенный hVostt.

P.S. По теме вопроса UserManager<TUser, TKey>.SendEmailAsync (вот тут в красках http://codearticles.ru/articles/2460)
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723548
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучПланировщик-то тут зачем? Разовая же акция.

Дело не в "разовости" акции, а в том, что время отправки электронной почты не детерменировано (тем более куче адресатам). В задачу веб-сервера входит как можно быстрее обработать запрос и вернуть ответ пользователю. Ещё раз подчеркну, как можно быстрее . Поэтому лучше отдать отправку писем шедулеру.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723550
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723556
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВ задачу веб-сервера входит как можно быстрее обработать запрос и вернуть ответ пользователю.разве в случае Task это будет не так?
Да, будет израсходован один фоновый поток веб-сервера, но зато не надо лишних телодвижений (при небольшой, понятно, нагрузке отправки почты)
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723618
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДа, будет израсходован один фоновый поток веб-сервера, но зато не надо лишних телодвижений (при небольшой, понятно, нагрузке отправки почты)
Два потока на реквест - это жирно для нагруженных систем. Если тебя устраивает такой подход и кол-во писем в минуту стремится к нулю, делай так. Но я бы не стал применять такой подход. Отдельная песочница для процессинга - это лучшее, что можно предложить.

P.S. hVostt, спс
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723643
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУДва потока на реквест - это жирно для нагруженных систем. Если тебя устраивает такой подход и кол-во писем в минуту стремится к нулю, делай так.Я как раз и спрашивал про низконагруженную (письмами) систему. Ведь как у ТС с этим - мы не знаем.

А почему два потока? Первый же освободится (для приема новых реквестов). Второй не будет из пула потоков для обработки реквестов.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723853
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proразве в случае Task это будет не так?
Да, будет израсходован один фоновый поток веб-сервера, но зато не надо лишних телодвижений (при небольшой, понятно, нагрузке отправки почты)

а почему сразу не делать по уму, не понимаю? принцип "так ведь работает же и так" не уместен. делать правильно и хорошо надо превращать в крепкую привычку, тогда потом проблем не будет.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723855
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА почему два потока? Первый же освободится (для приема новых реквестов). Второй не будет из пула потоков для обработки реквестов.

пожалуйста, прочитай посыл топикастера, процитирую на всякий случай кусочек:

авторРебят, поделитесь опытом. Как реализовать отправку Email наиболее правильно

зачем ему подкидывать заведомо не хорошие, не качественные решения? я думаю, что как отправить почту в принципе он итак знает.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723866
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttа почему сразу не делать по уму, не понимаю? принцип "так ведь работает же и так" не уместенВ данном случае я подразумеваю другой принцип - не плодить лишних сущностей. То есть для того, чтобы сделать "по уму", нужно будет внести дополнительную зависимость от сторонней библиотеки, уменьшая надежность, понятность, сопровождаемость системы.

То есть не всегда чтобы убить муху есть смысл применять РПГ. При этом я оговариваю - при условии ненагруженной (письмами) системы. Спрашиваю не сколько в плане архитектуры, сколько в техническом плане для общего развития, какими это подводными камнями может быть чревато (с теми же потоками)

А очереди сообщений я организовывал, я понимаю преимущества централизации обработки
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38723916
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProhVosttа почему сразу не делать по уму, не понимаю? принцип "так ведь работает же и так" не уместенВ данном случае я подразумеваю другой принцип - не плодить лишних сущностей. То есть для того, чтобы сделать "по уму", нужно будет внести дополнительную зависимость от сторонней библиотеки, уменьшая надежность, понятность, сопровождаемость системы.

То есть не всегда чтобы убить муху есть смысл применять РПГ. При этом я оговариваю - при условии ненагруженной (письмами) системы. Спрашиваю не сколько в плане архитектуры, сколько в техническом плане для общего развития, какими это подводными камнями может быть чревато (с теми же потоками)

А очереди сообщений я организовывал, я понимаю преимущества централизации обработки

Просто человек задаётся вопросами как лучше, и как правильно, а не вопросом как отправить почту из контроллера, какой-нибудь одинокий е-мейл, раз в пол года. Речь идёт о поступающих заявках и рассылке, значит дело пахнет жареным
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724014
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПоэтому лучше отдать отправку писем шедулеру.Ты ж понимаешь, что планировщик сделан для того, чтобы ему можно было сказать "выполни такое-то действие через 45 минут, а вот другое действие выполняй каждые два часа по будням". Ничего из этого в данном случае не нужно. Нужно уметь отложенно (и то это под большим вопросом) отправлять письма. Отправить и забыть, ничего больше не повторять.

Посему, планировщик тут совершенно не в кассу. Можно, конечно, воткнуть какую-нибудь MSMQ (или RabbitMQ, или ZeroMQ, или еще что-нибудь), написать отдельный Windows Service, который будет выполнять всю бэкэндную работу и возгордиться крутой архитектурой, но ТСу этого сейчас не надо.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724016
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНе согласен. Не известна реальная нагрузка на сайт, чтобы утверждать, что это "разовая акция". На сайте могут в течении минуты сотни, тысячи заявок создаваться.Нагрузка будет мизерная, более чем уверен. Не нужно заниматься интеллектуальным онанизмом и придумывать решения несуществующих проблем.
МСУУ них могут меняться статусы и прочие атрибуты, на это так же нужна реакция.Об этом в исходном сообщении вообще ни слова не было сказано.
МСУСамый правильный способ - способ, предложенный hVostt.Дык нет же. Планировщик тут не нужен.
МСУP.S. По теме вопроса UserManager<TUser, TKey>.SendEmailAsync (вот тут в красках http://codearticles.ru/articles/2460) Безотносительно текущей задачи -- это прэлэстно, я считаю. Мало того, что отправка писем -- совершенно ортогональная по отношению к Identity Management функциональность, так еще и API традиционно придуман индусами-укурками. Ни заголовков, ни вложений, ни альтернативных представлений, ни кодировок.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724024
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RDS4) .... и теперь надо разослать копии писем всем заинтересованным лицам...
их много?
нужны ли гарантии отправки письма? вариант1 - отправить один раз и пофик на ошибку отправки, вариант2 - отправить, перехватить ошибку, попробовать еще раз через 5 минут
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724027
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучПланировщик-то тут зачем? Разовая же акция. Очередь же тут была бы к месту, но тащить целую очередь ради банальной отправки писем десятку-другому получателей считаю несколько чрезмерным.

RDS, не усложняй сейчас параллельными потоками, репозиториями и прочей мишурой. Отправляй всё как есть, в контроллере. И очень рекомендую использовать Postmark .
разовая? а ошибки отправки? а ваш Postmark и есть "планировщик"/"очередь", только вне рамок реализуемой системы, определитесь уже - нужен он или нет
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724154
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нет трудностей - мы их выдумаем
софистика наше все
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724209
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиЕсли нет трудностей - мы их выдумаем
софистика наше все

кого-то ты мне напоминаешь

YouTube Video
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724237
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучМожно, конечно, воткнуть какую-нибудь MSMQ (или RabbitMQ, или ZeroMQ, или еще что-нибудь), написать отдельный Windows Service, который будет выполнять всю бэкэндную работу и возгордиться крутой архитектурой, но ТСу этого сейчас не надо.
Так об этом и речь. Нужна отдельная песочница для процессинга, а что это будет, вин сервис, вин шедулер или кварц - дело десятое.

НахлобучНе нужно заниматься интеллектуальным онанизмом и придумывать решения несуществующих проблем.

НахлобучНагрузка будет мизерная, более чем уверен.

Шедеврально.

НахлобучМСУУ них могут меняться статусы и прочие атрибуты, на это так же нужна реакция.Об этом в исходном сообщении вообще ни слова не было сказано.
Предположить это запрещает религия? В исходных сообщениях, обычно, мало что оговаривается. И если такое понадобится (а такое понадобится) - это отлично ляжет в архитектуру email процессора.

НахлобучМСУСамый правильный способ - способ, предложенный hVostt.Дык нет же. Планировщик тут не нужен.
Еще как нужен. Банально по каким-то сетевым или иным причинам обвалилась отправка конкретного письма. Всё, жуём траву на лугу? Тебе бы код писать, а не архитектурой заниматься :)

НахлобучМСУP.S. По теме вопроса UserManager<TUser, TKey>.SendEmailAsync (вот тут в красках http://codearticles.ru/articles/2460) Безотносительно текущей задачи -- это прэлэстно, я считаю. Мало того, что отправка писем -- совершенно ортогональная по отношению к Identity Management функциональность, так еще и API традиционно придуман индусами-укурками.
Что значит "безотносительно текущей задачи"? Безотносительно текущей задачи могу предложить тебе форум кухарок. А относительно текущей задачи, UserManager.SendEmailAsync отличное решение. В API не увидел никакого ужаса, удобный инструмент, раз в 500 удобнее, чем древний унылый мембершип.

НахлобучНи заголовков, ни вложений, ни альтернативных представлений, ни кодировок.
Присаживайся, двойка. IIdentityMessageService .
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724305
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЕще как нужен. Банально по каким-то сетевым или иным причинам обвалилась отправка конкретного письма. Всё, жуём траву на лугу? Тебе бы код писать, а не архитектурой заниматься :)И вот тут планировщик не подходит абсолютно, от слова совсем.

Если делать надежную систему отправки уведомлений, то, очевидно, должна быть БД отправляемых уведомлений и очередь, в которую с засовывают сообщения (от слова Message из Message Queue) типа "отправь уведомление #113247". На другой стороне ее слушает отправлятель (или пул отправлятелей), который эти уведомления по очереди публикует. В случае ошибки сообщение кладется в отдельную retry-очередь, где они лежат определенное время (и даже здесь планировщик не нужен -- messaging-системы и сами с этим прекрасно справляются) и потом перемещаются обратно в основную очередь.

Обработка транзакционности и ситуации с превышением порогового числа повторов отправки и реакции на это событие компонентов системы остается на усмотрение читателя.

МСУВ API не увидел никакого ужаса, удобный инструмент, раз в 500 удобнее, чем древний унылый мембершип.Удобный для песочницы, да. Еще раз повторяю: отправка писем -- совершенно ортогональная по отношению к Identity Management функциональность. Ну и:
НахлобучНи заголовков, ни вложений, ни альтернативных представлений, ни кодировок.
А вот это --
МСУПрисаживайся, двойка. IIdentityMessageService .курам на смех. Покажи-ка мне, по пунктам, как мне с помощью этого уныния:

Установить заголовок. Например, List-Unsubscribe, который для каждого типа письма свой и должен передаваться извне

Добавить формируемые извне же вложения

Отправить письмо одновременно в HTML и в Plaintext

Как извне указать Content-Encoding
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724309
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77а ваш Postmark и есть "планировщик"/"очередь", только вне рамок реализуемой системы, определитесь уже - нужен он или нет Разницу между "планировщиком" и "очередью" понимаешь?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724362
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучА вот это --
МСУПрисаживайся, двойка. IIdentityMessageService .курам на смех. Покажи-ка мне, по пунктам, как мне с помощью этого уныния:

Установить заголовок. Например, List-Unsubscribe, который для каждого типа письма свой и должен передаваться извне

Добавить формируемые извне же вложения

Отправить письмо одновременно в HTML и в Plaintext

Как извне указать Content-Encoding


Ты из какой берлоги вылез?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class EmailService : IIdentityMessageService
    {
        public Task SendAsync(IdentityMessage message)
        {
            // Plug in your email service here to send an email.
            return Task.FromResult(0);
        }
    }



И отправляй тут хоть Аватара в блю-рей...

Пипец, ну неужели лень хоть немножечко углубиться в тему, прежде чем яростно бросаться в спор? Дожили.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724370
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучИ вот тут планировщик не подходит абсолютно, от слова совсем.

Если делать надежную систему отправки уведомлений, то, очевидно, должна быть БД отправляемых уведомлений и очередь, в которую с засовывают сообщения (от слова Message из Message Queue) типа "отправь уведомление #113247". На другой стороне ее слушает отправлятель (или пул отправлятелей), который эти уведомления по очереди публикует. В случае ошибки сообщение кладется в отдельную retry-очередь, где они лежат определенное время (и даже здесь планировщик не нужен -- messaging-системы и сами с этим прекрасно справляются) и потом перемещаются обратно в основную очередь.

Обработка транзакционности и ситуации с превышением порогового числа повторов отправки и реакции на это событие компонентов системы остается на усмотрение читателя.

Выходи из судорга и прекращай нести бред.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724393
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучМСУЕще как нужен. Банально по каким-то сетевым или иным причинам обвалилась отправка конкретного письма. Всё, жуём траву на лугу? Тебе бы код писать, а не архитектурой заниматься :)И вот тут планировщик не подходит абсолютно, от слова совсем.
Тут планировщик подходит как нельзя кстати. Абсолютно как нельзя кстати.

НахлобучЕсли делать надежную систему отправки уведомлений, то, очевидно, должна быть БД отправляемых уведомлений и очередь, в которую с засовывают сообщения (от слова Message из Message Queue) типа "отправь уведомление #113247".
Во-первых, очередью может быть обычная таблица в БД. Во-вторых, можно ничего этого не делать, а уведомлять по признаку в БД. Признаком может быть любая логическая конструкция в соответствии с требуемой бизнес логикой. Начиная от смены статусов заявки, кончая какими-то иными типами. И никакие очереди тут даром не нужны. После успешной отправки сообщения выставляется флаг отправленного уведомления. Никакой магии, конструкция проста как мир и надежна, как камень.

НахлобучМСУВ API не увидел никакого ужаса, удобный инструмент, раз в 500 удобнее, чем древний унылый мембершип.Удобный для песочницы, да. Еще раз повторяю: отправка писем -- совершенно ортогональная по отношению к Identity Management функциональность.
Десятый раз говорю, ASP.NET Identity имеет самое прямое отношение к отсылке сообщений. Почему? Потому что есть встроенный внятный функционал. И если автору всё-таки захочется отправить сообщения прям из сайта по месту, то это самый подходящий вариант сделать это. При условии, что используется ASP.NET Identity, разумеется.

Нахлобуч Установить заголовок. Например, List-Unsubscribe, который для каждого типа письма свой и должен передаваться извне

Добавить формируемые извне же вложения

Отправить письмо одновременно в HTML и в Plaintext

Как извне указать Content-Encoding

Легко.

1. IIdentityMessageService.SendAsync => MailMessage.Headers.Add("List-Unsubscribe", "< http://www.host.com/list.cgi?cmd=unsub&lst=list>, <mailto:list-request@host.com?subject=unsubscribe>";
2. IIdentityMessageService.SendAsync => MailMessage.Attachments
3. IIdentityMessageService.SendAsync => MailMessage.AlternateViews
4. IIdentityMessageService.SendAsync => MailMessage.BodyEncoding
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724399
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИ отправляй тут хоть Аватара в блю-рей...

Пипец, ну неужели лень хоть немножечко углубиться в тему, прежде чем яростно бросаться в спор? Дожили.
А теперь по делу. Покажи, как отправить письмо с произвольным вложением.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724400
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНахлобучИ вот тут планировщик не подходит абсолютно, от слова совсем.

Если делать надежную систему отправки уведомлений, то, очевидно, должна быть БД отправляемых уведомлений и очередь, в которую с засовывают сообщения (от слова Message из Message Queue) типа "отправь уведомление #113247". На другой стороне ее слушает отправлятель (или пул отправлятелей), который эти уведомления по очереди публикует. В случае ошибки сообщение кладется в отдельную retry-очередь, где они лежат определенное время (и даже здесь планировщик не нужен -- messaging-системы и сами с этим прекрасно справляются) и потом перемещаются обратно в основную очередь.

Обработка транзакционности и ситуации с превышением порогового числа повторов отправки и реакции на это событие компонентов системы остается на усмотрение читателя.

Выходи из судорга и прекращай нести бред. А в чём бред-то заключается? У нас около 12 миллионов писем в месяц примерно по такой схеме отправляются.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724401
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВыходи из судорга и прекращай нести бред. Конкретнее.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724405
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVosttпропущено...
Выходи из судорга и прекращай нести бред. А в чём бред-то заключается? У нас около 12 миллионов писем в месяц примерно по такой схеме отправляются.
Бред заключается вот в этом "И вот тут планировщик не подходит абсолютно, от слова совсем."

Как организовывать рассылку, очередью или признаком - не суть дело. Оба варианта имеют право на жизнь. И планировщик тут вполне вписывается в архитектуру.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724416
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бред заключается в том, что ТС свалил, а вы тут спорите не пойми о чём
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724421
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсылать заявки по почте - это вообще моветон. Тут нужен Hadoop.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724437
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТут планировщик подходит как нельзя кстати. Абсолютно как нельзя кстати.Ну расскажи, куда ты его собрался втыкать.

МСУВо-первых, очередью может быть обычная таблица в БД.И этот человек тут рассуждает про "нагруженные системы". Polling плохо -- это раз. Locking для "select for update" -- это два. Катастрофически разная производительность операций insert/select/delete при таком сценарии работы -- три. Любой из этих пунктов положит твою "нагруженную" систему на лопатки.

МСУВо-вторых, можно ничего этого не делать, а уведомлять по признаку в БД. Признаком может быть любая логическая конструкция в соответствии с требуемой бизнес логикой. Начиная от смены статусов заявки, кончая какими-то иными типами. И никакие очереди тут даром не нужны. После успешной отправки сообщения выставляется флаг отправленного уведомления. Никакой магии, конструкция проста как мир и надежна, как камень.Это опять какие-то пустопорожние сказки.

Допустим, наступило какое-то условие -- заявка переведена из статуса А в статус Б. Ты отправляешь уведомление, отправка обламывается. Твои действия?

МСУASP.NET Identity имеет самое прямое отношение к отсылке сообщений. Почему? Потому что есть встроенный внятный функционал. И если автору всё-таки захочется отправить сообщения прям из сайта по месту, то это самый подходящий вариант сделать это. При условии, что используется ASP.NET Identity, разумеется.Этот функционал печален и уныл. Identity не менее печален. Microsoft уже показало свою несостоятельность в этом вопросе -- сначала стандартная система авторизации и аутентификации в ASP.NET, потом Membership, потом Identity -- всё это проектировалось и писалось вообще без оглядки на то, как оно должно использоваться.

А IIdentityMessageService -- это какой-то огрызок.

МСУНахлобуч Установить заголовок. Например, List-Unsubscribe, который для каждого типа письма свой и должен передаваться извне

Добавить формируемые извне же вложения

Отправить письмо одновременно в HTML и в Plaintext

Как извне указать Content-Encoding

Легко.

1. IIdentityMessageService.SendAsync => MailMessage.Headers.Add("List-Unsubscribe", "< http://www.host.com/list.cgi?cmd=unsub&lst=list>, <mailto:list-request@host.com?subject=unsubscribe>";
2. IIdentityMessageService.SendAsync => MailMessage.Attachments
3. IIdentityMessageService.SendAsync => MailMessage.AlternateViews
4. IIdentityMessageService.SendAsync => MailMessage.BodyEncoding[/quot]
Смешно, ага.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class AccountController
{
    public IIdentityMessageService IdentityMessageService { get; set; }
    

    public ActionResult Signup(SignupModel model)
    {
    	//
        // Логика регистрации

        await IdentityMessageService.SendAsync(...);
    }
}



Отправь мне из метода Signup() письмо со вложением и в двух форматах.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724448
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучСмешно, ага.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class AccountController
{
    public IIdentityMessageService IdentityMessageService { get; set; }
    

    public ActionResult Signup(SignupModel model)
    {
    	//
        // Логика регистрации

        await IdentityMessageService.SendAsync(...);
    }
}




Отправь мне из метода Signup() письмо со вложением и в двух форматах.

А ещё польку станцевать, постирать носки и кофе сварить? С какого перепугу вложения должны прикрепляться из контроллера? Реализуешь IIdentityMessageService, там прикрепляешь свои вложения, добавляешь поля, пишешь прописью, приделываешь альтернативное содержимое, дудишь в гудок и отправляешь по адресу.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724455
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttА ещё польку станцевать, постирать носки и кофе сварить? С какого перепугу вложения должны прикрепляться из контроллера? Реализуешь IIdentityMessageService, там прикрепляешь свои вложения, добавляешь поля, пишешь прописью, приделываешь альтернативное содержимое, дудишь в гудок и отправляешь по адресу.
Код показывай.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724456
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучhVosttВыходи из судорга и прекращай нести бред. Конкретнее.

Бред ты несёшь, так как любая фоновая служба и есть по сути планировщик, хочешь ты этого или нет. Вопрос только в том, в какой момент и при каких условиях обрабатывать событие. Это можно настроить как угодно взяв наиболее подходящий инструмент, ты же углубляешься в ненужные сейчас детали и решил зачем-то пожонглировать терминами.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724458
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучhVosttА ещё польку станцевать, постирать носки и кофе сварить? С какого перепугу вложения должны прикрепляться из контроллера? Реализуешь IIdentityMessageService, там прикрепляешь свои вложения, добавляешь поля, пишешь прописью, приделываешь альтернативное содержимое, дудишь в гудок и отправляешь по адресу.
Код показывай.

16467578

место, где это делается я указал. дурачка-то не включай, я не буду тебе рисовать код отправки письма и прикрепления атачей, это тривиально.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724461
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучЭтот функционал печален и уныл. Identity не менее печален. Microsoft уже показало свою несостоятельность в этом вопросе -- сначала стандартная система авторизации и аутентификации в ASP.NET, потом Membership, потом Identity -- всё это проектировалось и писалось вообще без оглядки на то, как оно должно использоваться.

А IIdentityMessageService -- это какой-то огрызок.

Обоснуй плз. А то набросы в духе "они все дураки и не лечатся, один я умный, знаю как надо, но вам не скажу!".
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724462
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt 16467578

место, где это делается я указал. дурачка-то не включай, я не буду тебе рисовать код отправки письма и прикрепления атачей, это тривиально.Ладно, зайдем с другой стороны.

Откуда вот в этом методе возьмутся вложения?

Код: c#
1.
2.
3.
4.
5.
public Task SendAsync(IdentityMessage message)
{
    // Plug in your email service here to send an email.
    return Task.FromResult(0);
}


Код, пожалуйста.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724472
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучЛадно, зайдем с другой стороны.

Откуда вот в этом методе возьмутся вложения?

Код: c#
1.
2.
3.
4.
5.
public Task SendAsync(IdentityMessage message)
{
    // Plug in your email service here to send an email.
    return Task.FromResult(0);
}



Код, пожалуйста.

Тогда зайдём ещё с одной стороны, какие вложения и как ты собирался их отправлять по SMS? Задачу IdentityMessage ты так до сих пор и не вкурил, я смотрю
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724477
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч,

На случай, если ты всё ещё в глухом непробиваемом танке:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class EmailService : IIdentityMessageService
    {
        public Task SendAsync(IdentityMessage message)
        {
            // Plug in your email service here to send an email.
            return Task.FromResult(0);
        }
    }

    public class SmsService : IIdentityMessageService
    {
        public Task SendAsync(IdentityMessage message)
        {
            // Plug in your SMS service here to send a text message.
            return Task.FromResult(0);
        }
    }



Пользователь регистрируется (или запрашивает услугу) и решает куда ему слать код подтвержения, на почту или на телефон. Или это решается исходя из действий пользователя, не суть важно. Важно то, что IdentityMessage -- это абстракция сообщения для задач ASP.NET Identity. За конкретную реализацию отправки отвечают конкретные сервисы. Хочешь передать больше информации? Передавай, не вопрос. IdentityMessage не является sealed, сечёшь? Добавь туда ещё десяток полей и будь здоров. В чём проблема-то я не пойму?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724480
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttБред ты несёшь, так как любая фоновая служба и есть по сути планировщик, хочешь ты этого или нет.Это какое-то новое слово в науке и технике. Вот тут ( 16459954 ) был явно упомянут Quartz.NET, который нужен только для одного: выполнять произвольные джобы по произвольному же расписанию.

Внимание, вопрос: зачем в деле "отправить сообщение незамедлительно" какие-то джобы и расписания?

hVostt...ты же углубляешься в ненужные сейчас детали и решил зачем-то пожонглировать терминами.Я с самого начала писал, что автору ничего не нужно усложнять и хай отправляет письма прямо из контроллера.

В "ненужные детали" я "углубился" для того, чтобы рассказать, как строится архитектура надежного сервиса уведомлений.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724498
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВажно то, что IdentityMessage -- это абстракция сообщения для задач ASP.NET Identity. За конкретную реализацию отправки отвечают конкретные сервисы. Хочешь передать больше информации? Передавай, не вопрос. IdentityMessage не является sealed, сечёшь? Добавь туда ещё десяток полей и будь здоров. В чём проблема-то я не пойму?Самая большая проблема тут в том, что МСУ считает, что это поделие пригодно для отправки произвольных уведомлений пользователям.

Изначально требовалось отправлять уведомление о создании новой заявки, что к задачам Identity Management никакого отношения не имеет и зачем тут использовать вообще что-либо из Microsoft.AspNet.Identity остается загадкой.

Далее я вполне заслуженно назвал IIdentityMessageService унылым, потому что единственное, что он умеет "из коробки" -- это отправлять уведомления получателю с заданной темой и текстом. Возможно, этого хватает, чтобы отправить сообщения типа "Добро пожаловать на сайт", но не более. Попытка же слепить из этого что-то более потребное превращается в занимательные приседания с наследованием от IdentityMessage, реализацией своего EmailIdentityMessageService и связыванием всего этого синей изолентой.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724524
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучЭто какое-то новое слово в науке и технике. Вот тут ( 16459954 ) был явно упомянут Quartz.NET, который нужен только для одного: выполнять произвольные джобы по произвольному же расписанию.

Внимание, вопрос: зачем в деле "отправить сообщение незамедлительно" какие-то джобы и расписания?

Это лишь одно из целого вороха решений, довольно популярное и стабильное. Зачем отдавать отправку отдельному сервису уже было сказано. Причин для этого не мало. Самая банальная, это ошибка отправки, может стоит попробовать через несколько минут ещё раз и сделать не менее 3 попыток. Это работа для планировщика. Сам бог велел. Ты же исходишь из принципа, что сообщения должны 100% немедленно отправляться, хотя никто никаких гарантий тебе не даёт однозначно. А письмо надо попытаться доставить. Да и с архитектурной точки зрения, сунул письмо в очередь на отправку и успокоился. Надо отправить по-быстрее, укажи приоритет. В чём проблема, ещё раз спрашиваю? На кой ляд городить это говнище в коде с созданием каких-то тасков в контроллере? Что с этим убожеством делать потом? Как сопровождать?

НахлобучЯ с самого начала писал, что автору ничего не нужно усложнять и хай отправляет письма прямо из контроллера.

Я с самого начала писал, что не надо решать и тем более думать за автора. Почему надо априори считать его дураком? Если он задал вопрос "как лучше", значит наверное он хочет выслушать мнения на этот счёт. На счёт "как лучше", ещё в который раз уточню. Лучше значит, надёжно, сопровождаемо, расширяемо и управляемо. Ты предлагаешь какой-то убогий костыль, мотивируя тем, что типа так быстрее закодить. Это ты можешь студентам посоветовать, которые лабы сдают старичью, которое даже их толком не проверяет.

НахлобучВ "ненужные детали" я "углубился" для того, чтобы рассказать, как строится архитектура надежного сервиса уведомлений.

Ты рассказываешь как лепить убогие костыли, и слово "архитектура" здесь не уместно в принципе. Это как Равшан будет рассказывать архитектуру про то, как он унитаз в раковину превратил.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724536
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучСамая большая проблема тут в том, что МСУ считает, что это поделие пригодно для отправки произвольных уведомлений пользователям.

Он указал один из способов наиболее близких к тому, что ты предлагал без использования джобов, но с архитектурной точки зрения эффективно. Естетственно у данного решения есть свой ограниченный круг задач. Ты же начал лепить какие-то аттачи, которые непременно должны прилетать напрямую из контроллера. И даже эта задача решается без каких-либо проблем. О чем сетуешь не пойму?

НахлобучДалее я вполне заслуженно назвал IIdentityMessageService унылым, потому что единственное, что он умеет "из коробки" -- это отправлять уведомления получателю с заданной темой и текстом. Возможно, этого хватает, чтобы отправить сообщения типа "Добро пожаловать на сайт", но не более. Попытка же слепить из этого что-то более потребное превращается в занимательные приседания с наследованием от IdentityMessage, реализацией своего EmailIdentityMessageService и связыванием всего этого синей изолентой.

См. выделенное. Не "возможно", а совершенно точно, только это и нужно. И никакой синей изоленты не нужно, всё уже разложено по полочкам и можно использовать, при чём раз написанный сервис может кочевать из проекта в проект. В этом один из смыслов архитектурной декомпозиции, каждый кирпичик в известном смысле независим и в тоже время хорошо ложится рядом с другими.

Я так и не увидел объяснений "убогости" с твоей стороны. Твоя задача с аттачами и погремушками решается в лёгкую, хоть через наследование, хоть через интерфейсы, выбирай по вкусу. Но вообще, это не требуется. Для массовой рассылки с погремушками нужны другие инструменты и планировщик для этого подходит более чем.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724550
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНа кой ляд городить это говнище в коде с созданием каких-то тасков в контроллере? Что с этим убожеством делать потом? Как сопровождать?Таски я не предлагал, привет. Ты же предложил Кварц, который, вообще говоря, нужно держать вне веб-приложения, заводить под него БД и т.д. Ты вообще представляешь объем работы?

hVosttЯ с самого начала писал, что не надо решать и тем более думать за автора.С самого начала ты писал про Кварц, напомню.

hVosttЛучше значит, надёжно, сопровождаемо, расширяемо и управляемо.Формальные критерии измерения "сопровожаемости", "расширяемости" и т.д. в студию.

hVosttТы предлагаешь какой-то убогий костыль, мотивируя тем, что типа так быстрее закодить. Это ты можешь студентам посоветовать, которые лабы сдают старичью, которое даже их толком не проверяет.Я предлагаю достаточное на данный момент решение. Программисту платят не за красивый и расширяемый код, а за то, что он решает бизнес-задачи в подходящие бизнесу сроки. Это не значит, что нужно говнокодить направо и налево. Но и заниматься разработкой всесторонне расширяемого отправлятора для отправки писем ровно для одного бизнес-кейса не нужно.

hVosttТы рассказываешь как лепить убогие костыли, и слово "архитектура" здесь не уместно в принципе. Это как Равшан будет рассказывать архитектуру про то, как он унитаз в раковину превратил.Ты можешь, используя технические термины и корректные аргументы, пояснить, почему то, что я предлагаю -- убогие костыли?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724565
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
закладка
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724569
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttОн указал один из способов наиболее близких к тому, что ты предлагал без использования джобов, но с архитектурной точки зрения эффективно. Естетственно у данного решения есть свой ограниченный круг задач. Ты же начал лепить какие-то аттачи, которые непременно должны прилетать напрямую из контроллера. И даже эта задача решается без каких-либо проблем. О чем сетуешь не пойму? "Без проблем" текущая задача решается только с помощью всем известного SmtpClient. Все дополнительные абстракции только нужны только для того, чтобы потешить самолюбие и когда-нибудь с блеском протечь.

Я уже устал повторять: ASP.NET Identity (которую, кстати говоря, автор может и не использовать в проекте) нужна для управления пользователями, авторизации и аутентификации. В процессе работы она может отправлять кому-то какие-то уведомления, но это совершенно не повод использовать её куцый механизм отправки уведомлений об Identity Lifecycle для отправки вообще всех уведомлений.

Плюс советуемый МСУ UserManager<TUser, TKey>.SendEmailAsync Method подразумевает, что пользователь зарегистрирован на сайте. Очень смелое допущение.

hVosttНахлобучДалее я вполне заслуженно назвал IIdentityMessageService унылым, потому что единственное, что он умеет "из коробки" -- это отправлять уведомления получателю с заданной темой и текстом. Возможно, этого хватает, чтобы отправить сообщения типа "Добро пожаловать на сайт", но не более. Попытка же слепить из этого что-то более потребное превращается в занимательные приседания с наследованием от IdentityMessage, реализацией своего EmailIdentityMessageService и связыванием всего этого синей изолентой.См. выделенное. Не "возможно", а совершенно точно, только это и нужно.Ты точно внимательно читал?

RDS1) Пользователь вносит заявку, заполняя поля формы;
2) Нажимает кнопку Сохранить;
3) Запускается действие контроллера, там заявка сохранятся в базе через репозиторий.
4) .... и теперь надо разослать копии писем всем заинтересованным лицам...Где тут хотя бы намек на то, что задача связана с ASP.NET Identity?

hVosttЯ так и не увидел объяснений "убогости" с твоей стороны.
Прошу , раздел "Background: Membership in ASP.NET".

hVosttТвоя задача с аттачами и погремушками решается в лёгкую, хоть через наследование, хоть через интерфейсы, выбирай по вкусу.Да-да, всё одинаково криво будет.

hVosttНо вообще, это не требуется. Для массовой рассылки с погремушками нужны другие инструменты и планировщик для этого подходит более чем.Ты точно внимательно читал? Какие массовые рассылки?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724574
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучМСУТут планировщик подходит как нельзя кстати. Абсолютно как нельзя кстати.Ну расскажи, куда ты его собрался втыкать.
Так вроде уже рассказывал. Втыкать я его собрался в вин сервис рассылки уведомлений. Сервис крутится по определенному расписанию и шлет письма. За основу реализации расписания можно взять тот же кварц.

НахлобучМСУВо-первых, очередью может быть обычная таблица в БД.И этот человек тут рассуждает про "нагруженные системы". Polling плохо -- это раз. Locking для "select for update" -- это два. Катастрофически разная производительность операций insert/select/delete при таком сценарии работы -- три. Любой из этих пунктов положит твою "нагруженную" систему на лопатки.
Ого, давненько так не отжигали на форуме фантазёры. Ну ладно, по-порядку. Polling плох чем и в контексте чего? Откуда Locking на чтение, с дубу рухнул? Срочно читать про изоляции транзакций, недавно одному неучу рассказывал про Lock:Escalation. При правильных индексах и прямых руках у тебя CRUD будет просто летать, а не то, что тормозить. Так что попробуй испугай кого-нибудь другого лопатками.

НахлобучМСУВо-вторых, можно ничего этого не делать, а уведомлять по признаку в БД. Признаком может быть любая логическая конструкция в соответствии с требуемой бизнес логикой. Начиная от смены статусов заявки, кончая какими-то иными типами. И никакие очереди тут даром не нужны. После успешной отправки сообщения выставляется флаг отправленного уведомления. Никакой магии, конструкция проста как мир и надежна, как камень.Это опять какие-то пустопорожние сказки.
Допустим, наступило какое-то условие -- заявка переведена из статуса А в статус Б. Ты отправляешь уведомление, отправка обламывается. Твои действия?
Это не сказки, это простое решение задачи. По твоему примеру,
1. Заявка переведена из статуса А в статус Б
2. Устанавливается флаг "Оповестить" для уведомления подписчикам (отдельная таблица со ссылкой на заявку)
3. Сервис уведомлений согласно расписанию опрашивает флаги этой таблицы и на основе них делает рассылку
4. Письмо выслано, устанавливается флаг в соответствующее значение "Уведомление выслано"
5. Письмо не выслано, устанавливается флаг значение "Ошибка", пишется текст ошибки

НахлобучМСУASP.NET Identity имеет самое прямое отношение к отсылке сообщений. Почему? Потому что есть встроенный внятный функционал. И если автору всё-таки захочется отправить сообщения прям из сайта по месту, то это самый подходящий вариант сделать это. При условии, что используется ASP.NET Identity, разумеется.Этот функционал печален и уныл. Identity не менее печален. Microsoft уже показало свою несостоятельность в этом вопросе -- сначала стандартная система авторизации и аутентификации в ASP.NET, потом Membership, потом Identity -- всё это проектировалось и писалось вообще без оглядки на то, как оно должно использоваться.

А IIdentityMessageService -- это какой-то огрызок.
Огрызок - это то место, которое не думает и не пытается анализировать. IIdentityMessageService - это внятный механизм подключения сервиса сообщений. Причем, можно легко использовать two factor messages.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
manager.RegisterTwoFactorProvider("PhoneCode", new PhoneNumberTokenProvider<ApplicationUser> {
    MessageFormat = "Your security code is: {0}"
});
manager.RegisterTwoFactorProvider("EmailCode", new EmailTokenProvider<ApplicationUser> {
    Subject = "SecurityCode",
    BodyFormat = "Your security code is {0}"
});
 
manager.EmailService = new EmailService();
manager.SmsService = new SmsService();




Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public async Task<bool> SendTwoFactorCode(string provider)
{
    var userId = await GetVerifiedUserIdAsync();
    if (userId == null)
    {
        return false;
    }
 
    var token = await UserManager.GenerateTwoFactorTokenAsync(userId, provider);
    // See IdentityConfig.cs to plug in Email/SMS services to actually send the code
    await UserManager.NotifyTwoFactorTokenAsync(userId, provider, token);
    return true;
}



Так что твои унылые потуги надругаться над ASP.NET Identity идут в лес. Поплачь в другом месте.

НахлобучОтправь мне из метода Signup() письмо со вложением и в двух форматах.
Пристыкуй для менеджера свой IIdentityMessageService и рассылай хоть корову в мешке.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724586
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучhVosttНа кой ляд городить это говнище в коде с созданием каких-то тасков в контроллере? Что с этим убожеством делать потом? Как сопровождать?Таски я не предлагал, привет.
Ты предложил прямо по месту отправить сообщение, "Разовая акция". Как это может коррелировать с более или менее внятной архитектурой? Произошла ошибка отправки. Дальше что делать с твоей разовой акцией?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724591
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучhVosttНо вообще, это не требуется. Для массовой рассылки с погремушками нужны другие инструменты и планировщик для этого подходит более чем.Ты точно внимательно читал? Какие массовые рассылки?

Ты читаешь посты попой?

RDS1) Пользователь вносит заявку, заполняя поля формы;
2) Нажимает кнопку Сохранить;
3) Запускается действие контроллера, там заявка сохранятся в базе через репозиторий.
4) .... и теперь надо разослать копии писем всем заинтересованным лицам...
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724597
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч, "заинтересованных лиц" может быть сотня, тысяча. Ты собираешься этот делать такую отправку прям из контроллера? Ты сдурел?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724603
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучПлюс советуемый МСУ UserManager<TUser, TKey>.SendEmailAsync Method подразумевает, что пользователь зарегистрирован на сайте. Очень смелое допущение.
А кто говорил, что SendEmailAsync - серебряная пуля? Это простое решение "по месту" шлёпнуть сообщение из сайта. У способа есть и минусы и плюсы. К тому же, я акцентировал своё внимание именно на отдельной песочнице и шедулере, а не на SendEmailAsync. Еще раз спрашиваю, ты каким местом читаешь топик?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724606
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучhVosttдобавляете задание шедулеру, в шедулере реализуете обработку очереди и отправку писем.Планировщик-то тут зачем? Разовая же акция. Очередь же тут была бы к месту, но тащить целую очередь ради банальной отправки писем десятку-другому получателей считаю несколько чрезмерным.

НахлобучНе нужно заниматься интеллектуальным онанизмом и придумывать решения несуществующих проблем.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724609
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУОго, давненько так не отжигали на форуме фантазёры. Ну ладно, по-порядку. Polling плох чем и в контексте чего?Polling плох в контексте БД. Расходование ресурсов на поддержание ACIDности.
МСУОткуда Locking на чтение, с дубу рухнул?Расскажи, как ты будешь добиваться того, чтобы одно и то же уведомление не отправлялось из всех потоков (или процессов), в которых работают отправлятели уведомлений.
МСУПри правильных индексах и прямых руках у тебя CRUD будет просто летать, а не то, что тормозить. Индексы мешают вставкам и удалениям, их отсутствие мешает поиску, что, в свете предыдущего пункта, мешает вставкам.

МСУЭто не сказки, это простое решение задачи. По твоему примеру,
1. Заявка переведена из статуса А в статус Б
2. Устанавливается флаг "Оповестить" для уведомления подписчикам (отдельная таблица со ссылкой на заявку)
3. Сервис уведомлений согласно расписанию опрашивает флаги этой таблицы и на основе них делает рассылку
4. Письмо выслано, устанавливается флаг в соответствующее значение "Уведомление выслано"
5. Письмо не выслано, устанавливается флаг значение "Ошибка", пишется текст ошибкиУх ты.

А теперь представь ситуацию:

1. Заявка переведена из А в Б
2. Установился флаг, ссылка, все дела
3. Твой планировщик спит
4. Заявка переведена из Б в В
5. Опять установился флаг, ссылка на ту же заявку, которая уже находится в статусе В
6. Просыпается планировщик и отправляет подряд два уведомления, причем данных для формирования первого уведомления в БД уже нет (статус-то сменился).

МСУIIdentityMessageService - это внятный механизм подключения сервиса сообщений. Причем, можно легко использовать two factor messages.Это ограниченный механизм, предназначенный только для отправки всяких околоайдентитьных сообщений. Больше он ни на что не годен.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724610
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внимание вопрос, откуда Буч узнал про десяток-другой получателей?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724626
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, не флуди.

МСУТы предложил прямо по месту отправить сообщение, "Разовая акция". Как это может коррелировать с более или менее внятной архитектурой? Произошла ошибка отправки. Дальше что делать с твоей разовой акцией?По мере возможности обработать по месту и ждать поступления новых вводных от бизнеса.

МСУНахлобуч, "заинтересованных лиц" может быть сотня, тысяча. Ты собираешься этот делать такую отправку прям из контроллера? Ты сдурел? Нет, их не сотня и не тысяча. Какой смысл отправлять даже сотне человек уведомление о том, что кто-то создал заявку?

МСУНахлобучПлюс советуемый МСУ UserManager<TUser, TKey>.SendEmailAsync Method подразумевает, что пользователь зарегистрирован на сайте. Очень смелое допущение.
А кто говорил, что SendEmailAsync - серебряная пуля? Это простое решение "по месту" шлёпнуть сообщение из сайта. У способа есть и минусы и плюсы. Самое простое -- это SmtpClient. Тащить весь остальной шлак для "по месту" нет никакой необходимости. И плюсов у "способа" нет.

МСУНахлобучпропущено...
Планировщик-то тут зачем? Разовая же акция. Очередь же тут была бы к месту, но тащить целую очередь ради банальной отправки писем десятку-другому получателей считаю несколько чрезмерным.

НахлобучНе нужно заниматься интеллектуальным онанизмом и придумывать решения несуществующих проблем.

Что тут тебя так развеселило?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724630
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучPolling плох в контексте БД. Расходование ресурсов на поддержание ACIDности.
Запретим БД. Вообще. Будем помнить всё в уме. Так? Не устал фантазировать на пустом месте?

НахлобучМСУОткуда Locking на чтение, с дубу рухнул?Расскажи, как ты будешь добиваться того, чтобы одно и то же уведомление не отправлялось из всех потоков (или процессов), в которых работают отправлятели уведомлений.
Расскажи, откуда ты взял, что у меня будет несколько отправителей уведомлений? Отправитель уведомлений один и работает он в одном процессе и в одном потоке. А задачи на рассылку он может ставить асинхронно. Например, получил 1 тыс подписчиков, раскидал задачи на 10 тредов и вперед. Что тут ты собрался синхронизировать? Каждый тред не зависит от друг друга, полностью автономная работа. Чего ты там опять куришь?

НахлобучМСУПри правильных индексах и прямых руках у тебя CRUD будет просто летать, а не то, что тормозить. Индексы мешают вставкам и удалениям, их отсутствие мешает поиску, что, в свете предыдущего пункта, мешает вставкам.
В архитектуре статусов ничего удалять не нужно. Поэтому именно эта архитектура более гибка и поддерживаема, чем очередь.

НахлобучА теперь представь ситуацию:
1. Заявка переведена из А в Б
2. Установился флаг, ссылка, все дела
3. Твой планировщик спит
4. Заявка переведена из Б в В
5. Опять установился флаг, ссылка на ту же заявку, которая уже находится в статусе В
6. Просыпается планировщик и отправляет подряд два уведомления, причем данных для формирования первого уведомления в БД уже нет (статус-то сменился).
Какой ужас.
1. Планировщик видит, что есть 2 уведомления для 1 адреса. Он тупо склеивает эти 2 уведомления в одно и отправляет подписчику.
2. Либо планировщик отправляет 1 самое актуальное уведомление, забивая болт на предыдущие.

НахлобучМСУIIdentityMessageService - это внятный механизм подключения сервиса сообщений. Причем, можно легко использовать two factor messages.Это ограниченный механизм, предназначенный только для отправки всяких околоайдентитьных сообщений. Больше он ни на что не годен.
И тем не менее, он имеет право на жизнь. И говорить о том, что его нельзя использовать в простых сценариях, глупо. Точно так же глупо, как говорить о том, что ASP.NET Identity убогое гавно.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724640
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучМСУТы предложил прямо по месту отправить сообщение, "Разовая акция". Как это может коррелировать с более или менее внятной архитектурой? Произошла ошибка отправки. Дальше что делать с твоей разовой акцией?По мере возможности обработать по месту и ждать поступления новых вводных от бизнеса.
Что за бред? Каких поступлений, какой бизнес? Что ты несешь? ))

НахлобучМСУНахлобуч, "заинтересованных лиц" может быть сотня, тысяча. Ты собираешься этот делать такую отправку прям из контроллера? Ты сдурел? Нет, их не сотня и не тысяча. Какой смысл отправлять даже сотне человек уведомление о том, что кто-то создал заявку?
Откуда ты знаешь, сколько подписчиков должно быть? Ты генератор требований? Что значит, какой смысл отправлять сообщение сотне человек? Они подписаны на ресурс, значит их нужно уведомить. У нас в конторе есть портал на шарепоинте, есть списки и библиотеки документов сотрудников, на которые подписаны участники. Их количество достигает более 1 тыс на популярных библиотеках (приказы, документы по поставщикам, юридическая информация и так далее). Всего в компании немногим менее 10 тыс человек. Если ты там сидишь и работаешь в коморке с 3 калеками, то это не значит, что не может быть большое число подписчиков.

НахлобучМСУпропущено...
А кто говорил, что SendEmailAsync - серебряная пуля? Это простое решение "по месту" шлёпнуть сообщение из сайта. У способа есть и минусы и плюсы. Самое простое -- это SmtpClient. Тащить весь остальной шлак для "по месту" нет никакой необходимости. И плюсов у "способа" нет.
Так в SendEmailAsync и используется SmtpClient, включи уже голову.

НахлобучЧто тут тебя так развеселило?
Твоя тупость. Серьезно.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724673
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНахлобучPolling плох в контексте БД. Расходование ресурсов на поддержание ACIDности.Запретим БД. Вообще. Будем помнить всё в уме. Так? Не устал фантазировать на пустом месте?По делу будет что-то?

МСУРасскажи, откуда ты взял, что у меня будет несколько отправителей уведомлений? Отправитель уведомлений один и работает он в одном процессе и в одном потоке. А задачи на рассылку он может ставить асинхронно. Например, получил 1 тыс подписчиков, раскидал задачи на 10 тредов и вперед. Что тут ты собрался синхронизировать? Каждый тред не зависит от друг друга, полностью автономная работа. Чего ты там опять куришь?Отличненько, уже какие-то потоки пошли в дело. Откуда они возьмутся, если "уведомлений один и работает он в одном процессе и в одном потоке"? Какие задачи, кому он их ставит?

МСУВ архитектуре статусов ничего удалять не нужно. Поэтому именно эта архитектура более гибка и поддерживаема, чем очередь.Опять какие-то голословные утверждения.

МСУКакой ужас.Ужас-не ужас, а еще пара-тройка таких находок -- и твой планировщик превратится в крысиное гнездо кода. Слияние уведомлений, определение самого актуального -- все это нетривиально.

А если тексты уведомлений формировать непосредственно в момент наступления событий, то всех этих проблем с консистентностью можно избежать.

МСУИ тем не менее, он имеет право на жизнь. И говорить о том, что его нельзя использовать в простых сценариях, глупо.Глупо его использовать в сценариях, для которых он вообще никак не предназначен. Отправка уведомлений о событиях, не связанных с Identity, -- один из них.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724690
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЧто за бред? Каких поступлений, какой бизнес? Что ты несешь? ))Я не пойму, что тебя так смешит. Автор пишет софт для удовлетворения каких-то бизнес-потребностей. Если недоставка некоторых уведомлений не является проблемой, то можно остановиться на самом простом работающем решении -- отправка "по месту". Если же бизнес потребует "доставки любой ценой", то нужно будет думать отдельно.

МСУОткуда ты знаешь, сколько подписчиков должно быть? Ты генератор требований?Нет, я просто знаю, что в случае, когда от человека требуется какая-то деятельная реакция (а именно она нужна в ответ на уведомление о поступление новой заявки), размазывать ответственность по сотне человек никто не будет.

МСУЧто значит, какой смысл отправлять сообщение сотне человек? Они ... это не значит, что не может быть большое число подписчиков.Молодец, похвастался. Дальше что? Как это относится к теме?

МСУТак в SendEmailAsync и используется SmtpClient, включи уже голову.Вот правда -- и что с того? Он прячет его за убогим API, не добавляя никакой ценности. Абсолютно. Просто прослойка.

МСУНахлобучЧто тут тебя так развеселило?Твоя тупость. Серьезно.Браво.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724727
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучМСУпропущено...
Запретим БД. Вообще. Будем помнить всё в уме. Так? Не устал фантазировать на пустом месте?По делу будет что-то?
Вот именно, по делу что-то будет? Или будешь дальше писать о страшилках использования БД?

НахлобучМСУРасскажи, откуда ты взял, что у меня будет несколько отправителей уведомлений? Отправитель уведомлений один и работает он в одном процессе и в одном потоке. А задачи на рассылку он может ставить асинхронно. Например, получил 1 тыс подписчиков, раскидал задачи на 10 тредов и вперед. Что тут ты собрался синхронизировать? Каждый тред не зависит от друг друга, полностью автономная работа. Чего ты там опять куришь?Отличненько, уже какие-то потоки пошли в дело. Откуда они возьмутся, если "уведомлений один и работает он в одном процессе и в одном потоке"? Какие задачи, кому он их ставит?
Так ты сам начал про "процессы и потоки". А теперь меня обвиняешь в этом. Странный ты. Не "уведомлений один", а "Отправитель уведомлений один". Почувствуй разницу. С чего ты решил, что должно быть несколько отправителей уведомлений.
Вот твой высер, если что:

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

Как объяснишь свой вопрос?

Еще раз, "отправлятель уведомлений" один. А рассылка уведомлений может идти асинхронно в несколько независимых потоков. Что не понятного я сейчас сказал?

НахлобучМСУВ архитектуре статусов ничего удалять не нужно. Поэтому именно эта архитектура более гибка и поддерживаема, чем очередь.Опять какие-то голословные утверждения.
Что именно голословно утверждено и почему? Будешь приводить аргументы или просто какать в форум невнятными формулировками?

НахлобучМСУКакой ужас.Ужас-не ужас, а еще пара-тройка таких находок -- и твой планировщик превратится в крысиное гнездо кода. Слияние уведомлений, определение самого актуального -- все это нетривиально.
Склейка сообщений для одного реципиента - это нетривиально? Могу предложить земледелие, там всё тривиально, бери лопату и копай.

НахлобучА если тексты уведомлений формировать непосредственно в момент наступления событий, то всех этих проблем с консистентностью можно избежать.
Зачем заранее формировать тексты и, тем более, хранить их где-то? Это же феерический бред, дублирование и просто антипаттерн. И ты что-то собрался нам рассказывать об архитектуре?

НахлобучМСУИ тем не менее, он имеет право на жизнь. И говорить о том, что его нельзя использовать в простых сценариях, глупо.Глупо его использовать в сценариях, для которых он вообще никак не предназначен. Отправка уведомлений о событиях, не связанных с Identity, -- один из них.
Сценарий только один - отправка сообщения пользователю с темой и телом сообщения. Для этого вполне можно использовать нативный механизм ASP.NET Identity. В чем проблема? Кто запрещает?

НахлобучМСУЧто за бред? Каких поступлений, какой бизнес? Что ты несешь? ))Я не пойму, что тебя так смешит. Автор пишет софт для удовлетворения каких-то бизнес-потребностей. Если недоставка некоторых уведомлений не является проблемой, то можно остановиться на самом простом работающем решении -- отправка "по месту". Если же бизнес потребует "доставки любой ценой", то нужно будет думать отдельно.
Автор конкретно спросил совета. Ты посоветовал глупость. Делать массовую отправку сообщений по месту в контроллере - удел кретина, а не программиста или архитектора. С этим согласен? И бизнес тут не причем, не нужно его сюда примешивать. Бизнес ничего не знает и не должен знать об архитектуре рассылки уведомлений.

НахлобучМСУОткуда ты знаешь, сколько подписчиков должно быть? Ты генератор требований?Нет, я просто знаю, что в случае, когда от человека требуется какая-то деятельная реакция (а именно она нужна в ответ на уведомление о поступление новой заявки), размазывать ответственность по сотне человек никто не будет.
Ну это только твои фантазии, которые не подкреплены практикой. С рабочими процессами в системах электронного документооборота работал? Рассказать про такой классический воркфлоу, как "Согласование документа"?

НахлобучМСУЧто значит, какой смысл отправлять сообщение сотне человек? Они ... это не значит, что не может быть большое число подписчиков.Молодец, похвастался. Дальше что? Как это относится к теме?
Это аргумент того, что твои утверждения про то, что "не может быть более 20 подписчиков" - наглая ложь. И даже в случае 20 подписчиков отправлять им сообщения "по месту" в контроллере - беспощадное зло. Согласен?

НахлобучМСУТак в SendEmailAsync и используется SmtpClient, включи уже голову.Вот правда -- и что с того? Он прячет его за убогим API, не добавляя никакой ценности. Абсолютно. Просто прослойка.
Так весь фреймворк - прослойка, которая что-то где-то прячет. Ценность твоих сообщений в данном топике ниже плинтуса. В чем суть твоего бытия тут? Просто зашел покакать напалмом?

НахлобучМСУпропущено...
Твоя тупость. Серьезно.Браво.
Ок.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724948
RDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDS
Гость
Ребят, спасибо за ответы. Мне больше по душе пришелся вариант с планировщиком.
Проясню некоторые детали, оператору по телефону звонят работники, и говорят что и кому нужно, например, привезти какую-то деталь, увезти крупный мусор и т.д. За привоз деталей отвечает 1-ое подразделение, за вывоз мусора к примеру 2-ое подразделение и т.д. За каждым подразделением закреплены исполнители, их не больше 10, и пару заинтересованных лиц, которые следят за исполнением заявок. Примерно, для одной заявки, необходимо разослать копии письма 12 человекам. Если сразу дали 5 заявок, то соответственно 120 писем. После того, как оператор заполнил формы для 5-ти заявок, он нажимает кнопку сохранить, заявки должны сохраниться в базе, и быть разосланы всем заинтересованным лицам. Главное чтобы интерфейс не подвисал, когда будет происходить рассылка писем, потому что на оператора "сыпятся заявки" - он только сохранил, тут же ему снова диктуют(только для другого цеха).

Скажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724975
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RDSСкажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает?

Я уже писал:

http://www.quartz-scheduler.net/

Запускать консольку планировщиком задач -- очень плохое, неуправляемое и неконтролируемое решение.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38724977
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучВот правда -- и что с того? Он прячет его за убогим API, не добавляя никакой ценности. Абсолютно. Просто прослойка.

Ты вообще в адеквате? Такой детский неумный лепет нести, зачем?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38725009
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RDSРебят, спасибо за ответы. Мне больше по душе пришелся вариант с планировщиком.
Проясню некоторые детали, оператору по телефону звонят работники, и говорят что и кому нужно, например, привезти какую-то деталь, увезти крупный мусор и т.д. За привоз деталей отвечает 1-ое подразделение, за вывоз мусора к примеру 2-ое подразделение и т.д. За каждым подразделением закреплены исполнители, их не больше 10, и пару заинтересованных лиц, которые следят за исполнением заявок. Примерно, для одной заявки, необходимо разослать копии письма 12 человекам. Если сразу дали 5 заявок, то соответственно 120 писем. После того, как оператор заполнил формы для 5-ти заявок, он нажимает кнопку сохранить, заявки должны сохраниться в базе, и быть разосланы всем заинтересованным лицам. Главное чтобы интерфейс не подвисал, когда будет происходить рассылка писем, потому что на оператора "сыпятся заявки" - он только сохранил, тут же ему снова диктуют(только для другого цеха).

Скажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает?А не проще ли внедрить/интегрировать готовый продукт?
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38725061
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч17-77а ваш Postmark и есть "планировщик"/"очередь", только вне рамок реализуемой системы, определитесь уже - нужен он или нет Разницу между "планировщиком" и "очередью" понимаешь?
Не важно как называется хрень, которая в фоновом процессе отправляет почту, насколько я помню вы предлагали отправлять письма напрямую из контроллера, не используя ни планировщик, ни очередь
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38725065
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RDSСкажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает?
Да, нормальный рабочий вариант.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38725069
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучА теперь представь ситуацию:

1. Заявка переведена из А в Б
2. Установился флаг, ссылка, все дела
3. Твой планировщик спит
4. Заявка переведена из Б в В
5. Опять установился флаг, ссылка на ту же заявку, которая уже находится в статусе В
6. Просыпается планировщик и отправляет подряд два уведомления, причем данных для формирования первого уведомления в БД уже нет (статус-то сменился).
Зависит от бизнеса, будет требование слать все уведомления - значит надо их генерить сразу и сохранять где либо до момента отправки, будет требование слать только последнее - значит будет отправлятся только последнее
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38725074
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RDSСкажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает?
Я бы не завязывался на планировщик винды, а сделал бы свою вин-службу на кварце, как в самом первом ответе в теме
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38725204
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77Зависит от бизнеса, будет требование слать все уведомления - значит надо их генерить сразу и сохранять где либо до момента отправки
Не в коем случае.

1. Каждое изменение статуса заявки логируется в отдельную табличку (ID, ID заявки, Статус заявки, Дата/Время, Флаг процессинга). Можно дополнить дополнительной информацией при необходимости. Напр., ID пользователя, Сообщение об ошибке и т.д.
2. Песочница, которая процессит рассылку, анализирует эту таблицу и отсылает письма. Текст письма берется из некоего шаблона, который хранится где угодно.

Сохранять готовые сообщения по факту для последующих рассылок - это избыточность и мазохизм.
...
Рейтинг: 0 / 0
EmailSender в asp.net mvc
    #38725206
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77Я бы не завязывался на планировщик винды, а сделал бы свою вин-службу на кварце, как в самом первом ответе в теме
+1
...
Рейтинг: 0 / 0
71 сообщений из 71, показаны все 3 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / EmailSender в asp.net mvc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]