Назад | Перейти на главную страницу

Перенаправить всю входящую почту в скрипт

Я понятия не имею о доставке почты.

но мне нужно перенаправить ВСЕ входящие сообщения электронной почты (*@mydomain.com) в скрипт php.

я использую debian

Существует ли простой почтовый сервер для этого? (без exim, postfix и т. д.)

мне нужно только перенаправить весь почтовый запрос.

если это невозможно без exim, postfix и т.д., как я могу это сделать?

Спасибо!

Когда вы говорите «сценарий PHP», вы имеете в виду сценарий PHP на веб-сервере в другом месте или сценарий PHP, запускаемый из командной строки локально?

Я отправил почту на другой веб-сайт с помощью exim4 и curl, создав собственный транспорт, например:

send_to_site:
  driver = pipe
  command = /usr/bin/curl https://example.com/mail.php --data-urlencode "mail@-"
  user = nobody
  group = nogroup
  return_path_add
  delivery_date_add
  envelope_to_add

Если вы используете опцию «разделенной конфигурации» Debian, вы должны создать файл в /etc/exim4/conf.d/transport/ с этим в нем. В command здесь будет передано все письмо (заголовки и тело) в mail.php в переменной $_REQUEST["mail"]. Вам нужно, чтобы ваш PHP-скрипт обрабатывал заголовки.

Чтобы запустить транспорт, вам понадобится router настроен, который соответствует любому электронному письму, которое вы хотите получить, и использует вышеуказанное transport отправить его. В раздельной конфигурации маршрутизаторы входят в /etc/exim4/conf.d/router/. Для захвата ВСЕ почта для определенного домена, я это не тестировал, но думаю, что это правильно:

catchall_mail:
  driver = accept
  domains = mydomain.com
  transport = send_to_site

Debian пронумеровывает файлы в каталоге маршрутизатора, чтобы установить порядок, в котором маршрутизаторы проверяются. Первый соответствующий маршрутизатор будет использоваться для обработки электронной почты. Исходя из моей конфигурации здесь, вы, вероятно, захотите пронумеровать свою около 450, чтобы идти после псевдонимов и до маршрутизаторов, которые обрабатывают локальных пользователей, таких как hubusers и procmail.

После добавления этих файлов в каталоги транспорта и маршрутизатора вам нужно будет запустить update-exim4.conf чтобы Debian создал файл конфигурации, который фактически читает exim.

Если вы не хотите запускать полные пакеты smtp-сервера, такие как postfix, exim4, тогда fakeSMTP соответствовать вашим потребностям. Ниже приводится описание с веб-сайта.

fakeSMTP - это PHP-скрипт, который действует как любой традиционный постфиксный SMTP-сервер. Используемый вместе с inted, сценарий вызывается, когда почтовый клиент подключается к порту 25 на сервере.

Этот скрипт на самом деле не отправляет никаких электронных писем (хотя теоретически это можно было бы объединить с sendmail, если бы кто-то захотел). Он также не содержит никаких функций авторизации и, таким образом, действует исключительно как плохо настроенный открытый ретранслятор SMTP. Я написал его, чтобы создать приманку для спамеров, а также для тестирования и подтверждения концепции.

fakeSMTP.php можно скачать по предоставленной ссылке. Изменение /etc/inetd.conf следующим образом

smtp   stream    tcp    nowait    root    /path/to/fakeSMTP.php

В основном все входящие smtp-соединения будут обрабатываться fakeSMTP.php. Вам следует включить свой скрипт в fakeSMTP.php. Основываясь на следующем примере

$hp = new fakeSMTP;
$hp->serverHello = 'axllent.org ESMTP Postfix'; // Server identity (optional)
$hp->logFile = '/tmp/emails.log'); // Log the transaction files (optional)
$hp->receive();
if (!$hp->mail['rawEmail']) exit; // Script failed to receive a complete transaction
/* The script returns all the mail parts which you can process in $hp->mail(array) - read source for all details */

Ваш сценарий должен использовать $hp->mail(array) для обработки электронной почты.

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

Как упоминает Сирч в комментарии, вы можете получать огромное количество спама, поскольку этот скрипт / библиотека не включают RBL, проверку адресов или amavis / spamassassin. Возможно, вам придется немного поработать, если вы собираетесь включить их в свой собственный сценарий.

Если вы в конечном итоге решили использовать postfix, для интеграции RBL, amavis / spamassassin вы можете следить за ответом в ВОТ.

Я бы использовал postfix для размещения учетной записи catchall @yourdomain, а затем скрипт использовал бы почтовый ящик учетной записи catchall в качестве основы для вашего скрипта. Другой вариант - сделать что-то похожее на то, что этот парень сделал, но только если вы предпочитаете, чтобы почта передавалась по конвейеру, а не читалась из каталога.

Вам необходимо настроить POP3 или (желательно) IMAP-сервер. Затем создайте там свои почтовые ящики как обычно. Использовать соответствующие функции PHP имитировать почтовый клиент и периодически опрашивать почтовые ящики на наличие новых сообщений.

Я знаю, что вы можете сделать что-то подобное с помощью Hypermail, но это написано на Perl. Не уверен в реализации php.

Не уверен, что я правильно понял, что вы хотите сделать, но почему бы вам просто не получить почту, используя почтовый сервер, который вы предпочитаете, и не заставить ваш PHP-скрипт автоматически анализировать почтовые ящики (возможно, используя CRON) в поисках новых писем, выбирая данные, которые вам нужны, и удаление писем, если они вам больше не нужны?

Я сделал это с помощью Postfix и виртуальных псевдонимов доменов. В main.cf:

virtual_alias_domains = domain.name #Make sure this does _not_ appear in mydestination
virtual_alias_maps = hash:/etc/postfix/virtual

В /etc/postfix/virtual:

@domain.name    anything@localhost

В /etc/aliases:

anything:    "|/path/to/script.php"

После редактирования файлов запустите postmap /etc/postfix/virtual, newaliases, и service postfix reload доработать все новые конфиги. Также обязательно chmod +x скрипт PHP и хэшбэнг PHP вверху.

Самым простым решением (без дополнительного программного обеспечения), которое я видел до сих пор, является использование расширения IMAP PHP для доступа (по IMAP) к вашему почтовому ящику.

Вы можете найти информацию о текущем документация по расширению IMAP Вот: http://php.net/manual/en/ref.imap.php

Затем просто настройте crontab для запуска скрипта в желаемый период.