Я пытаюсь настроить exim4 на сервере, чтобы он мог получать почту для пары поддоменов, и я хочу передать это в скрипт PHP. Я хочу, чтобы вся входящая почта обрабатывалась с помощью моего собственного скрипта (PHP).
Я разместил некоторые детали своих настроек ниже. Я новичок в настройке этого, так что извините, если я полностью отключен.
Я пробовал следующую команду, но, похоже, она ничего не сделала. Я не видел новых писем в /var/mail
, и скрипт PHP, похоже, не пострадал.
echo "This is a test." | mail -s Testing someone@sub1.domain.net
Вот кастомный роутер, в exim4.conf
:
cmd_router:
driver = accept
domains = +local_domains
transport = cmd_transport
no_verify
Вот транспорт, в exim4.conf
:
cmd_transport:
debug_print = "T: using cmd_transport"
driver = pipe
command = /dir/to/php_mailer.php
delivery_date_add
envelope_to_add
Вот update-exim4.conf.conf
файл:
dc_eximconfig_configtype='internet'
dc_other_hostnames='QAnetwork ; sub1.domain.net ; sub2.domain.net ; localhost'
dc_local_interfaces='127.0.0.1 ; 127.0.1.1 ; 123.123.123.123(server's external ip)'
dc_readhost='QAnetwork ; sub1.domain.net ; sub2.domain.net'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'
* Обновить *
Я наблюдал за основным журналом exim4 после выполнения команды echo mail и получил следующее:
2014-07-03 14:39:45 1X2lv7-0004mg-9Q <= root@ETC_MAILNAME U=root P=local S=488
2014-07-03 14:39:45 1X2lv7-0004mg-9Q ** someone@sub1.domain.net: Unrouteable address
2014-07-03 14:39:45 1X2lv7-0004mk-Br Error while reading message with no usable sender address (R=1X2lv7-0004mg-9Q): at least one malformed recipient address: root@ETC_MAILNAME - malformed address: _MAILNAME may not follow root@ETC
2014-07-03 14:39:45 1X2lv7-0004mg-9Q Process failed (1) when writing error message to root@ETC_MAILNAME (frozen)
Я не совсем уверен, что делать с этой ошибкой. Я немного изучил ошибку «не маршрутизируемый адрес», но не смог заставить ее работать.
Любые идеи?
Вы не дали много подробностей в своем вопросе, поэтому я предоставлю список общих моментов, на которые стоит обратить внимание.
1) Распространенная проблема заключается в том, что скрипт php не читается и / или не исполняется пользователем exim. Протестируйте, установив скрипт php в режим 755 и повторно отправив его.
2) Убедитесь, что путь взлома в скрипте правильный. Обычно это будет #! / usr / bin / php Вы должны иметь возможность запускать его из командной строки, как если бы он был вызван из exim:
cat temp.eml | /dir/to/php_mailer.php
3) Или, если вы тестируете его, называя его php /dir/to/php_mailer.php
, то вам нужно настроить свой транспорт для прямого вызова двоичного файла php. Используйте полный путь к двоичному файлу php.
4) Установлено несколько переменных среды, потому что команда не запускается под оболочкой (такой как bash или sh). Вместо этого скрипт php напрямую выполняется exim в транспорте.
5) В целом документация по конвейеру очень хороша, поэтому убедитесь, что вы прочитали ее полностью и точно понимаете, что делают используемые вами параметры. У вас есть простое приложение для транспортировки труб, и вы не делаете с ним ничего сверхсложного. Трубный транспорт
РЕДАКТИРОВАТЬ: после просмотра сообщения журнала выше проблема, похоже, не в вашем транспорте или в вашем php-скрипте. Проблема в том, что процесс отправки электронного письма на ваш Exim говорит, что отправитель корень @ ETC_MAILNAME вместо root на каком-то действительном доменном имени. Вам нужно сначала исправить то, что отправляет электронное письмо в Exim. В качестве альтернативы, это также может быть что-то не так с вашей конфигурацией Exim, потому что Exim может ожидать преобразования ETC_MAILNAME в содержимое файла / etc / mailname (стандартная операция для системы Exim4 на основе Debian).