пользователь, отвечающий на сообщения электронной почты.Как вы можете получить данные от пользователей по электронной почте? - PullRequest
2 голосов
/ 13 января 2012

У меня трудности с реализацией следующего сценария.

Допустим, у вас есть веб-сайт с возможностью отправлять и получать сообщения между пользователями.Пользователь получает электронное письмо с уведомлением, что у него есть новое сообщение в программной системе (не имеет значения, в чем оно реализовано).Он может ответить на это сообщение, отправив ответ по электронной почте или войдя на сайт и ответив на «сообщение» с помощью сайта.

В случае первого подхода, если пользователь просто отвечает на уведомление по электронной почте,как вы (как разработчик) можете узнать, для чего «сообщение» (ID) ответ?Я думаю, что информация будет храниться в расширениях MIME.Передаются ли расширения MIME в ответ на сообщение?Если да, то решение может состоять в том, чтобы просмотреть данные исходного сообщения с уведомлением, на которое пользователь отвечает.Есть идеи?Спасибо

Ответы [ 3 ]

3 голосов
/ 13 января 2012

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

Обычный механизм выглядит примерно так: создайте префикс псевдонима электронной почты,и добавить фрагмент идентификатора сообщения в конец;например, если это было для подтверждения заказа на покупку, вы можете создать псевдоним электронной почты, обрабатывающий адреса в форме po-*@example.com, где * - уникальный идентификатор сообщения.Затем, когда вы отправляете свое сообщение, вы помещаете соответствующий адрес в заголовки From: и Reply To:.Например:

From: "Purchase Order Confirmation (#1234)" <po-1234@example.com>
To: "John Doe" <jdoe@example.com>
Reply-To: "Purchase Order Confirmation (#1234)" <po-1234@example.com>
Subject: Confirm your order (#1234)

В зависимости от вашего почтового сервера, вы должны иметь возможность определить символ «разделитель» (обычно - или +), который используется для разделения частей «локального»часть »(слева от @) адреса электронной почты;обычно существует другой механизм для сопоставления префикса со сценарием для обработки всех адресов определенной формы.Интерфейс сценария часто очень похож на CGI в сети, посылая некоторые переменные окружения и добавляя само сообщение в стандартный ввод.Если ваше приложение в основном веб-приложение, вам может быть удобнее собирать тело входящей электронной почты и POST отправлять его в частный (возможно, http://[::1]/getMailReply) обработчик.Это может помочь вам повторно использовать существующий код.

1 голос
/ 13 января 2012

Мы настроили catch-all адрес электронной почты на нашем сервере - например, catch-all@myserver.com.Когда мы отправляем электронные письма пользователям, мы кодируем идентификатор сообщения и любую другую мета-информацию, которая может нам понадобиться, в адресе от.Вы можете запутать это или нет, в зависимости от ваших потребностей.Так, например, если у пользователя есть новое сообщение в системе, чей ID равен 100, адрес отправителя электронной почты, который мы отправляем пользователю, будет выглядеть примерно так: reply-to-message-100@myserver.com.Убедитесь, что любой формат, который вы используете для адреса от, никогда не будет генерировать реальный адрес электронной почты на вашем почтовом сервере.

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

Второй способ, которым мы это сделали, - это интеграция с http://postmarkapp.com/ - который имеет API входящей электронной почты, который скоро должен стать общедоступным (мы попали в бета-версию).Вы настроили бы все таким же образом, только перенаправив универсальный адрес вашего сервера на входящий адрес почтовой марки, который вы настроите с помощью Postmark, а затем Postmark выполнит обработку сообщения и вызовет веб-крючок, который вы также настроили, чтобы сделать то, что выкак с полученным объектом.

Я настоятельно рекомендую Postmark, но по большей части даже метод homespun работал эффективно.

-M

0 голосов
/ 02 февраля 2012

Просто в продолжение предыдущего ответа, входящий почтовый штемпель теперь является открытым и общедоступным http://postmarkapp.com/inbound За каждое электронное письмо, отправленное на ваш специально отформатированный входящий адрес электронной почты, вы получите вызов API-интерфейса в формате JSON со всеми компоненты электронной почты, заголовки, отсортированные для вас вложения.

...