Рекомендации по приему сообщений электронной почты в качестве входных данных для приложения - PullRequest
7 голосов
/ 30 марта 2009

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

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

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

Ответы [ 8 ]

10 голосов
/ 06 апреля 2009

Некоторые рекомендации и соображения:

Адресный вопрос. Лучше всего использовать расширение «+» в адресе электронной почты (myaddr**+custom**@gmail.com). Это облегчает маршрутизацию, но, прежде всего, легче отслеживать маршрутизацию адресов в вашей системе. Другие техники могут использовать токен в теме

Спам : выполнять обработку спама вне приложения и использовать фильтр приложения на основе заголовка.

Очередь неудачных сообщений : По большей части нет. Стандартное поведение электронной почты - попытка доставки сообщения до 3 дней. Для почтового сервера приложения все, что он делает, это создает гигантские почтовые файлы, которые вы, скорее всего, никогда не обработаете. Сообщения в очереди, только если причины сбоя находятся вне вашего контроля (например, сервер не работает).

Неправильная обработка сообщения : Существует несколько способов, которыми сообщение может быть недействительным. Некоторые из них являются ограничениями библиотеки (она не может анализировать адрес, даже если она действительна в RFC). Другие из-за сломанных клиентов (например, пропуская кавычки вокруг определенных заголовков). Другие могут быть слишком большими или использовать неизвестную кодировку, не иметь критических заголовков, иметь несколько значений, где должно быть только одно, нарушать некоторую семантику, специфичную для вашего приложения, и т. Д., И т. Д. И т. Д. В основном, где бы ни был почтовый API Java может выдать исключение - это случай обработки ошибки, который вы должны определить, как правильно обрабатывать.

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

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

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

  • Реальные люди, возможно из внешних источников
  • Списки рассылки
  • Вы или один из ваших собственных адресов получателей
  • Другие почтовые серверы (отказы, сбои и т. Д.)
  • Сущность в другой системе (my-ldap-group@company.com, системный монитор @ localhost)
  • Автоматизированная система
  • псевдоним одного из перечисленных выше
  • псевдоним псевдониму

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

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

- Изменить -

Я купил книгу «Создание масштабируемых веб-сайтов», упомянутую rossfabricant. У него есть хороший раздел электронной почты. Имеется несколько важных моментов, касающихся обработки электронной почты от операторов беспроводной связи и проверки подлинности электронной почты.

2 голосов
/ 06 апреля 2009

Создание масштабируемых веб-сайтов имеет хороший раздел по обработке электронной почты. Он написан разработчиком Flickr.

alt text
(источник: lsl.com.au )

2 голосов
/ 30 марта 2009

Вы можете установить адрес, с которого отправляется электронное письмо, который будет добавлен в адрес «Кому:», если кто-то просто нажмет «Ответить». Сделайте это уникальным, и вы сможете сказать, откуда он и куда должен быть направлен обратно.

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

1 голос
/ 13 апреля 2009

Лучший способ добиться этого - написать оконную службу, которая работает как почтовый клиент [pop3 или imap]. Эта служба Windows должна выполнить синхронизированное действие, запускаемое таймером, который подключается к почтовому серверу и опрашивает сервер на наличие непрочитанных сообщений, доступных в почтовом ящике. Идентификатор электронной почты для проверки - это идентификатор электронной почты, на который пользователи будут вводить свои данные. Если клиент службы Windows обнаружит, что есть какие-либо новые письма, он должен загрузить и отфильтровать тело письма и продолжить обработку, основываясь на вводе пользователя в письме. Вы можете разместить обработку ввода в той же службе Windows, но делать это не рекомендуется. Служба Windows может поместить входные данные в специальный каталог или базу данных приложения, откуда ваше основное приложение может считывать пользовательские входные данные, полученные по электронной почте, и обрабатывать их по мере необходимости.

Для этого вам потребуется разработать высокопроизводительный клиент TCP / IP. Я советую вам не использовать библиотеку .Net по умолчанию из-за проблем с производительностью, вместо этого используйте одну из лучших доступных реализаций TCP / IP с открытым исходным кодом для .Net, такую ​​как XF.Server из kodart . мы использовали это в наших приложениях и достигли удивительных результатов.

Надеюсь, это поможет ..

1 голос
/ 30 марта 2009

РЕДАКТИРОВАТЬ: я неправильно понял ваш вопрос.

Вы можете настроить свой почтовый сервер на перехват всех сообщений и создать уникальный адрес для ответа. Например. CST-2343434@example.com.

Процесс опроса на сервере может считывать входящие сообщения и анализировать соответствующую часть из полученного электронного письма, CS-2343434 может означать номер заявки в службу поддержки № 2343434.

Я реализовал нечто подобное, используя JavaMail API .

Просто мысль.

0 голосов
/ 13 апреля 2009

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

Вам нужно будет работать с почтовыми клиентами, которые отправляют вам отформатированный текст вместо простого текста. Некоторые почтовые клиенты по-прежнему не обрабатывают HTML должным образом ( кашель GMail), поэтому ваши ответы также должны быть оформлены соответствующим образом. Существуют различные способы загрузки фотографий по электронной почте, особенно когда речь идет о мобильных телефонах. Вам нужно будет реализовать различные хаки и эвристики, чтобы справиться с этими ситуациями.

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

Наконец, другие упоминают об использовании определенных адресов электронной почты для однозначной идентификации «разговора». Это, вероятно, самый простой способ сделать это, так как содержимое почты часто не выдерживает обратного пути к клиенту. Будьте готовы, однако, получить почту на старые идентификаторы от старых клиентов, которые, вместо того, чтобы как-то открыть новый билет, отвечают на старый билет. Вашему приложению, вероятно, понадобится каким-то образом отправить письма со старым идентификатором в новый ящик, вручную или автоматически. Для системы CRM весьма вероятно, что пользователь ответит на старое письмо, даже если вы уже отправили ему новое письмо с новым идентификатором. Что касается того, следует ли вам использовать some.email.address+some.id@yourdomain.com или просто some.id@yourdomain.com, я бы остановился на последнем, потому что знак плюса сбивает с толку некоторых почтовых клиентов. Сделайте ваши идентификаторы направляющими или что-то в этом роде, и у вас есть возможность проверить их (например, CRC или что-то в этом роде), и вы получите меньше мусора. Люди никогда не должны вводить GUID, просто ответить на них. Недостатком является фильтрация спама: компьютер пользователя может рассматривать такие адреса электронной почты как спам, и не будет простого способа занести его в белый список.

Что напоминает мне: отправка электронной почты в наши дни полна ловушек. Существует много технологий защиты от спама, которые чрезвычайно затрудняют отправку электронных писем вашим клиентам. Вам нужно будет изучить все это, и вам нужно быть осторожным и провести некоторое тестирование, чтобы убедиться, что вы можете связаться с основными поставщиками электронной почты. Веб-сайт, такой как Campaign Monitor может помочь вам, если вы отправляете электронное письмо.

0 голосов
/ 06 апреля 2009

Спам будет немного беспокоить. Однако, так как вы инициируете беседу, вы можете использовать наличие вашего уникального идентификатора (я предпочитаю использовать строку темы - «Уведомление о неисправности: Невозможно войти в Интернет ... [artf123456]») для фильтрации спама. Не забывайте проверять фильтр, так как некоторые люди при ответе искали объект.

0 голосов
/ 06 апреля 2009

У Bose есть отличная система, в которой они встраивают очередь и идентификатор билета в само письмо.

В моей компании есть традиционный № дела в строке темы, но при СОЗДАНИИ дела требуется специальная строка символов «Новый случай» «Проблема технической поддержки» в строке темы, чтобы пройти через спам-фильтры.

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

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

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