Нужно решение linux milter для записи тела письма в базу данных
Мы обмениваемся электронными письмами с различными клиентами и поставщиками. Я пытаюсь реализовать решение, в котором все сообщения электронной почты между нашим представителем и клиентом или поставщиком сохраняются в нашей базе данных, поэтому в нашей административной системе мы имеем запись сообщений. Я видел подобную систему для некоторых сайтов проектов, таких как Guru.com или elance.com. Вы общаетесь туда и обратно по электронной почте, но система регистрирует разговор.
Я искал пару дней, чтобы попытаться понять, как это реализовать. При изучении формы электронной почты Guru.com я вижу, что все они переходят на общий адрес электронной почты. Тема содержит зашифрованный идентификатор и "От: (имя фрилансера или имя владельца проекта)". Таким образом, кажется, что в этом поле есть milter, который анализирует тело этого письма, сохраняет его в БД и пересылает письмо на получатель (из строки темы).
Я использую поставщика для своей электронной почты, но запускаю свой собственный веб-сервер (EC2, AWS Linux), поэтому я думаю, что могу просто создать вторую запись MX, скажем, для "mail2", и использовать ее для этого приложения. Тогда я мог бы использовать что-то вроде "parseme@mail2.mydomain.com" и заставить мой сервер обрабатывать эти письма. Я думаю, что это можно сделать с помощью sendmail milter, но я не совсем уверен.
Мой поиск помощи или инструкции по этому вопросу ничего не дал. Возможно, я не знаю правильный термин для поиска. Я читал о многих milters, но ни один, кажется, не решает эту проблему. Может ли кто-нибудь предложить какую-либо помощь или указать мне правильное направление?
Спасибо
Thom
1 ответ
Типичный поток скорее один из доставки. Ваш вопрос помечен 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
, но для фактической обработки базы данных вам понадобится небольшой внешний скрипт в любом случае.