Я понятия не имею о доставке почты.
но мне нужно перенаправить ВСЕ входящие сообщения электронной почты (*@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 для запуска скрипта в желаемый период.