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

Настройка exim4 не работает с конвейером

Я пытаюсь настроить 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).