Как заставить мой PHP отправлять почту?

Я установил Ubuntu 11.04, LAMP с помощью tasksel.

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

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

Как уже отмечалось, postfix был бы излишним, если вам просто нужно отправлять электронные письма с php во время разработки приложений на вашем домашнем компьютере.

Я лично использую очень простой и легкий пакет ssmtp. Он будет использовать любой smtp-сервер для отправки исходящих электронных писем.Установите его, запустив:

sudo apt-get install ssmtp

Затем отредактируйте /etc/ssmtp/ssmtp.conf файл, закомментируйте существующую строку mailhub и добавьте следующие строки (этот пример предназначен для smtp-сервера gmail):

mailhub=smtp.gmail.com:587UseSTARTTLS=YESAuthUser=<YOUR-EMAIL>@gmail.comAuthPass=<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:

Требования

Для того чтобы функции почты были доступны, PHP требует установленной и работающей системы электронной почты. Используемая программа определяется настройками конфигурации в файле php.ini.

Это означает, что вам нужно установить какой-то почтовый сервер и настроить php для его использования. Обычно этот почтовый сервер является постфиксным в Ubuntu. Однако - если сторона php, которую вы кодируете, в конечном итоге будет сохранена на стороне службы хостинга (например, xmission), почтовый сервер, скорее всего, уже будет установлен там. В этом случае просто протестируйте свой сайт онлайн, а не локально.

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

Установка Постфикса

Установка: постфикс Install postfix / sudo apt-get install postfixВо время процесса вас спросят, в каком режиме вы хотите установить postfix. Существует четыре возможных режима:

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

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

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

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

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

  • Устанавливать libsasl2-модули Install libsasl2-modules и sasl2-бункер Install 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 требуют определенного адреса в качестве отправителя или шифрования.

Связанный: ГРУША::Почта интерфейс также может представлять для вас интерес.

Gmail (и, возможно, другим сервисам) может не понравиться, что вы пытаетесь отправить почту таким образом, поскольку по их стандартам это может быть сочтено небезопасным и заблокирует вашу попытку, т.Е. на экране ничего не произойдет или где-то весь процесс заблокирует вашу аутентификацию. Также ваш POP3 должен быть включен.

Чтобы противостоять этому, смотрите здесь. (Если вы хотите быть в безопасности, создайте фиктивную учетную запись Gmail)

Для отправки почты PHP требуется SMTP-клиент. Вы могли бы установить полнофункциональный агент передачи почты (MTA), например Постфикс для обслуживания этой функции, но это излишне, если вам нужно отправлять почту только через 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 ontls_starttls ontls_trust_file /etc/ssl/certs/ca-certificates.crt# Set up a default account's settings.account defaulthost <smtp.example.net>port 587auth onuser <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

Должно быть простое решение. Вам просто нужно установить 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

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

Я нашел решения, предоставленные Дима Л. это самый простой и легкий способ доступа к системе.

Просто небольшое дополнение для большей ясности в настройке. Вы должны прокомментировать 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.commailhub=smtp.yourdomain.comUseSTARTTLS=YESAuthUser=mail@yourdomain.comAuthPass=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: addressFromLineOverride=YES

Это просто и легко отправить из вашего gmail. Send E-mail From Localhost on Ubuntu with PHP - Kvcodes