Пожалуйста, критикуйте мою предложенную архитектуру: Windows-сервис для разбора входящих писем в базу данных asp.net. - PullRequest
4 голосов
/ 09 июня 2011

У меня есть приложение asp.net c #, для которого я хотел бы реализовать функцию, позволяющую пользователям публиковать контент по электронной почте.Пользователь отправляет электронное письмо на указанный адрес, а система анализирует электронную почту и создает записи в базе данных, используя тему, текст сообщения и любые прикрепленные изображения.Предлагаемый мной подход заключается в создании службы Windows, которая отправляет эхо-запрос провайдеру электронной почты с поддержкой pop3 / imap для получения входящих сообщений электронной почты.Затем служба будет анализировать электронные письма, используя существующую библиотеку, которую я нашел здесь http://www.lesnikowski.com/mail/.. Пользователь будет сопоставлен в соответствии с адресом электронной почты в поле from и членством asp.net, а затем будут добавлены новые записи из содержимого.электронной почты для этого пользователя.Первоначально служба Windows будет работать на отдельном экземпляре EC2, который я настрою для этой цели, поскольку текущий хост не разрешает root-доступ.Но, в конце концов, я, вероятно, перенесу весь сайт на EC2.

Перед тем, как погрузиться, я хотел бы получить от вас отзывы о моем общем подходе и архитектуре.Более конкретно:

  • Является ли то, что я описал выше, подходом, который вы выбрали бы?
  • Вы бы порекомендовали реализовать веб-службу для управления взаимодействиями между службой Windows и базой данных asp?.net сайт?Или вы бы порекомендовали обратиться к базе данных напрямую?
  • Если я запрограммирую службу Windows на проверку связи с провайдером электронной почты каждые 30 секунд, это будет проблемой?
  • Предвидите ли вы какие-либо проблемы безопасности с этимПодход, который я обрисовал в общих чертах?
  • А как насчет проблем с надежностью (должен быть сервис 24x7)?

Дополнительные сведения --- сайт asp.net представляет собой систему инвентаризации, гдекаждая запись имеет имя, описание и дополнительные изображения.Из электронного письма тема станет именем, тело станет описанием, а изображения - изображениями.Если вы знакомы с платформой блогов Posterous, у вас будет отличная отправная точка для того, чего я пытаюсь достичь.

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

Является ли то, что я описал выше, подходом, который вы выбрали бы?

Было бы лучше, если бы вы могли настроить сервер Exchange или что-то подобное, где вы будете получать уведомления о новых письмах, поэтомувам не нужно пинговать каждые 30 минут, но я никогда не делал этого таким образом и не могу сказать вам, возможно ли это вообще.
Сам подход звучит правдоподобно, потому что отправка электронных писем действительно проста, и каждый знает, как это сделать.,

Вы бы порекомендовали внедрить веб-сервис для управления взаимодействиями между сервисом Windows и базой данных сайта asp.net?Или вы бы порекомендовали обратиться к базе данных напрямую?

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

Если я запрограммирую службу Windows на проверку связи с провайдером электронной почты каждые 30 секунд, будет ли это проблемой?

Зависит от вашего провайдера электронной почты.Обычно, и если они позволяют это: Нет. Вы должны определенно спросить их сначала.
Если это ваше: вы можете идти.
Там могут быть проблемы, однако, если вы делаетеэто внутри потока, и вы получаете доступ к IMAP несколько раз одновременно.Вам следует постараться избежать этого.

Предвидите ли вы какие-либо проблемы безопасности с изложенным мною подходом?

Да.Вы можете легко подделать поле «from» отправленного вами электронного письма.Тогда могут возникнуть проблемы, если адрес электронной почты известен.Вы должны обязательно добавить какую-то дополнительную безопасность, например, отправку почты на <SaltedHashThatIsDifferentForEachUser>@example.com.(Например, Facebook делает это тоже)

А как насчет проблем с надежностью (требуется услуга 24x7)?

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

2 голосов
/ 09 июня 2011

Вы бы порекомендовали внедрить веб-сервис для управления взаимодействиями между сервисом windows и базой данных сайта asp.net?Или вы бы порекомендовали напрямую обращаться к базе данных?

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

Если я запрограммирую службу Windows на проверку связи с провайдером электронной почты каждые 30 секунд, это будет проблемой?

Не должно быть проблем ... Провайдеры электронной почты предоставляют POP3 и IMAP, чтобы их могли использовать внешние сервисы (outlook, thunderbird, iphone), поэтому они ожидают, что они будут постоянно пинговаться.

Предвидите ли вы какие-либо проблемы безопасности с этим подходом, который я изложил?

Как заявил Саймон, электронные письма могут быть легко подделаны, обеспечивая уязвимость безопасности.В этой ссылке обсуждается случай взлома постеров и компромисс между простотой использования и безопасностью.Как CISSP, я склонен склоняться к безопасности, особенно когда уязвимость очень легко использовать.

Уникальный, «секретный» адрес электронной почты - лучшее решение с точки зрения безопасности.Тем не менее, это значительно отнимает от вашей цели упрощение процесса обновления.Это также делает ваше решение более сложным и дорогостоящим, поскольку вам нужно будет иметь возможность поддерживать (и программно создавать) уникальный адрес для каждого пользователя.

Как насчет проблем с надежностью (должно быть круглосуточно)услуга)?

Большинство основных поставщиков услуг электронной почты имеют выдающуюся доступность.Что касается доступности этого решения (без учета ранее существовавших факторов, таких как ваше текущее оборудование и хостинг), вы бы хотели, чтобы служба windows была хорошо написана и включала некоторую «отказоустойчивость».Например, сервисы, которые я написал в прошлом, обрабатывают несколько ошибок выбора, вызванных внешними зависимостями (база данных или электронная почта недоступны), так что он не аварийно завершает работу, а просто ожидает его возвращения в оперативный режим.Это обеспечивает лучшую доступность, поскольку служба готова к работе, когда с зависимостью снова все в порядке, без необходимости перезапуска службы Windows вручную.

Является ли то, что я описал выше, подходом, который вы выбрали бы?

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

Я только что вернулся с конференции по веб-дизайну в Сиэтле, и она была сосредоточена на платформах «не-ПК».Перечислив их очень инновационные идеи и лучшие практики для проектирования для мобильной индустрии, я вижу, что веб-приложение является отличным решением для достижения этой цели.

...