Настройка php mail centos

Обновлено: 07.07.2024

Курс предназначен пользователям, администрирующим сайты на платформе "1С-Битрикс: Управление сайтом". Курс Администратор. Модули позволяет освоить методы выполнения расширенных задач по администрированию модулей не относящихся к коммерческой деятельности Для модулей, связанных с торговлей в Интернете создан отдельный курс Администратор. Бизнес. .

Начальные требования

Необходимый минимум знаний для изучения курса:

  • базовые навыки компьютерной грамотности и навыков работы с ОС Windows;
  • базовые знания о WWW и организации доступа к веб-серверу;
  • базовые навыки установки и администрирования *nix-систем;
  • знание системы в рамках курса Контент-менеджер Мы считаем, что вы этот курс уже прошли и знаете многое о Битриксе. Поэтому подсказок во всплывающих окнах будет намного меньше, чем в курсе Контент-менеджер.
    Подробнее. , чтобы банально не путаться в интерфейсе.
  • знание системы в рамках курса Администратор. Базовый Мы считаем, что вы этот курс уже прошли и знаете многое об администрировании "1С-Битрикса". Поэтому подсказок во всплывающих окнах будет намного меньше, как и объяснений о том где и как выполнять общие задачи администрирования.

У нас часто спрашивают, сколько нужно заплатить

Курс полностью бесплатен. Изучение курса, прохождение итоговых тестов и получение сертификатов - ничего из этого оплачивать не нужно.

Ещё у нас есть Академия 1С-Битрикс, где можно обучиться на платной основе на курсах нашей компании либо наших партнёров.

Баллы опыта

В конце каждого урока есть кнопка Прочитано! . При клике на неё в Вашу итоговую таблицу опыта добавляется то количество баллов, которое указано в прочитанном После нажатия кнопки Прочитано! появится
окно подтверждения:


уроке.

Периодически мы заново оцениваем сложность уроков, увеличивая/уменьшая число баллов, поэтому итоговое количество набранных Вами баллов может отличаться от максимально возможного. Не переживайте! Отличный результат - это если общее число набранных Вами баллов отличается от максимального на 1-2%.

Тесты и сертификат

После изучения курса вам будет предложено пройти тесты на сертификацию. При успешной сдаче последовательности тестов на странице Моё обучение можно просмотреть результат обучения и загрузить сертификат в формате PDF.

Комментарии к урокам

Для преподавания оффлайн

Если данный курс берётся в качестве основы для оффлайного преподавания, то рекомендуемая продолжительность: 4 дня (32 академических часа).

Если нет интернета

iPhone:
FBReader
CoolReader
iBook
Bookmate

Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome

iOS
Marvin for iOS
ShortBook
обновляются периодически, поэтому возможно некоторое отставание их от онлайновой версии курса. Версия файла - от 01.11.2021.

Как проходить учебный курс?


В этом топике вы узнаете, как грамотно настроить, сервер исходящей почты и в частности функцию mail() в PHP. Сам являюсь жутким педантом. Люблю, что бы везде было все на своих местах, не терплю халтуры. Увидев один раз полную чушь в заголовках письма со своего сервера я разобрался с этим кардинально и безоговорочно. Под грамотной настройкой я подразумеваю такую, которая удовлетворяет потребности спам фильтров крупных почтовых систем, и просто выглядело красиво и осмысленно.

Как известно протокол SMTP не подразумевает никаких средств защиты от спама и аутентификации пользователя, поэтому крупными и не очень компаниями были придуманы «фиксы» безопасности протокола.
Если вы устанавливаете выделенный сервер с доменом размещенным на нем, очень рекомендуется выполнить данные настройки, что бы все было как надо.

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

Название заголовка выбрал именно такое, так как вначале своего пути я искал что-то вроде этого. Настраивать будем postfix, php, dns (ptr, spf), и другое.

Подробности под катом

Преамбула

Кто-то пользуется либами, которые заменяют функцию mail (например phpmailer), они могут общаться с SMTP напрямую, а могут отправлять и на локальный сервер. Но лучше использовать стандартную встроенную и настроенную функцию PHP mail() которая будет отправлять почту на локальный сервер исходящей почты, который в свою очередь будет с ней сам разбираться. При использовании данной функции тормозов всегда наименьшее количество, так как локальный почтовый агент быстро принимает либо отклоняет почту, а если принимает, то доставляет самостоятельно.

Статья отформатирована не самым лучшим образом. Извиняюсь, время поджимает, а рассказать хочется пока вспомнил, а то потом не времени будет.

Чем проверять нашу работу?

Тестируем вот этим методом


Мы будем очень много читать заголовки писем. Просматривать заголовки очень удобно в gmail, там есть такая фишка в 2 клика, сами найдете.

Каких целей в заголовках нам требуется достичь?


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

Приступим

— Настройка PHP
Ставим как хотим php, это вы как-нибудь без меня.

Идем в настройки php, заменяем эквивалентно:

Кстати 2: если вы поставите 5-й параметр на обычном виртуальном хостинге, то вам тоже рекомендуется проводить настройку вашего домена, как это описано ниже. Обращаю внимание, что операцию с PTR записями сделать невозможно, так как 1 IP = Домен, ну или по крайней мере не рекомендуется делать их 2, не помню уже.

— Настройка MTA, он же локальный сервер исходящей почты
Я вам искренне советую postfix, далее идем в настройки /etc/postfix/main.cf
для тех, кто уже нарвался на sendmail, и понял как они трудно выпиливаются из системы, советую команду:

— smtp_helo_name по дефолту это myhostname, читаем матчасть

— mydestination — если я не ошибаюсь, это задает те домены с которых MTA будет принимать почту на обработку, если у вас виртуальный хостинг (что я устроил на сервере дома), то без _ALL_ у вас будут проблемы с отправкой почты с других доменов кроме указанных.

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

— Разборки с почтовыми сервисами (почтовики)
А они нас считают как недобрый источник.
Наш сервер смог правильно helo представиться, но вот только почтовики нам все равно не доверяют.
Для этого были придуман алгоритм, для того что бы владелец домена с помощью DNS (если он конечно грамотный как мы) мог указывать, что вот таким-то серверам можно доверять, а другим нельзя.

У вас вместо ужаса который сейчас должно получиться вот это:


Мы уже на пути к истине. К слову, по умолчанию, почтовик все считает как v=spf1

all, что понижает уровень порога входа в блек лист, и а так же можно пользоваться вашим доменом для отправки спама, и вас сами того не знали пометят как плохиша на будущие времена.

v=spf1
это означает, что версия алгоритма spf1

-all
Указываем, что админ считает другие места не своими, и это может быть ближайший бордель в подворотне рассылающий спам от моего имени
(+all а это означает, что весь мир мои друзья)

Еще немного слов о заголовках (все вперемешку)

X-Mru-BL: 0:0:0:0 упаси вас иметь что-нибудь кроме нолей, это блеклисты.
X-Mru-OF: интерфейс с которого посылается, я так и не понял от чего это зависит.
X-PHP-Originating-Script: — я бы советовал добавлять, хотя если вы очень печетесь о безопасности и неразглашении, то можно и запретить. Делается это неподалеку от той настройки PHP которой мы делали. По умолчанию включено.

Еще можно и интересно посмотреть что пишет Яндекс при приеме, очень интересно.

Дополнительно

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


Материала к сожалению нет, так как по крупицам отовсюду собирал 4 месяца назад, потом меня не было времени, а теперь я написал по памяти.

Удачной грамотной настройки вашего сервера. Я попробовал объяснить хотя бы один из нескольких аспектов настройки.

Отправка почты является неотъемлемой частью любого интернет-ресурса, но вот настройка сервера, для правильной её работы, является не тривиальной задачей. В этой статье будет рассмотрен процесс установки почтового сервера на базе операционной системы CentOS 7.

1. Установка связки Apache + MySQL + PHP

Обычно, когда дело доходит до установки почтового сервера, веб-сервер и сервер баз данных уже настроен, но если это не так, то подробнее об установке написано в статье Установка LAMP на CentOS 7. Инструкция

2. Подключение дополнительных репозиториев

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

3. Создание базы данных vexim

Для создание связи между всеми составляющими цепи необходимо использовать одну базу данных. Подключаемся к серверу MySQL:

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

4. Установка Postfixadmin

На случай, если не все модули PHP установлены, необходимо произвести дополнительную установку.

Скачиваем Postfixadmin и устанавливаем его в папку /var/www/html/postfixadmin

Редактируем конфигурационный файл config.inc.php:

5. Установка Dovecot

Переименовываем стандартный конфиг, чтобы в случае необходимости можно было к нему вернуться:

Сохраняем следующие записи в конфигурационный файл dovecot.conf:

Для настройки доступа к базе данных, создаем отдельный конфиг dovecot-mysql.conf

и прописываем в него следующие настройки:

6. Установка Exim

Изменяем стандартный конфиг, при этом сохраняя резервную копию.

7. Установка ClamAV

После установки необходимо обновить базы:

8. Удаление Postfix

9. Настройка сервисов и доступов

После включения всех сервисов необходимо произвести настройку прав доступа:

10. Настройка Postfixadmin

Его необходимо заменить в файле config.inc.php (в корне каталога postfixadmin) вместо этой строки:

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

11. Установка Roundcube

Сохраняем следующие данные:

После записи необходимо перезагрузить Apache:

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

и выполняем запросы (данные указываем свои):

Установка и настройка Roundcube

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

Обработка почты является важной задачей, которая должна выполняться на многих серверах 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 и должен отправлять почту пользователю, поэтому я скопировал свой рабочий код с одного сервера и использовал его здесь, но он не отправляет почту.

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

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

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

После дополнительных поисков я изменил /etc/hosts с:

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

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

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

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

Может это поможет тебе

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

У меня такая же проблема. У меня есть сервер разработки дома и 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, где указан ваш ISP: s сервер исходящей почты:

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

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

6) Загрузитесь, чтобы обновить имя хоста:

Вот и все. Сейчас работает следующее:

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

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

Выбор имени хоста имеет решающее значение. По умолчанию в Centos6 используется localhost.localdomain , но mail() не работает с ним, если вы пропустите свой собственный адрес отправителя (например, '-fme@mydomain.com' ) при вызове mail (). Если вы уверены, что всегда вызываете mail (), используя свой реальный адрес в качестве адреса отправителя, имя хоста может быть любым, но если у вас есть существующие вызовы mail (), в которых отсутствует адрес отправителя (у меня есть сотни таких вызовов для в целях тестирования), то у вас должен быть реальный домен в качестве имени хоста, потому что имя хоста вашего сервера используется в этих случаях в качестве домена-адреса-отправителя. Реальный в том смысле, что в этом домене должна быть хотя бы A-запись DNS (по какой-то причине мой интернет-провайдер не требует NS-записи для адреса отправителя, только A-запись, но проверьте и уточните у своего интернет-провайдера). Обратной стороной использования домена, не относящегося к электронной почте, в качестве адреса отправителя является то, что ответы и уведомления о доставке попадут в рай для бит, но если вы удалите адрес отправителя в своем коде, это обычно означает, что вы что-то тестируете и отлаживаете и не нуждаетесь в ответе. функциональность. Домен может быть, например. тот, который вы получаете от динамического DNS-сервера, например. mydns157.dlinkddns.com , который может указывать на ваш домашний маршрутизатор (но не обязательно). Вы можете получить запись DNS в PHP, используя dns_get_record("mydns157.dlinkddns.com") , который возвращает такой массив:

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

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

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

РЕДАКТИРОВАТЬ: Я бы прокомментировал, но у меня пока недостаточно репутации.

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