Php mail настройка ubuntu

Обновлено: 04.07.2024

Favorite

Добавить в избранное

Главное меню » Linux » Использование функции mail() в PHP в Ubuntu

Преимущество готовой базы email ИП и юридических лиц

Настройка конфигурации

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

Создайте файл конфигурации с именем /etc/msmtprc с помощью следующей команды:

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

Выполните следующие команды, чтобы установить владельца и разрешения для файла / etc / msmtprc :

Откройте файл php.ini и измените следующий контент со следующими значениями:

Эта функция может принимать четыре аргумента. Первый аргумент принимает адрес электронной почты получателя. Второй аргумент берет тему электронного письма. Третий аргумент принимает тело письма. Последний аргумент является необязательным и содержит дополнительную информацию об электронном письме в виде строки или массива.

Отправка электронной почты с помощью функции mail()

В этом разделе статьи показаны различные примеры отправки электронной почты с помощью функции PHP mail().

Пример 2. Отправьте электронное письмо в формате HTML.

Пример 3. Отправьте электронное письмо с вложением.

Содержимое текстового файла считывается и кодируется перед прикреплением, а функция md5() используется в сценарии для генерации случайного числа для смешанного содержимого. Вся необходимая информация добавляется в переменные $headers и $message перед отправкой электронного письма.

Заключение

В PHP существует множество способов отправки электронных писем. Функция PHP mail() не работает должным образом в Ubuntu после настройки конфигурации. В этой статье показаны необходимые конфигурации и способ отправки электронных писем с помощью функции PHP mail().

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Я полагаю, мне нужно включить это или что-то? Как мне это сделать?

Из почтового руководства php:

Требования

Чтобы функции почты были доступны, PHP требует установленной и работающей системы электронной почты. Используемая программа определяется настройками конфигурации в файле php.ini.

Это означает, что вам нужно установить какой-нибудь почтовый сервер и настроить php для его использования. Обычно этот почтовый сервер является постфиксом в Ubuntu. Однако - если сторона php, которую вы кодируете, в конечном итоге будет храниться на стороне хостинг-сервиса (например, xmission), то, скорее всего, почтовый сервер там уже будет установлен. В этом случае просто протестируйте свой сайт онлайн, а не локально.

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

Установить постфикс

Установка: postfix / sudo apt-get install postfix Во время процесса вас спросят, в каком режиме вы хотите установить postfix. Есть четыре возможных режима:

  • Интернет : Ваш собственный почтовый сервер.
  • Спутник : внешний почтовый провайдер (например, Google) будет использоваться для отправки и получения почты. Сервер не будет получать почту.
  • Smarthost : смесь между двумя. Почта хранится локально, но отправляется через внешнего почтового провайдера.
  • Только местный : вас это не касается. Это системный внутренний почтовый сервер. Вы можете только отправлять почту от пользователя к пользователю в системе.

Остальные параметры установки зависят от вашего выбора этой общей конфигурации.

Скорее всего, вы выберете спутниковую установку. Это означает, что почта будет отправлена ​​через внешнего провайдера. В качестве smtp-сервера (сервера исходящей почты) вам нужно будет указать своих провайдеров smtp. Остальные варианты говорят сами за себя.

Конфигурация после установки

Большинство smtp-серверов требуют аутентификации по паролю для отправки почты. Поэтому postfix нужно будет знать этот пароль. Также есть такие вещи, как шифрование, которое нужно учитывать (что вам придется гуглить). Вот как вы настраиваете postfix с использованием аутентификации по паролю (sasl):

Установите libsasl2-модули

Установите libsasl2-modules и sasl2-bin , щелкнув значки Центра программного обеспечения или из терминала, используя:

Включите sasl-auth, добавив эти строки в /etc/postfix/main.cf

Создайте файл /etc/postfix/sasl_password с такой строкой:

Подставьте реальный пароль, имя пользователя и smtp-адрес.

Вы , возможно , придется обойти «разрешение отказано» ошибка по chown postfix:postfix /etc/postfix заранее.

Это должно делать это в большинстве случаев. Тем не менее, некоторые провайдеры SMTP требуют определенного адреса в качестве отправителя или шифрования.

Связанный: PEAR :: Mail интерфейс также может быть интересен для вас.

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

Чтобы противостоять этому, смотрите здесь. (Если вы хотите быть в безопасности, создайте фиктивную учетную запись Gmail)

Записки для себя и других.

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

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

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

Пишем следующие строчки, и не забываем их изменить под свои данные

Сохраняем и закрываем.

И все содержимое заменяем следующим:

Подставляем свои данные, сохраняем, и закрываем.

Далее откроем php.ini и отредактируем его:

находим параметр: sendmail_path, раскоментируем его и добавляем путь к ssmtp:

Сохраняем изменения и перезагружаем апач:

Sendmail

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

отредактируем php.ini И дадим знать для php, что мы будем отправлять почту, через sendmail

в параметре sendmail_path пропишем следующее:

Похожие записи

Запись опубликована автором Igor Ovsiychuk в рубрике Ubuntu с метками mail, mta, php, postfix, sendmail, ssmtp, почта. Добавьте в закладки постоянную ссылку.

LAMP. Отправка почты функцией PHP mail(). : 157 комментариев

Сам несколько часов мучался с Postfix, пока не узнал о ssmtp 🙂

Добрый день.
Попробовал сегодня второй легкий способ (что с sendmail) на своем LAMP (Ubuntu 11.10)
Во-первых, очень долго отрабатывает скрипт отправки, а во-вторых, на почту все-таки не приходит письмо, которое должно приходить.
Не знаете, в чем может быть проблема?

Проверьте почту в папке спам. Скорей всего письмо попало туда. По крайней мере у меня так было. Еще можете проверить на всякий случай логи.

В спаме тоже нет. А какие именно логи смотреть, если не сложно, скажите?
И еще подскажите, зачем параметр -t указывать в php.ini?

var/log/mail.err попробуйте без -t

Попробовал ssmtp. Оно отправляет, но кидает в спам. А sendmail вообще не отправляет.

мне сложно что-то сказать. но у меня все работает. Статьи тут из личного опыта, поэтому за работоспособность их отвечаю.

Проверьте установлены ли у Вас пакеты:
sandmail-base
sandmail-bin
sandmail-cf

если устанавливаете sendmail, то удалите ssmtp.
После каждого изменения php.ini нужно рестартить апач

Остановился на ssmtp. Мне этого достаточно. Главное проверять, как почта приходит.

Спасибо огромное за статью.

нет за что. Загляните вечерком. Или уже завтра утром. Специально для вас, сегодня еще раз проверю sendmail на свежо-установленном lamp

В спам попадает потому что спам-фильтру не нравятся заголовки письма. Например: X-Mailer

Автор, ты учебник русского языка вообще видел когда-нибудь? Почитай, а то любой «Джамшут» грамотней пишет.
Про ssmtp молчу, хихикая, поскольку пользуюсь gentoo, а там именно он стоит «из коробки».

1. Я с Украины, и русский язык вообще не изучал, и учебник даже не видел.
2. Я здесь пишу статьи для себя, а не сдаю экзамен
3. Покажите ошибки в орфографии.
4. Поздравляю Вас, что вы на gentoo, зачем тогда вообще читаете эту статью?
5. Нечего сказать по теме, проходите мимо.

а вы не смотрели логи? Нету не чего интересного?

в таком случае к сожалению не чем, не помогу. Самому не хватает знаний

спасибо большое. Пригодиться:)

И такой момент: если настроить отправку через SSMTP нужно ли удалять sendmail?

Спасибо за внимание.

насколько я понял то все нормально. После отправки происходит что-то типа отключения.

ок. А по первой части вопроса почему так могло произойти нет мыслей?

если в php.ini Не прописан sendmail_path, тогда php не будет знать с помощью чего ему отправлять письма. т.е. письма отправляться не должны. По поводу почему у вас то работало, то перестало, к сожалению, конкретно ответить не могу, т.к. я как и Вы (наверное) только учусь, и обо всех нюансах еще знаю:)

спасибо за внимание)

без проблем, обновил пост, и показал как можно настроить под яндекс

В конфиге строка
UseSTARTTLS=>YES

Простое человеческое спасибо! ))))

к сожалению в связке с прокси не пробовал. не помогу

Все сделал, как описано у Вас в статье, перегрузил apache, а все равно если смотреть конфигурационный файл php.ini через cms в админ панели изменений не происходит да и почта не отправляется

Проблема решена. Достаточно было назначить на /etc/ rwxr-xr-x

======цитата======
/etc/ssmtp/revaliases, при помощи которого мы сообщим ssmtp, что к почте определенных локальных пользователей нужно принудительно выставлять заголовок From
======конец цитаты=====

так вот потом еще вот такое нашел, но воплотить в жизнь пока не получилось

Разобрался, нужно было FromLineOverride=YES ставить, а потом в PHP скрипте уже задать From)

Александр! Спасибо за ответ. Плохо что нету уведомлений, а то я вот только сейчас увидел.

Привет. Кто-нибудь разобрался с www-data на яндексе?

Так отправляй по защищенному. У я ндекса есть справка на этот случай. Нафига тебе 25 порт?

SSMTP этот способ намного удобней чем через sendmail.
А вообще с последним таки надо разобраться, но у меня почему-то не отправляло почту.

Хотя, вот на соседнем серваке под bsd все отлично работает, правда настраивал давно, уже и не помню какие были подводные камни.


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

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

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