Я установил Ubuntu 11.04, LAMP, используя tasksel.
Я считаю, что PHP mail()
не работает.
Я полагаю, мне нужно включить это или что-то? Как мне это сделать?
Я установил Ubuntu 11.04, LAMP, используя tasksel.
Я считаю, что PHP mail()
не работает.
Я полагаю, мне нужно включить это или что-то? Как мне это сделать?
Ответы:
Из почтового руководства php:
Требования
Чтобы функции почты были доступны, PHP требует установленной и работающей системы электронной почты. Используемая программа определяется настройками конфигурации в файле php.ini.
Это означает, что вам нужно установить какой-нибудь почтовый сервер и настроить php для его использования. Обычно этот почтовый сервер является постфиксом в Ubuntu. Однако - если сторона php, которую вы кодируете, в конечном итоге будет храниться на стороне хостинг-сервиса (например, xmission), то, скорее всего, почтовый сервер там уже будет установлен. В этом случае просто протестируйте свой сайт онлайн, а не локально.
Если вам нужно протестировать его в вашей собственной системе или вы хотите разместить его на своем домашнем сервере, выполните следующие действия:
Установка: postfix / sudo apt-get install postfix
Во время процесса вас спросят, в каком режиме вы хотите установить postfix. Есть четыре возможных режима:
Остальные параметры установки зависят от вашего выбора этой общей конфигурации.
Скорее всего, вы выберете спутниковую установку. Это означает, что почта будет отправлена через внешнего провайдера. В качестве smtp-сервера (сервера исходящей почты) вам нужно будет указать своих провайдеров smtp. Остальные варианты говорят сами за себя.
Большинство smtp-серверов требуют аутентификации по паролю для отправки почты. Поэтому postfix нужно будет знать этот пароль. Также есть такие вещи, как шифрование, которое нужно учитывать (что вам придется гуглить). Вот как вы настраиваете postfix с использованием аутентификации по паролю (sasl):
Установите libsasl2-modules и sasl2-bin , щелкнув значки Центра программного обеспечения или из терминала, используя:
sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
Включите sasl-auth, добавив эти строки в /etc/postfix/main.cf
# add to /etc/postfix/main.cf
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noplaintext noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
Создайте файл /etc/postfix/sasl_password
с такой строкой:
smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
Подставьте реальный пароль, имя пользователя и smtp-адрес.
Обновление постфикса:
sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
sudo postmap hash:/etc/postfix/sasl_password
sudo postmap /etc/postfix/sender_canonical
sudo /etc/init.d/postfix restart
Вы , возможно , придется обойти «разрешение отказано» ошибка по 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 сможет отправлять исходящие письма прямо сейчас.
sendmail_path = /usr/sbin/ssmtp -t
. Это сработало, спасибо
/usr/sbin/sendmail
, которая правильно указывает на ssmtp. Таким образом, использование sendmail_path = /usr/sbin/sendmail -t
должно работать так же
ssmtp
(нашел несколько полезных заметок): Как настроить PHP почту в Debian - этот вопрос + эта ссылка помогла настроить программу.
FromLineOverride=YES
чтобы избежать следующей ошибки:550 5.7.60 SMTP; Client does not have permissions to send as this sender
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 <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL
Вам необходимо заменить данные конфигурации, представленные всем, что находится внутри «<» и «>» (включительно, удалите их). Для хоста / имени пользователя / пароля используйте ваши обычные учетные данные для отправки почты через вашего почтового провайдера.
Скажите PHP, чтобы использовать его
sudo vi /etc/php5/apache2/php.ini
Добавьте эту единственную строку:
sendmail_path = /usr/bin/msmtp -t
cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Должно быть простое исправление. Вам просто нужно установить Postfix, который выполняет фактическую рассылку.
sudo apt-get install postfix
Вы хотите запустить это из терминала (а не из центра программного обеспечения), потому что он должен задать вам несколько вопросов по настройке. Вы должны принять все значения по умолчанию (только локальные и т. Д.).
Это старый вопрос, и на него есть достойные ответы выше, но я нуждался exim
в своей среде. Кроме того, сначала убедитесь, что у вас установлен sendmail ( $ which sendmail
- должен возвращать что-то вроде / usr / sbin / sendmail). Я нашел хорошее руководство на linode.com , но суть:
apt-get install exim4-daemon-light mailutils
с последующим:
dpkg-reconfigure exim4-config
который доставит вас в интерактивный редактор.
Отличный ответ , контрафакт.
У меня есть одна вещь, которую нужно добавить о «фиктивной учетной записи gmail»:
Настоятельно рекомендуется, потому что вы должны настроить свою учетную запись Gmail, чтобы разрешить менее безопасные приложения: https://www.google.com/settings/u/0/security/lesssecureapps.
В противном случае вы получите «войдите в систему с помощью веб-браузера. а затем попробуйте еще раз "ошибка в вашем /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., являются наиболее простым и легким в использовании.
Просто некоторые дополнения для большей ясности в настройке. Вы должны оставить комментарий 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
AuthUser=mail@yourdomain.com
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