Я встановив 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
Під час процесу вас запитають, у якому режимі ви хочете встановити постфікс. Існує чотири можливі режими:
Решта параметрів установки залежать від вибору цієї загальної конфігурації.
Швидше за все, ви оберете встановлення супутника. Це означає, що пошту надсилатимуть за допомогою зовнішнього постачальника. Як smtp-сервер (сервер вихідної пошти), тоді вам доведеться вказати своїх постачальників smtp. Решта варіантів пояснюється сама собою.
Більшість smtp-серверів вимагають автентифікацію пароля для надсилання пошти. Тож постфікс повинен знати цей пароль. Також є такі речі, як шифрування, які слід врахувати (які вам доведеться гугл). Ось як налаштовуєш postfix за допомогою автентифікації пароля (sasl):
Встановіть libsasl2-модулі та 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)
Як уже зазначалося, постфікс буде надмірним, якщо вам просто потрібно надсилати електронні листи з 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 повинен мати можливість надсилати вихідні електронні листи вже зараз.
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
який перейде до інтерактивного редактора.
Чудова відповідь , 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
Сподіваємось, це заощадить комусь кілька волосяних фолікулів ...
Я знайшов рішення, запропоновані Дімою Л. - це найпростіший спосіб і легкий для системи.
Просто деяке доповнення для більшої ясності налаштування. Ви повинні прокоментувати 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