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

Если после установки например LAMP сервера у вас не работают скрипты с функцией php mail(), точней письма просто не отправляются, то это значит что вам нужно установить почтовый сервер, например Postfix. Но Postfix — это огромный с кучей возможностей почтовый сервер, и мне он был не к чему. Мне нужно было лишь заставить работать функцию mail(), точней просто отправлять письма с сервера, например при регистрации, или заказе товара в интернет-магазине, и т.д. Поискав информацию, я нашел очень хороший, минимальный MTA, для таких целей. Таким оказался — SSMTP. Нету не чего лишнего, прост в установке, и настройке. Давайте установим и настроем ssmtp для отправки писем, например через gmail.

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

sudo apt-get install ssmtp

Отредактируем файл-конфигурации:

sudo gedit /etc/ssmtp/ssmtp.conf

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

root=youremailhere@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=yourgmailusername
AuthPass=yourgmailpassword
UseSTARTTLS=YES

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

Есть еще и другой способ, ниже я приведу пример настроек для yandex.ru

sudo gedit /etc/ssmtp/revaliases

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

root:pupkin@yandex.ru:smtp.yandex.ru:465
UserUbuntu:pupkin@yandex.ru:smtp.yandex.ru:465
www-data:pupkin@yandex.ru:smtp.yandex.ru:465

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

Редактируем конфиг:

sudo gedit /etc/ssmtp/ssmtp.conf

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

hostname=localhost
FromLineOverride=NO
AuthUser=pupkin@yandex.ru
AuthPass=12345
mailhub=smtp.yandex.ru:465
UseTLS=YES

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

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

sudo gedit /etc/php5/apache2/php.ini

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

sendmail_path = /usr/sbin/ssmtp -t

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

sudo /etc/init.d/apache2 restart

Sendmail

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

Установим  sendmail

sudo apt-get install sendmail

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

sudo gedit /etc/php5/apache2/php.ini

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

sendmail_path = /usr/sbin/sendmail -t

Перезагрузим веб-сервер

sudo /etc/init.d/apache2 restart

Пост обновлен! 28.12.2011

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

Вы можете оставить комментарий, или отправить трэкбек на ваш сайт.

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

  1. Круто :3
    Буду иметь ввиду…

  2. Guedda:

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

  3. а вообще в силу того, что письма мои идут в папку спам, я пока отказался от sendmail использую первый способ. Хотя проверял и второй. Но пока не было времени разобраться почему письма в «спам» уходят. Как только решу вопрос, то сразу и обновлю статью

    • Guedda:

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

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

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

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

        • Guedda:

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

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

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

  4. zuk0:

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

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

  5. Дмитрий:

    Добрый день, Игорь.
    Объяснима ли такая ситуация, и, что посоветуете сделать?
    Установлен только sandmail, скрипт сайта через php-mail без успешно отправляет письма. Попробовал в консоли: echo aaaa | sendmail your@email.com, на mail и yandex не пришло, а на yahoo пришло.
    следовательно sandmail работает, но почему так выборочно? Сервер в америке физически располагается (дешевле и производительнее) или может у них в список Магнитского и наши почтовые сервисы попали?

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

      • Дмитрий:

        Логи конечно смотрел, но интересное, из за отсутствия опыта, не увидел.
        При отправке на яндекс было такое сообщение:
        (0/0), delay=00:00:02, xdelay=00:00:02, mailer=esmtp, pri=120300, relay=mx.yandex.ru. [77.88.21.89], dsn=4.0.0, stat=Deferred: 451 4.7.1 Sorry, the service is currently unavailable. Please come back later.

  6. Дмитрий:

    Для майла такое было:
    delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=120302, relay=mxs.mail.ru. [94.100.176.20], dsn=5.0.0, stat=Service unavailable

  7. Дмитрий:

    ip белый. Извиняюсь за глупый вопрос: как проверить ящик postmaster@domain.com если он на этом домене не заведен?

  8. Юрий:

    Игорь огромнейшее спасибо! Я весьма ламер и только вот с какого то раза поднял LAMP на Ubuntu 11.10. В сайте который пишу была необходимость реализовать возможность обратной связи. К вашей статье сначала отнесся с недоверием в силу того, что в файле ssmtp.conf не было пунктов AuthUser=,
    AuthPass=, UseSTARTTLS= вовсе (а мы помним что я ламер и был искренне уверен что если закоментаренных пунктов нет, то значит все, капец, добавлять ничего нельзя). Убил двое суток в установке postfix, скъюрелмаил и тп — все бестолку. В итоге отважился, установил ssmtp и настроил все по инструкции — о чудо — все заработало! Sendmail правда почту все же не захотел отправлять (я удалил предварительно ssmtp как написано), но это вероятно я что то недоделал — поровну. Вариант с ssmtp абсолютно рабочий. Спасибо еще раз!

  9. Алексей:

    Здравствуйте, настраивал так же как у вас, но не прописывал в php.ini путь к ssmtp, работало, потом прописал ssmtp -t, тоже работало какое-то время, потом перестало.
    Опять гуглил, попробовал ваш вариант /usr/sbin/ssmtp -t опять заработало…мистика, я чего-то недопонимаю…
    После этого в логах при отправке пишется така строка:
    221 2.0.0 Service closing transmission channel Но сообщение при этом приходит, я этого раньше не видел, оно нормальное?

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

  10. Алексей:

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

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

  11. Алексей:

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

  12. Василий:

    а можно примерчик не через gmail а скожем через mail.ru или yandex?
    через gmail пол инета завалено.

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

    уберите знак «>», я не заметил его, искал почему не отправляет :)

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

  15. Иван:

    Здравстуйте! Спасибо за статью, помогла! Первый вариант, правда, почему-то не сработал, зато второй сработал. У меня вот какой вопрос: отправлять к себе в локалхост получается, а вот на внешние адреса — нет:(. Выдается connection timed out. Можно ли как-то решить эту проблему? Может быть, дело в том, что я сижу через прокси и с динамическим IP?

Оставить комментарий