Если после установки например 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
Круто :3
Буду иметь ввиду…
Сам несколько часов мучался с Postfix, пока не узнал о ssmtp
Добрый день.
Попробовал сегодня второй легкий способ (что с sendmail) на своем LAMP (Ubuntu 11.10)
Во-первых, очень долго отрабатывает скрипт отправки, а во-вторых, на почту все-таки не приходит письмо, которое должно приходить.
Не знаете, в чем может быть проблема?
Проверьте почту в папке спам. Скорей всего письмо попало туда. По крайней мере у меня так было. Еще можете проверить на всякий случай логи.
В спаме тоже нет. А какие именно логи смотреть, если не сложно, скажите?
И еще подскажите, зачем параметр -t указывать в php.ini?
var/log/mail.err попробуйте без -t
а вообще в силу того, что письма мои идут в папку спам, я пока отказался от sendmail использую первый способ. Хотя проверял и второй. Но пока не было времени разобраться почему письма в «спам» уходят. Как только решу вопрос, то сразу и обновлю статью
Попробовал ssmtp. Оно отправляет, но кидает в спам. А sendmail вообще не отправляет.
мне сложно что-то сказать. но у меня все работает. Статьи тут из личного опыта, поэтому за работоспособность их отвечаю.
Проверьте установлены ли у Вас пакеты:
sandmail-base
sandmail-bin
sandmail-cf
если устанавливаете sendmail, то удалите ssmtp.
После каждого изменения php.ini нужно рестартить апач
Остановился на ssmtp. Мне этого достаточно. Главное проверять, как почта приходит.
Спасибо огромное за статью.
нет за что. Загляните вечерком. Или уже завтра утром. Специально для вас, сегодня еще раз проверю sendmail на свежо-установленном lamp
Автор, ты учебник русского языка вообще видел когда-нибудь? Почитай, а то любой «Джамшут» грамотней пишет.
Про ssmtp молчу, хихикая, поскольку пользуюсь gentoo, а там именно он стоит «из коробки».
1. Я с Украины, и русский язык вообще не изучал, и учебник даже не видел.
2. Я здесь пишу статьи для себя, а не сдаю экзамен
3. Покажите ошибки в орфографии.
4. Поздравляю Вас, что вы на gentoo, зачем тогда вообще читаете эту статью?
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.
Для майла такое было:
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
проверьте почту ящика postmaster@domain.com там должны быть письма с ответами от серверов. У вас на сервере ip белый?
ip белый. Извиняюсь за глупый вопрос: как проверить ящик postmaster@domain.com если он на этом домене не заведен?
Разобрался вроде. Вам нужно в dns прописать PTR запись (нужно чтоб провайдер это сделал), или SPF: http://ru.wikipedia.org/wiki/Sender_Policy_Framework
иначе при проверке mail.ru-сервером вашего домена, он не находит следующую запись, и отвергает ваши письма, считая, что это спам
Посмотрел информацию, но ясности пока не прибавилось. почта домена функционирует на яндексе, соотвественно mx запись ведет на mail.yandex.ru. Отсюда не очень ясно какая запись (txt) должна быть, что верифицировать ip адрес с которого скрипты сообщения отсылают. (на странице вики ссылка на синтаксис как раз битая)
в таком случае к сожалению не чем, не помогу. Самому не хватает знаний
Вот наткнулся на инфу, может когда-нибудь пригодиться: http://sudo.in/node/58
спасибо большое. Пригодиться:)
или настройте отправку через SSMTP (Как написано в начале статьи), там без танцев все работать будет, только что специально у себя, проверял отправку на mail.ru
И такой момент: если настроить отправку через SSMTP нужно ли удалять sendmail?
да
Игорь огромнейшее спасибо! Я весьма ламер и только вот с какого то раза поднял LAMP на Ubuntu 11.10. В сайте который пишу была необходимость реализовать возможность обратной связи. К вашей статье сначала отнесся с недоверием в силу того, что в файле ssmtp.conf не было пунктов AuthUser=,
AuthPass=, UseSTARTTLS= вовсе (а мы помним что я ламер и был искренне уверен что если закоментаренных пунктов нет, то значит все, капец, добавлять ничего нельзя). Убил двое суток в установке postfix, скъюрелмаил и тп — все бестолку. В итоге отважился, установил ssmtp и настроил все по инструкции — о чудо — все заработало! Sendmail правда почту все же не захотел отправлять (я удалил предварительно ssmtp как написано), но это вероятно я что то недоделал — поровну. Вариант с ssmtp абсолютно рабочий. Спасибо еще раз!
Здравствуйте, настраивал так же как у вас, но не прописывал в php.ini путь к ssmtp, работало, потом прописал ssmtp -t, тоже работало какое-то время, потом перестало.
Опять гуглил, попробовал ваш вариант /usr/sbin/ssmtp -t опять заработало…мистика, я чего-то недопонимаю…
После этого в логах при отправке пишется така строка:
221 2.0.0 Service closing transmission channel Но сообщение при этом приходит, я этого раньше не видел, оно нормальное?
Спасибо за внимание.
насколько я понял то все нормально. После отправки происходит что-то типа отключения.
ок. А по первой части вопроса почему так могло произойти нет мыслей?
если в php.ini Не прописан sendmail_path, тогда php не будет знать с помощью чего ему отправлять письма. т.е. письма отправляться не должны. По поводу почему у вас то работало, то перестало, к сожалению, конкретно ответить не могу, т.к. я как и Вы (наверное) только учусь, и обо всех нюансах еще знаю:)
спасибо за внимание)
а можно примерчик не через gmail а скожем через mail.ru или yandex?
через gmail пол инета завалено.
без проблем, обновил пост, и показал как можно настроить под яндекс
В конфиге строка
UseSTARTTLS=>YES
уберите знак «>», я не заметил его, искал почему не отправляет
Спасибо, исправил
Простое человеческое спасибо! ))))
Здравстуйте! Спасибо за статью, помогла! Первый вариант, правда, почему-то не сработал, зато второй сработал. У меня вот какой вопрос: отправлять к себе в локалхост получается, а вот на внешние адреса — нет:(. Выдается connection timed out. Можно ли как-то решить эту проблему? Может быть, дело в том, что я сижу через прокси и с динамическим IP?
к сожалению в связке с прокси не пробовал. не помогу