Я установил Ubuntu 11.04, LAMP, используя tasksel.
Я обнаружил, что PHP mail()
не работает.
Я полагаю, мне нужно включить это или что-то еще? Как это сделать?
Я установил Ubuntu 11.04, LAMP, используя tasksel.
Я обнаружил, что PHP mail()
не работает.
Я полагаю, мне нужно включить это или что-то еще? Как это сделать?
Из справочника по почте php:
Requirements
For the mail functions to be available, PHP requires an installed and working email system. The program to be used is defined by the configuration settings in the php.ini file.
Это означает, что вам нужно установить какой-то почтовый сервер и настроить php для его использования. Обычно этот почтовый сервер является постфиксным в Ubuntu. Тем не менее - если сторона php, которую вы кодируете, в конечном итоге будет сохранена на стороне хостинга (например, xmission), скорее всего, там будет установлен почтовый сервер. В этом случае просто проверьте свой сайт онлайн, а не локально.
Если вам нужно протестировать его в своей собственной системе или разместить на своем собственном домашнем сервере, то выполните следующие действия:
Установка: постфикс /
sudoapt-getinstallpostfix
Вовремяпроцессавамбудетзаданвопрос,вкакомрежимевыхотитеустановитьпостфикс.Существуетчетыревозможныхрежима:
Остальныепараметрыустановкизависятотвашеговыбораэтойобщейконфигурации.
Скореевсего,вывыберетеустановкуспутника.Этоозначает,чтопочтабудетотправленасиспользованиемвнешнегопоставщика.Вкачествеsmtp-сервера(исходящегопочтовогосервера)вамнужнобудетуказатьсвоихпоставщиковsmtp.Остальныепараметрыявляютсяпояснительными.
Большинствоsmtp-серверовтребуютаутентификациипаролядляотправкипочты.Поэтомуpostfixдолжензнатьэтотпароль.Такжеестьтакиевещи,какшифрование,которыевыдолжныучитыватьприработесGoogle.Воткаквынастраиваетепостфикссиспользованиемаутентификациипароля(sasl):
Установитьи
щелкнувзначкиSoftwareCenterилистерминала,используя:
sudoapt-getinstalllibsasl2-2libsasl2-modulessasl2-bin
Включитьsasl-auth,добавивэтистрокив/etc/postfix/main.cf
#addto/etc/postfix/main.cfsmtp_sasl_auth_enable=yessmtp_sasl_security_options=noplaintextnoanonymoussmtp_sasl_password_maps=hash:/etc/postfix/sasl_password
Создайтефайл/etc/postfix/sasl_password
спомощьюстроки,например:
[email protected]:USERPASSWORD
Подставьтефактическийпароль,имяпользователяиsmtp-адрес.
Обновитьпостфикс:
sudochmod600/etc/postfix/sasl_password#forsafetyofyoursmtppasswordsudopostmaphash:/etc/postfix/sasl_passwordsudopostmap/etc/postfix/sender_canonicalsudo/etc/init.d/postfixrestart
Возможно,вампридетсяобойтиchown postfix:postfix /etc/postfix
заранее.
Это должно быть сделано в большинстве случаев. Однако некоторые провайдеры smtp требуют определенного адреса в качестве отправителя или шифрования.
Связанный: интерфейс PEAR :: Mail может также вас интересует.
Gmail (и, возможно, другие службы) может не понравиться, что вы пытаетесь отправить почту таким образом, так как это может считаться небезопасным по их стандартам и блокирует вашу попытку, т. е. ничего не произойдет на экране или где-то в целом процесс блокирует вашу аутентификацию. Также должен быть включен ваш POP3.
Чтобы встретить это, смотрите здесь. (Если вы хотите быть в безопасности, то создайте фиктивную учетную запись Gmail)
Как уже отмечалось, postfix будет излишним, если вам просто нужно отправлять электронные письма с php при разработке приложений на вашем домашнем компьютере.
Я лично использую очень простой и легкий пакет ssmtp. Он будет использовать любой smtp-сервер для отправки исходящих сообщений электронной почты. Установите его, запустив:
sudo apt-get install ssmtp
Затем отредактируйте файл /etc/ssmtp/ssmtp.conf
, закомментируйте существующую строку mailhub и добавьте следующие строки (этот пример предназначен для сервера gmail smtp):
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>
(укажите свое имя пользователя и пароль gmail. Конечно, вы можете использовать любой другой SMTP-сервер).
Теперь убедитесь, что ваш php.ini имеет правильный sendmail_path
. Он должен выглядеть следующим образом:
sendmail_path = /usr/sbin/sendmail -t
( Из комментариев @ dima-l и @ omar-sabic : здесь вам не нужно указывать ssmtp
, потому что установка должна была создать символическую ссылку для /usr/sbin/sendmail
, которая правильно указывает до ssmtp
. В противном случае вы должны указать sendmail_path = /usr/sbin/ssmtp -t
)
Перезагрузите apache и ваш php должен теперь отправлять исходящие письма.
PHP требует, чтобы клиент SMTP отправлял почту. Вы можете установить полнофункциональный агент передачи почты (MTA), например Postfix для обслуживания этого функция, но это слишком много, если вам нужно отправлять почту через PHP. Вместо этого установите msmtp . Он легкий и намного проще настроить.
Установить msmtp
sudo apt-get install msmtp-mta ca-certificates
Настроить его
Создайте новый файл конфигурации:
sudo vi /etc/msmtprc
... со следующей информацией о конфигурации:
# Set defaults.
defaults
# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL
Вам нужно заменить данные конфигурации, представленные всем в пределах "<" и ">" (включительно, удалите их). Для имени хоста / имени пользователя / пароля используйте обычные учетные данные для отправки почты через поставщика почты.
Скажите PHP, чтобы использовать его
sudo vi /etc/php5/apache2/php.ini
Добавьте эту единственную строку:
sendmail_path = /usr/bin/msmtp -t
Должно быть простое исправление. Вам просто нужно установить Postfix, который выполняет фактическую отправку по электронной почте.
sudo apt-get install postfix
Вы хотите запустить это из терминала (а не из программного центра), потому что вам нужно задать несколько вопросов настройки. Вы должны найти, чтобы просто принять все значения по умолчанию (только для локальных и т. Д.).
Это старый вопрос, и есть достойные ответы выше, но для моей среды мне понадобилось exim
. Также убедитесь, что у вас установлен sendmail ( $ which sendmail
- должен вернуть что-то вроде / usr / sbin / sendmail). Я нашел хорошее руководство по linode.com , но gist:
apt-get install exim4-daemon-light mailutils
, а затем:
dpkg-reconfigure exim4-config
, который приведет вас к интерактивному редактору.
Отличный ответ , совместимость. Р>
У меня есть одна вещь, чтобы добавить о «фиктивной учетной записи Gmail»:
Это настоятельно рекомендуется, потому что вам нужно настроить учетную запись gmail, чтобы разрешить менее безопасные приложения: Ссылка
В противном случае вы получите сообщение «пожалуйста, войдите в свой веб-браузер, а затем повторите попытку» в файле /var/log/mail.log
.
Также я обнаружил, что получаю ошибку тайм-аута, если я не отправлю gmail smtp не отменил мой корневой сертификат. Для этого:
sudo nano /etc/postfix/main.cf
добавьте следующее в конец файла
smtp_tls_CAfile = /etc/postfix/cacert.pem
Затем скопируйте корневой сертификат thawte в файл cacert.pem
:
cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem
Вот ссылка, которую я использовал: Настройка Postfix для использования Gmail SMTP на Ubuntu | EasyEngine
Надеюсь, это спасет кого-то несколько волосяных фолликулов ...
Я нашел решения, предоставленные Dima L. , самый простой способ и amp; легкий к системе.
Просто добавление для большей ясности при настройке. Вы должны указать hostname
в файле /etc/ssmtp/ssmtp.conf
. Файл примера ssmtp.conf
выглядит следующим образом:
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.yourdomain.com
UseSTARTTLS=YES
[email protected]
AuthPass=YOUREMAILPASSWORD
# Where will the mail seem to come from?
#rewriteDomain=
# The full hostname
#hostname=
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES