9 декабря 2010 г.

Как настроить отправку почты средствами php-функции mail в Ubuntu?

Итак, задача: настроить на локальном сервере, под управлением ОС Ubuntu отправку почты стредствами php-функции mail().

1. Установка SendMail из репозитория Ubuntu
sudo apt-get install sendmail
2. Проверка работоспособность smtp-сервера при помощи коммандной строки и telnet-протокола
# telnet localhost smtp
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 localhost6.localdomain6 ESMTP Sendmail 
8.14.3/8.14.3/Debian-9.2ubuntu1; Thu, 9 Dec 2010 15:31:17 +0200;
(No UCE/UBE) logging access from: localhost.localdomain(OK)-
localhost.localdomain [127.0.0.1] 
HELO localhost 
250 localhost6.localdomain6 Hello localhost.localdomain [127.0.0.1], 
pleased to meet you 
MAIL FROM: no-reply@gmail.com
250 2.1.0 no-reply@gmail.com... Sender ok 
RCPT TO: my_exist@gmail.com
250 2.1.5 my_exist@gmail.com... Recipient ok
DATA 
354 Enter mail, end with "." on a line by itself
test message
. 
250 2.0.0 oB9DVHsE004837 Message accepted for delivery
 В результате выполнения последовательности комманд на указанный емейл (my_exist@gmail.com) должно прийти сообщение ("test message").

3. Настройка php.ini
gedit /etc/php5/apache2/php.ini 
 Находим и редактируем следующую строчку

sendmail_path = /usr/sbin/sendmail -t -i 
4.  Проверка функции mail()
<?

 echo  mail ("my_exist@gmail.com","test message",
             "test message","From:no-reply@gmail.com");

?>
Настройка завершена

12 комментариев:

  1. Добрый день! Все сделал по инструкции, через телнет отправляет письмо, а через php не хочет. Ошибок никаких не выдает.
    В логах Apache тоже нет ошибки

    ОтветитьУдалить
  2. Скорее всего проблему нужно искать в настройках php.ini, проверьте правильно ли прописан путь к sendmail, в той ли директории он лежит...

    ОтветитьУдалить
  3. А где в настройках sendmail'а указываются логин, пароль и хост, с которого будет отправляться письмо?

    ОтветитьУдалить
  4. все сделал, как написано.
    в телнете получил сообщение Message accepted for delivery
    смотрю в лог /var/log/mail.log и вижу
    Jun 8 17:28:12 gal sm-mta[7326]: p58AQ4ib007326: from=maxyer@mail.ru, size=5, class=0, nrcpts=1, msgid=<201106081027.p58AQ4ib007326@localhost6.localdomain6>$
    Jun 8 17:28:15 gal sm-mta[7361]: p58AQ4ib007326: to=maxyer@mail.ru, delay=00:00:26, xdelay=00:00:03, mailer=esmtp, pri=120005, relay=mxs.mail.ru. [94.100.17$
    Jun 8 17:28:15 gal sm-mta[7361]: p58AQ4ib007326: p58ASFib007361: DSN: Service unavailable
    Jun 8 17:28:18 gal sm-mta[7361]: p58ASFib007361: to=maxyer@mail.ru, delay=00:00:03, xdelay=00:00:03, mailer=esmtp, pri=30000, relay=mxs.mail.ru. [94.100.176$
    Jun 8 17:28:18 gal sm-mta[7361]: p58ASFib007361: p58ASFic007361: return to sender: Service unavailable
    Jun 8 17:28:19 gal sm-mta[7361]: p58ASFic007361: to=root, delay=00:00:01, xdelay=00:00:01, mailer=local, pri=30000, dsn=2.0.0, stat=Sent

    функция mail тоже не работает, хоть и возвращает true

    ОтветитьУдалить
  5. Через телнет сделал все как написано, выдало в конце сообщение "250 2.0.0 q0JF2WWf000787 Message accepted for delivery", однако письмо так и не получил...

    ОтветитьУдалить
  6. tail -f /var/log/mail.log Если ругается на DNS или на " unable to qualify my own domain name" советую поменять hostname и будет вам счастье.

    ОтветитьУдалить
  7. Не пойму, как отправить письмо с ящика no-reply@gmail.com не вводя пассворд?!?!

    ОтветитьУдалить
  8. отправляет то он не с no-reply@gmail.com, а использует этот параметр для того чтобы получатель видел адрес отправителя, по сути туда можно поставить любой существующий адрес. no-reply@gmail.com введен для примера, не уверен что он существует впринципе...

    ОтветитьУдалить
  9. У меня через телнет не отправило, зато через скрипт отсылает. Есть одно "но" - на mail.ru письма даже в спам не приходят... Видимо их спамассасин работает... На остальные почтовики без проблем отправка идёт.

    ОтветитьУдалить
  10. А что делать, если ругается так:
    Jan 17 09:25:08 domainname sendmail[17776]: r0H5P7sJ017776: to=xxx@domainname.ru, ctladdr=www-data (33/33), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=90469, relay=[127.0.0.1] [127.0.0.1], dsn=5.1.1, stat=User unknown

    ОтветитьУдалить
  11. Спасибо! На Ubuntu 12 не пришлось даже править php.ini.

    ОтветитьУдалить
  12. Через exim4 еще можно настроить - https://webshake.ru/post/33

    ОтветитьУдалить