Я действительно столкнулся с проблемой из-за интеграции с пользовательским приложением клиента.
Sendmail действительно легко настроить и понять, но то, что мне нужно, довольно сложно реализовать.
Устройство будет читать полученные электронные письма, обрабатывать их и сохранять некоторые данные в своей базе данных. Для этого клиент спросил меня, возможно ли, что sendmail, когда получает электронное письмо, не помещает его в один файл в профиле пользователя, а сохраняет его по указанному пути с файлом электронной почты для каждого обработанного электронного письма.
Это можно сделать или есть какая-то гениальная идея обмануть и позволить работать?
Спасибо
С.
sendmail
использует другую программу (ы) для доставки сообщений локальным получателям. В Linux-е это обычно procmail
. Procmail может доставлять сообщения на Maildir или mh папка. Оба варианта кажутся примерно тем, что вам нужно.
От имени пользователя root используйте команду ниже, чтобы проверить, какая программа используется sendmail в качестве локальной почтовой программы:
echo '=M' | sendmail -bt | grep local
ИЛИ
убедить клиента использовать IMAP или POP3 для доступа к почтовому ящику. UID (уникальный идентификатор) может доставлять то, что хочет клиент, более портативным способом.
Похоже, электронное письмо хранится в формате Mbox, который представляет собой всего лишь один файл с каждым электронным письмом одно за другим. В наши дни этот формат используется редко, поскольку в современных условиях он имеет тенденцию довольно быстро расти и становиться громоздким.
Самым простым было бы настроить Sendmail для использования Procmail для локальной доставки и настроить Procmail для хранения сообщений в формате Maildir.
Точный процесс будет зависеть от ОС, но это должен быть просто случай установки Procmail, а затем
1) Настройте Sendmail для использования Procmail, что в большинстве случаев означает просто добавление следующих строк в .mc
файл конфигурации и перестройка config.
FEATURE(local_procmail)
MAILER(procmail)
2) Создайте или обновите procmailrc
файл конфигурации для хранения сообщений в формате Maildir. (Обозначается /
в конце пути хранения)
DEFAULT=$HOME/mail/
В mail
каталог, вероятно, должен существовать и иметь cur
, new
и tmp
вложенные папки. Они должны принадлежать пользователю и иметь разрешения в режиме 700.
Поиск информации о Sendmail / Procmail / Maildir для вашей ОС может помочь вам найти некоторые руководства или документацию.
Разрешить приложению читать файлы из места получения, вероятно, является плохой дизайнерской идеей. Написание сообщений электронной почты не является атомарной операцией, и вы не хотите, чтобы приложение принимало неполные сообщения.
(Формат Maildir предотвращает это, записывая входящие сообщения на tmp/
каталог, недоступный для почтовых клиентов. Только после того, как файл сообщения был успешно зафиксирован на диске, файл сообщения будет переименован / перемещен в new/
каталог, поскольку это атомарная операция.)
Общее решение для приложений для приема электронной почты: @AnFi уже предложил, чтобы приложение работало как почтовый клиент и позволяло ему опрашивать почтовый ящик IMAP / POP3 и пропускать / удалять сообщения, которые были успешно обработаны.
Аналогичным образом обычным является получение приложением сообщений электронной почты из STDIN.
fetchmail <other-options> --mda /path/to/application
~/.forward
файл, содержащий строку "|/path/to/application"
/etc/aliases
файл с записью mailboxname: "|/path/to/application"
Для sendmail последний часто требует настройки оболочки с ограниченным доступом sendmail (smrsh) скопировав / путь / к / приложению в / etc / smrsh