Як отримати PHP Надіслати пошту?


Відповіді:


51

З поштового керівництва php:

Вимоги

Щоб функції пошти були доступні, PHP вимагає встановленої та працюючої системи електронної пошти. Використовувана програма визначається налаштуваннями конфігурації у файлі php.ini.

Це означає, що вам доведеться встановити якийсь поштовий сервер і налаштувати php для його використання. Зазвичай цей поштовий сервер є поштовим кодом в Ubuntu. Однак - якщо сторона php, яку ви кодуєте, з часом буде збережена на стороні хостингової послуги (наприклад, xmission), поштовий сервер, швидше за все, вже буде встановлений там. У цьому випадку просто протестуйте свій сайт в Інтернеті, а не локально.

Якщо вам потрібно протестувати його у власній системі або хочете розмістити його на власному домашньому сервері, ніж продовжувати:

Установка Postfix

Установка: postfix Встановити постфікс / sudo apt-get install postfix Під час процесу вас запитають, у якому режимі ви хочете встановити постфікс. Існує чотири можливі режими:

  • Інтернет : Ваш власний поштовий сервер.
  • Супутник : Для надсилання та отримання пошти буде використовуватися зовнішній постачальник пошти (наприклад, Google). Сервер не отримає жодної пошти.
  • Smarthost : суміш між ними. Пошта зберігається локально, але надсилається через зовнішнього постачальника пошти.
  • Місцеві лише : Вас не стосуватиметься. Це системний сервер стажерів. Ви можете надсилати пошту лише від користувача до користувача в системі.

Решта параметрів установки залежать від вибору цієї загальної конфігурації.

Швидше за все, ви оберете встановлення супутника. Це означає, що пошту надсилатимуть за допомогою зовнішнього постачальника. Як smtp-сервер (сервер вихідної пошти), тоді вам доведеться вказати своїх постачальників smtp. Решта варіантів пояснюється сама собою.

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

Більшість smtp-серверів вимагають автентифікацію пароля для надсилання пошти. Тож постфікс повинен знати цей пароль. Також є такі речі, як шифрування, які слід врахувати (які вам доведеться гугл). Ось як налаштовуєш postfix за допомогою автентифікації пароля (sasl):

  • Встановіть libsasl2-модулі Встановіть libsasl2-модулі та sasl2-bin Встановіть sasl2-bin , натиснувши піктограми Software Center або з терміналу, використовуючи:

    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 :: Інтерфейс пошти також може вас зацікавити.

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

Щоб протистояти цьому, дивіться тут. (Якщо ви хочете бути захищеними, створіть фіктивний обліковий запис Gmail)


Відправка пошти з Ubuntu (локальна) працює. Але що робити, якщо я хочу, щоб моя Windows використовувала цю машину для надсилання пошти (також PHP)? Як це налаштувати?
JM на роботі

Не впевнений, що мені це питання. Ви можете пісок з машини Ubuntu. Тепер, що ви хочете зробити, це надсилати mal через цю машину Ubuntu зі свого ПК Windows через php? Це правильно?
con-f-use

2
Тепер пакет libsasl2 не існує. Я використовую 11.04. Його libsasl2-2 відповідно до оновленого пакету ..
mythicalcoder

61

Як уже зазначалося, постфікс буде надмірним, якщо вам просто потрібно надсилати електронні листи з 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)

Перезавантажте апаш, і ваш PHP повинен мати можливість надсилати вихідні електронні листи вже зараз.


3
Я думаю, ти мав на увазі sendmail_path = /usr/sbin/ssmtp -t. Це спрацювало, дякую
Омер Сабіч

1
ssmtp повинен створити символьне посилання для /usr/sbin/sendmail, яке правильно вказує на ssmtp. Тож використання також sendmail_path = /usr/sbin/sendmail -tмає працювати
Діма Л.

2
Детальніше про налаштування ssmtp(знайдено кілька корисних приміток): Як налаштувати PHP пошту в Debian - це питання + це посилання допомогло налаштувати програму.
gskema

1
Для gmail врахуйте, що ви повинні налаштувати свій обліковий запис google, щоб дозволити йому працювати "небезпечні додатки". Дивіться support.google.com/accounts/answer/6010255
aesede

1
Я також повинен був додати наступний рядок: FromLineOverride=YESщоб уникнути такої помилки:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons

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 <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

Звичайно, "sudo vi /etc/php5/conf.d" без php.ini не буде працювати. У моєму випадку (Ubuntu) мені довелося відредагувати '/etc/php5/apache2/php.ini', а також перезапустити apache 'sudo /etc/init.d/apache2 reload', щоб він працював.
Деян

1
До речі, ви можете перевірити свої msmtprc конфігурації з допомогою:cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Деяна

Було б добре, але це не працює для мене. У його журналі немає нічого. Здається, це зовсім добре, але без кісток.
Джеймс Т Снелл

2
Щоб зробити msmtp доступним у всій системі, встановіть "msmtp-mta".
колан

1
Якщо ви є занадто буквальним, як я в наступних інструкціях, ви фактично не зберігаєте дужки <> у конфігураційному файлі. Узяв у мене гарних 20 хвилин, щоб зрозуміти це
де Раад,

4

Має бути просте виправлення. Вам просто потрібно встановити Postfix, який робить фактичну електронну пошту.

sudo apt-get install postfix

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


2

Це старе запитання, і вище є гідні відповіді, але мені це було потрібно eximдля мого оточення. Також переконайтеся, що у вас встановлено sendmail в першу чергу ( $ which sendmail- повинен повернути щось на зразок / usr / sbin / sendmail). Я знайшов гарне керівництво на linode.com , але суть:

apt-get install exim4-daemon-light mailutils

далі:

dpkg-reconfigure exim4-config

який перейде до інтерактивного редактора.


1

Чудова відповідь , con-f-використання.

У мене є ще одне, що потрібно додати про "фіктивний обліковий запис 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

Потім скопіюйте кореневий тернт відтеплення у cacert.pemфайл:

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

Ось посилання, яке я використав: Налаштування Postfix для використання Gmail SMTP на Ubuntu | EasyEngine

Сподіваємось, це заощадить комусь кілька волосяних фолікулів ...


0

Я знайшов рішення, запропоновані Дімою Л. - це найпростіший спосіб і легкий для системи.

Просто деяке доповнення для більшої ясності налаштування. Ви повинні прокоментувати 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.