php.ini & SMTP= - как вы передаете имя пользователя и пароль

My ISP требует, чтобы я отправил имя пользователя и пароль для исходящей SMTP почты.

Как заставить PHP использовать это при выполнении php.mail()? Файл php.ini содержит только записи для серверов (SMTP= ) и From: (sendmail_from= ).


person Charles Faiga    schedule 21.09.2008    source источник
comment
Простой. Используйте hMailServer. На настройку у меня ушло 5 минут. См. мой ответ: stackoverflow.com/a/34818989/1293492   -  person Tamás Bolvári    schedule 16.01.2016


Ответы (10)


Команда PHP mail() не поддерживает аутентификацию. Ваши варианты:

  1. PHPMailer- Учебник
  2. PEAR - Учебник
  3. Пользовательские функции. См. различные решения в разделе примечаний: http://php.net/manual/en/ref.mail.php
person daremon    schedule 21.09.2008
comment
Стоит отметить, что PHP mail() поддерживает аутентификацию, если (а) sendmail установлен на сервере и (б) детали аутентификации указаны в файле php.ini. Подробности смотрите в ответах ниже. - person James McCormack; 11.04.2014
comment
@JamesMcCormack, если PHP поддерживает аутентификацию только в этих двух условиях, как работает PHPMailer? Это просто PHP, и он позволяет определять детали аутентификации в коде. - person dxvargas; 28.01.2015
comment
@hiphip Джеймс МакКормак имеет в виду PHP mail(), а не PHPMailer - person mastazi; 15.01.2016
comment
Чтобы mail() поддерживал аутентификацию, используйте hMailServer. На настройку у меня ушло 5 минут. См. мой ответ: stackoverflow.com/a/34818989/1293492 - person Tamás Bolvári; 16.01.2016

Я применяю следующие детали к файлу php.ini. работает нормально.

SMTP = smtp.example.com
smtp_port = 25
username = [email protected]
password = yourmailpassord
sendmail_from = [email protected]

Эти детали такие же, как и в настройках Outlook.

person sugunan    schedule 13.03.2012
comment
Должен ли он работать и через порт 465, если SMTP-сервер использует этот порт? - person Tamás Bolvári; 14.01.2016
comment
Я. Любой порт, который вы можете указать. - person sugunan; 18.01.2016
comment
У меня не работало на PHP 5.6.20: Warning: mail(): SMTP server response: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM - person djk; 09.05.2016
comment
У меня не работает, и я не смог найти никакой документации, которая указывала бы, что имя пользователя или пароль являются допустимыми директивами php.ini. - person wedstrom; 07.06.2016
comment
@wedstrom После ввода этого вы получили какую-либо ошибку при перезагрузке apache? - person sugunan; 09.06.2016
comment
У меня тоже не сработало. Для этого используется php-пакет SendMail. - person Jay Momaya; 04.07.2020

Используйте Fake sendmail для Windows для отправки почты.

  1. Создайте папку с именем sendmail в C:\wamp\.
  2. Извлеките эти 4 файла в папку sendmail: sendmail.exe, libeay32.dll, ssleay32.dll и sendmail.ini.
  3. Затем настройте C:\wamp\sendmail\sendmail.ini:
smtp_server=smtp.gmail.com
smtp_port=465
[email protected]
auth_password=your_password
  1. #P2# <блочная цитата> #P3#
  2. Теперь перезапустите Apache, и это все, что вам нужно сделать.

person Henrik Rosvall    schedule 19.02.2014
comment
Это не работает для меня. Windows 10, WampServer 2.5, PHP 5.5.12. - person Tamás Bolvári; 14.01.2016
comment
Спасибо!!! Это сработало для меня. Примерно через неделю попыток настроить свой собственный SMTP-сервер я получил его благодаря вашему ответу, большое спасибо ‹3 - person user3400351; 18.02.2020
comment
Используйте последнюю версию sendmail для Windows и следуйте основным инструкциям по установке, обязательно удалите smtp из вашего файла php.ini, потому что это на самом деле не требуется, если вы уже обрабатываете эти значения в своем файле sendmail.ini. Кроме того, я смог заставить его работать только в том случае, если я использовал sendmail_path = "C:\Program Files (x86)\sendmail\sendmail.exe" без параметра -t. Если кому интересно, я использовал IIS в Windows 10. - person haZh; 17.10.2020

PHP имеет аутентификацию в почтовой команде!

На WAMPSERVER у меня работает следующее (windows, php 5.2.17)

php.ini

[mail function]
; For Win32 only.
SMTP = mail.yourserver.com
smtp_port = 25
auth_username = smtp-username
auth_password = smtp-password
sendmail_from = [email protected]
person blavla    schedule 04.08.2011
comment
Это не работает для меня, PHP 5.3.8 на IIS 6. Я просмотрел исходный код, и кажется, что smtp-аутентификация на самом деле не реализована. - person Zmaster; 15.10.2011
comment
У меня не работает, я думаю, вы используете sendmail вместо smtp. - person Draex_; 30.11.2012
comment
Согласен - в Windows этот ответ работает только в том случае, если на сервере установлен Fake Sendmail. Его можно загрузить по адресу: glob.com.au/sendmail. - person James McCormack; 11.04.2014
comment
Работает на W8.1, PHP 5.2.17, используя удаленный SMTP-сервер на порту 587. - person Stphane; 19.08.2015
comment
У меня не работает порт 465. Windows 10, WampServer 2.5, PHP 5.5.12. - person Tamás Bolvári; 14.01.2016
comment
Работал из коробки для меня. Поддельный sendmail не требуется. Windows 7 x64, XAMPP с PHP 5.5.27 (32-разрядная версия). - person Martin Müller; 22.03.2016
comment
У меня не работало на PHP 5.6.20 с активированным SMTP: Warning: mail(): SMTP server response: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM - person djk; 09.05.2016

  1. Установите Postfix (совместимый с Sendmail).
  2. Отредактируйте /etc/postfix/main.cf следующим образом:
#Relay config
relayhost = smtp.server.net
smtp_use_tls=yes
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_sasl_security_options = noanonymous
  1. Создайте /etc/postfix/sasl_passwd, введите:
smtp.server.net username:password
  1. Введите # /usr/sbin/postmap sasl_passwd

  2. Затем запустите: service postfix reload

Теперь PHP будет запускать почту как обычно с помощью команды sendmail -t -i, а Postfix перехватит ее и ретранслирует на указанный вами SMTP-сервер.

person Jay Sudo    schedule 27.06.2015

Я предпочитаю инструмент PHPMailer, так как он не требует PEAR. Но в любом случае у вас есть недоразумение: вам не нужна настройка PHP-сервера для пользователя и пароля SMTP. Это должна быть настройка для каждого приложения (или для каждой страницы). Если вы хотите использовать одну и ту же учетную запись на разных страницах PHP, добавьте ее в какой-нибудь файл settings.php.

person Eric_WVGG    schedule 21.09.2008
comment
Как добавить имя пользователя и пароль в файл php. Могу ли я использовать это для отправки почты с помощью почтовой функции PHP через developer.postmarkapp.com/developer-smtp. html Почтовый штемпель - person SCC; 08.05.2014
comment
Некоторые другие популярные приложения могут зависеть от PHPMailer, например WordPress внутри, который, в свою очередь, может быть настроен на использование внутренней функции mail() для отправки реального электронного письма. Следовательно, предпочтительнее будет использовать конфигурацию для всего PHP. - person Bart Verkoeijen; 03.07.2014

Проработав весь день над этим, я наконец нашел решение. Вот как я отправляю из Windows XP с помощью WAMP.

  1. Используйте SMTP-сервер Google. Вероятно, вам нужен аккаунт.
  2. Загрузите и установите Fake Sendmail. Я только что скачал его, разархивировал и положил в папку WAMP.
  3. Создайте тестовый файл PHP. Увидеть ниже.
<?php
    $message = "test message body";
    $result = mail('[email protected]', 'message subject', $message);
    echo "result: $result";
?>
  1. Обновите файл php.ini и файл sendmail.ini (sendmail.ini находится в папке sendmail).
  2. Проверьте файл error.log в только что созданной папке sendmail, если он не работает.

Ссылка:

person B Seven    schedule 10.03.2012
comment
Это не работает для меня. Windows 10, WampServer 2.5, PHP 5.5.12. - person Tamás Bolvári; 14.01.2016

Эти ответы устарели и обесценились. Лучшая практика..

composer require phpmailer/phpmailer

Следующее в вашем файле sendmail.php просто требует следующего

# use namespace
use PHPMailer\PHPMailer\PHPMailer;

# require php mailer
require_once "../vendor/autoload.php";

//PHPMailer Object
$mail = new PHPMailer;

//From email address and name
$mail->From = "[email protected]";
$mail->FromName = "Full Name";

//To address and name
$mail->addAddress("[email protected]", "Recepient Name");
$mail->addAddress("[email protected]"); //Recipient name is optional

//Address to which recipient will reply
$mail->addReplyTo("[email protected]", "Reply");

//CC and BCC
$mail->addCC("[email protected]");
$mail->addBCC("[email protected]");

//Send HTML or Plain Text email
$mail->isHTML(true);

$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";

if(!$mail->send()) 
{
    echo "Mailer Error: " . $mail->ErrorInfo;
} 
else 
{
    echo "Message has been sent successfully";
}

Это можно настроить как угодно..

person Delino    schedule 21.03.2018

Используйте Mail::factory в пакете Mail PEAR. Пример.

person William Keller    schedule 21.09.2008

  1. Установите последнюю версию hMailServer. «Запустите администратора hMailServer» на последнем шаге.
  2. Подключиться к «локальному хосту».
  3. "Добавить домен..."
  4. Установите «127.0.0.1». в качестве «Домена» нажмите «Сохранить».
  5. «Настройки» > «Протоколы» > «SMTP» > «Доставка электронной почты»
  6. Установите «localhost» в качестве «Имени локального хоста», укажите свои данные в разделе «SMTP Relayer», нажмите «Сохранить».
  7. «Настройки» > «Дополнительно» > «Диапазоны IP-адресов» > «Мой компьютер»
  8. Снимите флажок «Внешние адреса электронной почты для внешних» в группе «Требовать аутентификацию SMTP».
  9. Если вы изменили php.ini, перепишите эти 3 значения:

"SMTP = локальный хост",

"смтп_порт = 25",

"; sendmail_path = ".

Кредит: Как настроить WAMP (localhost ) для отправки электронной почты с помощью Gmail?

person Tamás Bolvári    schedule 15.01.2016
comment
Это отлично работает в Windows 10 с использованием WampServer 2.5 и PHP 5.5.12. - person Tamás Bolvári; 16.01.2016
comment
Привет @Tamas В SMTP Relayer я установил свои учетные данные из имени хоста AWS SES, порта, имени пользователя и пароля. Но это не работает нормально. Вы знаете, если я должен сделать что-то еще? - person Zenit; 03.03.2019