Мы обмениваемся электронными письмами с различными клиентами и поставщиками. Я пытаюсь реализовать решение, в котором все сообщения электронной почты между нашим представителем и клиентом или поставщиком сохраняются в нашей базе данных, поэтому в нашей системе администратора у нас есть запись сообщений. Я видел подобную систему для некоторых сайтов проектов, таких как Guru.com или elance.com. Вы общаетесь по электронной почте, но система регистрирует разговор.
Я искал пару дней, чтобы попытаться понять, как это реализовать. Изучая электронные письма от Guru.com, я вижу, что все они отправляются на общий адрес электронной почты. Тема содержит зашифрованный идентификатор и «От: (имя фрилансера или имя владельца проекта)» Таким образом, похоже, что в этом поле есть фильтр, который анализирует тело этого электронного письма, сохраняет его в БД и пересылает электронное письмо на получатель (из темы).
Я использую поставщика для своей электронной почты, но запускаю свой собственный веб-сервер (EC2, AWS Linux), поэтому я думаю, что могу просто создать вторую запись MX для, скажем, «mail2» и использовать ее для этого приложения. Затем я мог бы использовать что-то вроде «parseme@mail2.mydomain.com» и заставить мой сервер обрабатывать эти электронные письма. Я думаю, что это можно сделать с помощью milter sendmail, но я не совсем уверен.
Мой поиск помощи или инструкций по этому поводу ничего не дал. Возможно, я не знаю подходящий термин для поиска. Я читал о многих milters, но ни один, похоже, не решает эту проблему. Может ли кто-нибудь предложить мне помощь или указать мне правильное направление?
Спасибо
Том
Типичный поток - это скорее поток доставки. Ваш вопрос отмечен procmail поэтому я предполагаю, что решение Procmail приемлемо.
Вам не нужны дополнительные записи MX или другие махинации. Sendmail (или любой современный MTA; я бы порекомендовал Postfix, если вы не состоите в особом браке с Sendmail по устаревшим причинам) может запускать сценарий для входящего сообщения довольно тривиально.
Когда сообщение принято для доставки, MDA (в вашем случае Sendmail) ищет любые клиентские хуки, такие как .forward
файл. Если он найден, файл анализируется и выполняется любой конвейер в файле. Именно так Procmail обычно вызывается в устаревших системах (хотя в последнее время готовый рецепт для чтения пользовательских .procmailrc
и вызвать Procmail, если он найден, является частью стандартного набора функций Sendmail).
Вместо Procmail вы можете запустить собственный сценарий; или вы можете запустить сценарий со своего .procmailrc
(что полезно, поскольку Procmail заботится о ряде сценариев надоедливых ошибок).
:0
| /path/to/script
Теперь Procmail откроется /path/to/script
с сообщением в качестве стандартного ввода и предположим, что сценарий позаботится о его обработке (доставке и / или синтаксическом анализе, а затем отбрасывает его).
Добавить :c
отметьте, если вы хотите, чтобы Procmail также сохранял в $DEFAULT
:
:0c
| /path/to/script
Возможно, добавьте адрес получателя в качестве параметра в скрипт:
ADDR=`formail -rtzxTo:`
:0c
| /path/to/script "$ADDR"
Ваш сценарий может быть довольно простым; Я оставляю детали базы данных вам и показываю простой сценарий Perl для записи каждого входящего сообщения в файл.
#!/usr/bin/perl
use strict;
use warnings;
open (DB, ">>", "/path/to/file.db") or die "Complication: $!";
print DB "Correspondent: $ARGV[1]\n";
while (<>) {
print DB;
}
close DB;
Это идеально подходит для входящий электронной почты, но простой и понятный способ также регистрировать исходящие сообщения - это просто Bcc: адрес учетной записи для исходящих сообщений. С другой стороны, если вы используете веб-интерфейс для взаимодействия, вы можете писать из веб-скриптов, затем сгенерировать электронное письмо и отправить его и использовать Procmail (или что-то подобное) только для входящей части разговора. Это несколько упростило бы систему за счет принесения в жертву возможности использования системы просто путем написания электронных писем, что вполне естественно происходило бы из такого рода системы.
Вышеупомянутый сценарий Perl достаточно прост - и Procmail достаточно универсален - чтобы вы могли делать все это со своего .procmailrc
, но для фактической обработки базы данных вам в любом случае понадобится небольшой внешний скрипт.