Как мне отправить PHP-почту?

69

Я установил Ubuntu 11.04, LAMP, используя tasksel.

Я обнаружил, что PHP mail() не работает.

Я полагаю, мне нужно включить это или что-то еще? Как это сделать?

    
задан JM at Work 08.06.2011 в 12:25
источник

7 ответов

51

Из справочника по почте 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), скорее всего, там будет установлен почтовый сервер. В этом случае просто проверьте свой сайт онлайн, а не локально.

Если вам нужно протестировать его в своей собственной системе или разместить на своем собственном домашнем сервере, то выполните следующие действия:

Установка Postfix

Установка: постфикс /sudoapt-getinstallpostfixВовремяпроцессавамбудетзаданвопрос,вкакомрежимевыхотитеустановитьпостфикс.Существуетчетыревозможныхрежима:

  • Интернет.Вашсобственныйпочтовыйсервер.
  • Спутник.Дляотправкииполученияпочтыбудетиспользоватьсяпоставщиквнешнейпочты(например,Google).Сервернеполучитникакойпочты.
  • Smarthost:смесьмеждуними.Почтахранитсялокально,ноотправляетсячерезвнешнийпочтовыйпровайдер.
  • Тольколокальная:васнекасается.Этосистемныйпочтовыйсервер.Выможетеотправлятьпочтутолькоотпользователякпользователювсистеме.

Остальныепараметрыустановкизависятотвашеговыбораэтойобщейконфигурации.

Скореевсего,вывыберетеустановкуспутника.Этоозначает,чтопочтабудетотправленасиспользованиемвнешнегопоставщика.Вкачествеsmtp-сервера(исходящегопочтовогосервера)вамнужнобудетуказатьсвоихпоставщиковsmtp.Остальныепараметрыявляютсяпояснительными.

Конфигурацияпослеустановки

Большинствоsmtp-серверовтребуютаутентификациипаролядляотправкипочты.Поэтомуpostfixдолжензнатьэтотпароль.Такжеестьтакиевещи,какшифрование,которыевыдолжныучитыватьприработесGoogle.Воткаквынастраиваетепостфикссиспользованиемаутентификациипароля(sasl):

  • Установить libsasl2-modules и sasl2-bin щелкнувзначки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)

    
ответ дан con-f-use 08.06.2011 в 13:33
источник
59

Как уже отмечалось, 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 должен теперь отправлять исходящие письма.

    
ответ дан Dima L. 29.10.2013 в 20:08
29

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
    
ответ дан colan 29.04.2012 в 21:19
3

Должно быть простое исправление. Вам просто нужно установить Postfix, который выполняет фактическую отправку по электронной почте.

sudo apt-get install postfix

Вы хотите запустить это из терминала (а не из программного центра), потому что вам нужно задать несколько вопросов настройки. Вы должны найти, чтобы просто принять все значения по умолчанию (только для локальных и т. Д.).

    
ответ дан Oli 08.06.2011 в 12:47
2

Это старый вопрос, и есть достойные ответы выше, но для моей среды мне понадобилось exim . Также убедитесь, что у вас установлен sendmail ( $ which sendmail - должен вернуть что-то вроде / usr / sbin / sendmail). Я нашел хорошее руководство по linode.com , но gist:

apt-get install exim4-daemon-light mailutils

, а затем:

dpkg-reconfigure exim4-config

, который приведет вас к интерактивному редактору.

    
ответ дан vrobinson 30.04.2014 в 23:46
1

Отличный ответ , совместимость.

У меня есть одна вещь, чтобы добавить о «фиктивной учетной записи 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

Надеюсь, это спасет кого-то несколько волосяных фолликулов ...

    
ответ дан deputy_D 25.05.2016 в 19:12
0

Я нашел решения, предоставленные 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
    
ответ дан SD. 13.04.2018 в 08:33