Наш сервер разработки - это система CentOS LAMP для разработки веб-сайтов. Мы хотим, чтобы PHP отправлял электронную почту. Серверу не нужно получать электронную почту или что-то еще, буквально просто отправьте электронное письмо нашим разработчикам.
Я читал о нулевых клиентах и о том, как они могут заходить вместо постфикса, но мне не хотелось использовать что-то не в репозитории. После небольшой игры я получил postfix, чтобы (попробовать) отправить электронную почту, используя настройки, аналогичные тем, которые находятся в Постфикс на нулевом клиенте инструкции к файлу Readme стандартной конфигурации Postfix:
myhostname = localhost.localdomain
myorigin = localdomain
relayhost = $mydomain
inet_interfaces = loopback-only
mydestination =
Как только я настроил его таким образом, я попытался отправить электронное письмо с помощью telnet и увидел следующую ошибку из /var/log/maillog
:
Apr 23 19:26:25 devserver postfix/smtp[34437]: 604E95209C3: to=<user@domain.co.uk>, relay=localdomain[82.147.22.3]:25, delay=0.54, delays=0.07/0/0.07/0.41, dsn=5.0.0, status=bounced (host localdomain[82.147.22.3] said: 550-Please turn on SMTP Authentication in your mail client, or login to the 550-IMAP/POP3 server before sending your message. ourstatic.hostname.isp.co.uk (localhost.localdomain) 550-[123.456.789.0]:54710 is not permitted to relay through this server 550 without authentication. (in reply to RCPT TO command))
Предположительно, наш интернет-провайдер разрешит отправлять электронную почту, но она должна быть аутентифицирована. Означает ли это, что с ними или с сервером, на который мы пытаемся отправить электронное письмо? Я читал о SASL с постфиксом, но не уверен, стоит ли мне идти по этому пути.
Пожалуйста, предоставьте предложения или дополнительную литературу, в том числе, считаете ли вы, что есть лучшая альтернатива. Больше информации, которую я пропустил, буду рад поделиться.
Обновить
В ответ на некоторые комментарии - я не пытаясь для ретрансляции через своего интернет-провайдера, но когда я использую postifx на сервере разработки, чтобы попытаться отправить электронное письмо, я вижу вышеуказанное, поэтому, по-видимому, интернет-провайдер блокирует его.
Кое-что я забыл добавить, что еще больше смущает меня. Ранее мы использовали WampServer, и на наших машинах был установлен hMailServer, который был настроен только с SMTP. Отправка электронной почты через это (с настройками Windows SMTP в php.ini) работала нормально, и у нас не было проблем с этим сообщением реле. Понятия не имею, в чем разница, теперь мы пытаемся использовать postfix. - Я вижу, что hMailServer действует как SMTP-сервер - именно это я и хочу делать с postfix..
Что касается внутреннего почтового сервера в компании, у нас он есть в другом офисе, но мы не хотим направлять электронную почту куда-либо еще - мы просто хотим, чтобы PHP мог отправлять электронную почту только разработчикам, не затрагивая производственные службы. если что-то пошло не так (например, занесение в черный список или что-то в этом роде).
Возможно, моя установка неверна в этом постфиксе / мой интернет-провайдер думает, что я пытаюсь использовать их в качестве ретранслятора, когда все, что я хочу сделать, это иметь простую функциональность SMTP через постфикс для отправки электронной почты. Есть еще предложения?
Если вы не настроили postfix с помощью relayhost, скорее всего, вы отправляете сообщения на адреса одного провайдера, а их почтовый сервер видит вас как в своей сети и требует аутентификации, или они захватывают весь трафик на порт 25 и перенаправляют это на их собственный почтовый сервер (что является обычным, но несколько злым ИМХО).
Решение в обоих случаях - установить postfix для использования вашего почтового сервера ISP в качестве ретранслятора с аутентификацией. Такая конфигурация хорошо документирована в руководстве по postfix.
Вам нужен фиксированный IP-адрес, если вы хотите надежно отправлять в Интернет. Вы добьетесь большего успеха, если получите PTR
набор записей для возврата DNS-имени вашего почтового сервера. Если вы не можете получить фиксированный IP-адрес, используйте сервер ретрансляции вашего провайдера для отправки электронной почты.
Обычно, если ваш домен example.com
тогда ваш почтовый хост будет настроен как smtp.example.com
или mail.example.com
. Это было бы MX
для example.com
. Postfix должен быть настроен так, чтобы идентифицировать себя с этим доменным именем, а не localhost.localdomain
. localhost.localdomain
не будет MX в Интернете, и многие серверы откажутся от электронной почты или сохранят ее как спам.
Вам следует подумать о настройке SPF (Структура политики отправителя) DNS-записи для вашего домена.
Альтернативные подходы: - Вы можете настроить сервер для аутентификации на сервере вашего разработчика. MX
и доставить через аутентифицированное соединение.
- Вы можете настроить свой хост как локальный сервер на сайте разработчика MX
сервер. Для этого необходимо, чтобы вы могли идентифицировать администратора почты для MX
. Скорее всего, они потребуют, чтобы у вас был фиксированный IP-адрес.
Вы пытаетесь настроить почтовый ретранслятор. Следующая конфигурация в /etc/postfix/main.cf
должно хватить:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
# Replace this with your mail server's hostname
myhostname = svc1.int.mtak.nl
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# Replace this with your mail server's hostname
myorigin = smtp1.int.mtak.nl
# Domains for which local delivery is required, in your case only localhost
mydestination = smtp1.int.mtak.nl, svc1.int.mtak.nl, localhost.int.mtak.nl, localhost
# Host to which to relay mail to. Usually your ISP's SMTP server or your company's SMTP server, contact your administrator for details
relayhost = dc2.int.mtak.nl
# Networks that are allowed to send mail through your mail relay.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.100.0.0/24 10.100.2.0/24 10.100.4.0/24
После изменения конфигурации перезапустите Postfix, используя /etc/init.d/postfix restart
Я понял, что мой вариант использования был Postfix на автономном интернет-хосте:
Postfix должен работать без изменений на автономной машине с прямым доступом в Интернет.
Я сбросил свой main.cf
по умолчанию, попытался отправить электронное письмо через PHP и отслеживал maillog
давая мне эту ошибку:
postfix/sendmail[1787]: fatal: chdir /var/spool/postfix: Permission denied
Это сразу напомнило мне о SELinux ...
sudo setsebool -P httpd_can_sendmail 1
И теперь это работает! Большой урок извлечен очень окольными путями. Спасибо за помощь!