Php mail не работает centos 7

Обновлено: 07.07.2024

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

Он всегда печатает 1. Тот же код работает отлично в другом проекте. Пожалуйста, расскажите мне, что я могу сделать, чтобы включить его здесь тоже? Любая помощь будет высоко оценена!

ОТВЕТЫ

Ответ 1

После установки sendmail * и выполнения следующих команд:

У меня все еще была такая же проблема. Я проверил свой /var/log/maillog и увидел ошибку:

После большего поиска я изменил /etc/hosts на:

и теперь функция почты теперь работает нормально.

Ответ 2

У меня была та же проблема. У меня есть сервер разработки на дому и prod-сервер на внешнем сервере, а входящие письма отправляются на другой сервер. PHP: s mail() отлично работает в серверном доме, но не дома.

Я немного протестировал и получил его для работы дома так же, как и в серверном доме. Разница между методами в серверном доме и доме - это конфигурация sendmail. Серверный дом Мне пришлось установить sendmail, и все было нормально, но дома мне пришлось установить также sendmail-cf и использовать его для добавления адреса сервера исходящей почты.

Предположим, что у вас есть сервер Centos, Apache и PHP на домашнем сервере, и вы хотите отправлять электронные письма с помощью функции PHP: s mail().

1) Задайте имя хоста на домашнем сервере в двух местах:/etc/sysconfig/network и /proc/sys/kernel/hostname следующим образом:

2) Установите sendmail и sendmail-cf:

3) Добавьте следующую строку в /etc/mail/sendmail.mc, где у вас есть сервер исходящей почты вашего интернет-провайдера:

4) Обновить sendmail.cf:

5) Перезапустите sendmail и apache:

6) Загрузите обновление имени хоста:

Что это. Теперь следующие работы:

Вы можете пропустить -f:

Некоторые ноты имени хоста

Ответ 3

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

/var/log/maillog показал мне проблему с разрешением Postfix.

Ошибка отслеживания. Я нашел решение политикой SELinux для CentOS (я использую версию 6).

Вы можете использовать -P, чтобы сделать изменение постоянным; Мне просто нужно было ввести пароль reset по электронной почте, поэтому мне не нужен мой случай.

EDIT: Я бы прокомментировал, но пока у меня недостаточно репутации.

Ответ 4

может это поможет вам

Ответ 5

У меня была эта проблема, две вещи.

Мои письма собирались спамить, определенно проверить это. Возможно, потому, что у моего сервера не было записей PTR и SPF.

Но также, мне было намного проще протестировать sendmail с этим:

Ответ 6

Я бы рекомендовал использовать SwiftMailer просто так много.

Ответ 7

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

Он всегда печатает 1. Тот же код работает отлично в другом проекте. Пожалуйста, расскажите мне, что я могу сделать, чтобы включить его здесь тоже?
Любая помощь будет высоко оценена!

спросил(а) 2011-12-01T15:50:00+04:00 9 лет, 11 месяцев назад

У меня была эта проблема, две вещи.

Мои письма собирались спамить, определенно проверить это. Возможно, потому, что у моего сервера не было записей PTR и SPF.

Но также, мне было намного проще протестировать sendmail с этим:

После установки sendmail * и выполнения следующих команд:

У меня все еще была такая же проблема. Я проверил свой /var/log/maillog и увидел ошибку:

После большего поиска я изменил /etc/hosts на:

и теперь функция почты теперь работает нормально.

ответил(а) 2011-12-02T11:13:00+04:00 9 лет, 11 месяцев назад

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

/var/log/maillog показал мне проблему с разрешением Postfix.

Ошибка отслеживания. Я нашел решение политикой SELinux для CentOS (я использую версию 6).

Вы можете использовать -P, чтобы сделать изменение постоянным; Мне просто нужно было ввести пароль reset по электронной почте, поэтому мне не нужен мой случай.

EDIT: Я бы прокомментировал, но пока у меня недостаточно репутации.

У меня была та же проблема. У меня есть сервер разработки на дому и prod-сервер на внешнем сервере, а входящие письма отправляются на другой сервер. PHP: s mail() отлично работает в серверном доме, но не дома.

Я немного протестировал и получил его для работы дома так же, как и в серверном доме. Разница между методами в серверном доме и доме - это конфигурация sendmail. Серверный дом Мне пришлось установить sendmail, и все было нормально, но дома мне пришлось установить также sendmail-cf и использовать его для добавления адреса сервера исходящей почты.

Предположим, что у вас есть сервер Centos, Apache и PHP на домашнем сервере, и вы хотите отправлять электронные письма с помощью функции PHP: s mail().

1) Задайте имя хоста на домашнем сервере в двух местах:/etc/sysconfig/network и /proc/sys/kernel/hostname следующим образом:

Обработка почты является важной задачей, которая должна выполняться на многих серверах Linux, независимо от того, какую конкретную услугу они предоставляют. Во многих случаях этим службам часто нужно отправлять почту. Вот почему вам необходимо настроить сервер для пересылки почты на центральный почтовый сервер. В этой статье вы узнаете, как это сделать.


Основы email

Н астройкае среды для обработки электронной почты помогает понять, что там происходит. В этом разделе вы узнаете о различных ролях, которые могут иметь участники процесса электронной почты. Вы также о процессе передачи электронной почты.

Понимание ролей в обработке почты

В обработке почты участники могут иметь разные роли:

Процесс передачи электронной почты

Сервер исходящей почты может быть настроен так, чтобы требовать аутентификацию внутреннего клиента.


Решения для почтовых серверов

В Linux доступны различные решения для почтовых серверов. В прошлом почтовый сервис Sendmail был самым распространенным почтовым сервером Linux. Он был сложным, и использовал синтаксис, который было трудно понять. Хоть это было и сложно, Sendmail стал стандартом для обработки почты в Linux. Postfix был разработан для совместимости с Sendmail, но проще в настройке.

Postfix используется в качестве почтового сервиса. Postfix состоит из различных процессов, каждый из которых решает конкретные задачи. Процессы управляются главной службой Postfix, которая читает файл конфигурации /etc/postfix/master.cf, чтобы узнать, какие службы используются для конкретных задач. Такой подход делает Postfix модульным и подключаемым; при необходимости легко заменить один конкретный сервис другим сервисом.

Некоторые примеры процессов Postfix перечислены в таблице 1, а в листинге 1 приведено частичное содержимое файла конфигурации /etc/postfix/master.cf.

Листинг 1.Частичное перечисление файла конфигурации /etc/postfix/master.cf

Конфигурирование Postfix

Чтобы настроить Postfix, вам нужно изменить соответствующие параметры.

Все параметры Postfix находятся в файле конфигурации /etc/postfix/main.cf. Проблема состоит в том, что этот файл содержит много параметров, которые позволяют вам настраивать Postfix для множества различных вариантов использования.

Параметры Postfix можно настроить с помощью команды postconf, а в качестве альтернативы их можно изменить непосредственно в файле конфигурации /etc/postfix/main.cf. В следующих подразделах вы узнаете, какие параметры важны и как их использовать для настройки Postfix для ретрансляции почты.

При работе с параметрами Postfix рекомендуется использовать команду postconf. Файл /etc/postfix/main.cf может содержать много строк, в результате чего параметры легко пропустить. Использование команды postconf позволяет избежать ошибок.

Для начала вы можете использовать команду postconf без каких-либо опций, которая показывает список всех действующих на данный момент настроек (включая настройки по умолчанию, не видимые в main.cf). grep позволяет вам легко найти аргумент, который вам нужно изменить.

Если после команды postconf следует имя определенного параметра, этот конкретный параметр будет показан. Чтобы изменить параметры postconf, вы можете использовать опцию -e, за которой следует параметр и его предполагаемое значение. Используйте, например, postconf -e 'inet_protocols = ipv4', чтобы установить значение параметра inet_protocols в ipv4. В листинге 2 показан частичный вывод команды postconf.

Понимание основных параметров

В конфигурации Postfix много параметров. Лишь немногие действительно имеют значение для настройки среды, в которой почту можно пересылать на центральный почтовый сервер. В таблице 2 представлен их обзор.

Первый параметр, который нужно рассмотреть, это inet_interfaces. По умолчанию он в режиме loopback only. В этом нет ничего плохого, если ваш почтовый сервер должен отправлять только исходящую почту (что обычно имеет место, если Postfix работает на компьютере с ролью нулевого клиента), но если вы хотите настроить свой сервер для приема электронной почты, вы должны указать IP-адрес или адреса, которые будет прослушивать ваш процесс Postfix, к примеру inet_interfaces = 10.0.0.1, localhost.

Параметр inet_protocols важен, если вы настраиваете свою собственную тестовую среду. По умолчанию Postfix использует IPv6. Это означает, что поиск DNS для имен хостов которые используются (например, relayhost) также выполняются через IPv6. Если у вас есть DNS-сервер, который не был настроен для IPv6, доставка электронной почты не удастся. Простым решением этой проблемы является использование только IPv4. Для этого обязательно установите inet_protocols = ipv4. Если ваш почтовый сервер используется в среде, где DNS доступен и настроен для обработки IPv4, а также трафика IPv6, вам не нужно изменять этот параметр.

Хотя использование этого параметра повышает безопасность вашего сервера, он не облегчает работу мобильных пользователей. Пользователи, которые будут подключаться к неизвестным сетям WiFi, должны будут использовать почтовый сервер, который предоставляется в этой конкретной сети WiFi, потому что ваш почтовый сервер их отклонит. Если вы хотите использовать этот параметр для усиления безопасности, вы можете рассмотреть возможность использования VPN, который гарантирует, что пользователи всегда будут подключаться из знакомых сетей.


Настройка Postfix для пересылки почты

Чтобы настроить параметры почтового сервера, которые вы хотите использовать, вы можете либо отредактировать содержимое /etc/postfix/main.cf напрямую, либо использовать команду postconf. Если используется без каких-либо аргументов, команда postconf выводит список всех (816 шт.) параметров конфигурации, которые использует Postfix. Если вы используете grep, вы легко найдете параметр, который необходимо изменить. Вы также можете использовать postconf для изменения настроек, используя параметр -e, за которым следует настройка, которую вы хотите изменить. Упражнение 1 показывает, как это сделать.

Упражнение 1.Изменение параметров Postfix с помощью postconf

  1. На сервере server1 войдите под рутом и введите postconf. Вы увидите длинный список всех настроек Postfix.
  2. Введите postconf myorigin. Команда покажет текущее значение настройки myorigin.
  3. Введите postconf mydomain, чтобы проверить текущее значение параметра mydomain.
  4. Введите postconf -e 'myorigin = $mydomain', чтобы изменить значение параметра myorigin.
  5. Повторите команду postconf myorigin. Обратите внимание, что пока ничего не изменилось.
  6. Введите postfix check. Команда проверяет содержимое файла /etc/postfix/main.cf и предупреждает, если с ним что-то не так (всегда хороший выбор перед началом использования новой конфигурации).
  7. Перезагрузите Postfix systemctl reload postfix и повторите шаг 5. Вы увидите, что настройка была изменена.
  8. Введите postconf -n. Команда покажет все параметры с параметром, который отличается от значения по умолчанию.
man 5 postconf для полного обзора и объяснения всех 816 параметров Postfix.

Упражнение 2. Настройка нулевого клиента Postfix.

Для выполнения этого упражнения вам необходимо использовать службы DNS.

1. Войдите под рутом на server1.

2. Убедитесь, что вы можете резолвить server2, используя host server2.

7. Отключите IPv6, используя postconf -e 'inet_protocols = ipv4'.

9. Введите systemctl reload postfix, чтобы перезапустить сервер Postfix на сервере server1.

11. На server2 введите firewall-cmd --add-service smtp --permanent, а затем firewall-cmd --reload, чтобы добавить службу SMTP в файрвол.

Проверка конфигурации

Настройка нулевого почтового клиента, как описано выше, не сложна. Однако, если вы забудете изменить необходимый параметр, вы можете оказаться в конфигурации, которая не работает. Если это произойдет, полезно знать, где искать решение проблем. Следующие советы помогут вам найти проблему:

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

Легко найти примеры конфигурации для всех конфигураций Postfix, Многие примеры хранятся в файлах /usr/share/doc/postfix-<версия>/README. Например, если вы выполните команду grep null для этих файлов, вы найдете всю конфигурацию, необходимую для настройки конфигурации нулевого клиента.

Упражнение 3.

1. На server2 введите firewall-cmd --remove-service smtp --permanent, а затем firewall-cmd --reload.

Подведём итоги

В этой статье мы рассмотрим, как настроить почтовый сервер в операционной системе CentOS 7, с помощью которого вы сможете делать локальную отправку почты от приложений. Ранее мы уже рассматривали настройку почтового сервера в операционной системе Ubuntu Linux, поэтому если вы используете Ubuntu или Debian, обратитесь к руководству для этих дистрибутивов.

Настройка почтового агента

Пройдите авторизацию в операционной системе с помощью клиента SSH. В статье предполагается, что вы используете доступ к командам привилегированного режима с помощью sudo, если же вы работаете пол пользователем root, просто опускайте sudo при вводе команды.

В терминале введите команды для установки дополнительных пакетов для удобства редактирования файлов:

Для установки почтового сервера postfix введите команду:

После установки проверьте состояние сервиса postfix, для чего введите команду:

Статус postfix в Centos

По умолчанию почтовый сервер postfix выключен, поэтому вы должны его запустить. Для чего используется команда:

Для того, чтобы почтовый сервер автоматически запускался, необходимо активировать загрузку по умолчанию:

Убедимся, что служба запущена и работает:

Активный postfix в Centos

Откройте для редактирования конфигурационный файл Postfix:

В конфигурационном файле main.cf найдите строку:

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

Далее найдите следующие строки:

Измените их так, чтобы значение каждой из них соответствовало тому, которое приведено в следующем листинге:

На этом редактирование файла конфигурации Postfix завершено. Сохраните файл main.cf. Теперь необходимо перезапустить сервер Postfix:

Для корректной работы почты необходимо установить имя хоста в то, которое указано в настройках почтовой системы:

Для того, чтобы почта успешно доставлялась адресатам, необходимо, чтобы для домена отправки была задана корректная PTR запись. Обычно редактирование PTR-записей осуществляется службой поддержки компании, у которой вы приобретаете IP-адреса для сервера.

Для проверки работы отправки почты можно воспользоваться командой mail :

Настройка переадресации с локального ящика сервера на внешний ящик

Переадресация настраивается с помощью файла /etc/aliases. Рассмотрим создания правила для переадресации локальной почты для root на внешний почтовый ящик. Откройте файл /etc/aliases для редактирования:

Если другие приложения не создавали свои записи, то содержимое файла должно выглядеть так:

Внесите в файл дополнительную строку для настройки переадресации:

Для применения новых данных введите в консоли команду:

Для повышения безопасности вашего почтового сервера читайте наше руководство по дальнейшей настройке Postfix для защиты от несанкционированного использования.

Если вы хотите использовать серверы почтовых систем для обслуживания отправки почты, воспользуйтесь следующими статьями:

Предпочитаете сервисы Yandex? Тогда читайте соответствующее руководство для подключения своего домена к инфраструктуре Yandex.

Читайте также: