it-swarm.com.ru

Отправка электронной почты с PHP с SMTP-сервера

$from = "[email protected]";
$headers = "From:" . $from;
echo mail ("[email protected]" ,"testmailfunction" , "Oj",$headers);

У меня проблемы с отправкой электронной почты на PHP. Я получаю ошибку: SMTP server response: 530 SMTP authentication is required.

У меня сложилось впечатление, что вы можете отправить письмо без SMTP для проверки. Я знаю, что это письмо будет отфильтровано, но сейчас это не имеет значения.

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = [email protected]

Это настройка в файле php.ini. Как мне настроить SMTP? Существуют ли SMTP-серверы, которые не требуют проверки, или я должен сам настроить сервер?

108
Borut Flis

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

Например, я обычно использую PHPMailer с настройками, подобными этим:

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 25;                    // set the SMTP port for the GMAIL server
$mail->Username   = "username"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

Вы можете найти больше о PHPMailer здесь: https://github.com/PHPMailer/PHPMailer

150
Ivo Pereira

Для пользователей Unix, mail () фактически использует Sendmail команду для отправки электронной почты. Вместо изменения приложения вы можете изменить среду. msmtp - SMTP-клиент с синтаксисом CLI, совместимым с Sendmail, что означает, что его можно использовать вместо Sendmail. Требуется лишь небольшое изменение вашего php.ini.

sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"

Тогда даже простая функция mail () может работать с SMTP. Это очень полезно, если вы пытаетесь подключить существующее приложение к почтовым службам, таким как sendgrid или mandrill, без изменения приложения.

41
txyoji
<?php
    ini_set("SMTP", "aspmx.l.google.com");
    ini_set("sendmail_from", "[email protected]");

    $message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = [email protected]";

    $headers = "From: [email protected]";


    mail("[email protected]", "Testing", $message, $headers);
    echo "Check your email now....<BR/>";
?>

ИЛИ ЖЕ

ЧИТАТЬ ДАЛЬШЕ

38
Dipesh Parmar

Вот способ сделать это с PHP PEAR

// Pear Mail Library
require_once "Mail.php";

$from = '<[email protected]>'; //change this to your email address
$to = '<[email protected]>'; // change to address
$subject = 'Insert subject here'; // subject of mail
$body = "Hello world! this is the content of the email"; //content of mail

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'Host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => '[email protected]', //your gmail account
        'password' => 'snip' // your password
    ));

// Send the mail
$mail = $smtp->send($to, $headers, $body);

//check mail sent or not
if (PEAR::isError($mail)) {
    echo '<p>'.$mail->getMessage().'</p>';
} else {
    echo '<p>Message successfully sent!</p>';
}

Если вы используете SMTP Gmail, не забудьте включить SMTP в своей учетной записи Gmail, в настройках 

13
Bolli

Проблема в том, что функция PHP mail() имеет очень ограниченную функциональность. Существует несколько способов отправки почты из PHP.

  1. mail() использует SMTP-сервер в вашей системе. В Windows можно использовать как минимум два сервера: hMailServer и xmail . Я потратил несколько часов на их настройку и настройку. Первый, на мой взгляд, проще. Прямо сейчас hMailServer работает на Windows 7 x64.
  2. mail() использует SMTP-сервер на удаленной или виртуальной машине с Linux. Конечно, реальный почтовый сервис, такой как Gmail, не допускает прямого подключения без каких-либо учетных данных или ключей. Вы можете настроить виртуальную машину или использовать ее, расположенную в вашей локальной сети. Большинство дистрибутивов Linux имеют почтовый сервер из коробки. Настройте его и получайте удовольствие. Я использую exim4 по умолчанию в Debian 7, который слушает интерфейс локальной сети.
  3. Почтовые библиотеки используют прямые подключения. Lib проще в настройке. Я использовал SwiftMailer, и он отлично отправляет почту из учетной записи Gmail. Я думаю, что PHPMailer тоже довольно хорош.

Неважно, какой у вас выбор, я рекомендую вам использовать слой абстракции. Вы можете использовать библиотеку PHP на своей машине разработки под управлением Windows и просто функцию mail() на рабочей машине с Linux. Уровень абстракции позволяет вам обмениваться почтовыми драйверами в зависимости от системы, на которой работает ваше приложение. Создайте абстрактный класс MyMailer или интерфейс с абстрактным методом send(). Унаследуйте два класса MyPhpMailer и MySwiftMailer. Реализуйте метод send() соответствующим образом.

12
George Sovetov

Существуют некоторые SMTP-серверы, которые работают без аутентификации, но если сервер требует аутентификации, нет способа обойти это. 

Встроенные почтовые функции PHP очень ограничены - указание SMTP-сервера возможно только в Windows. В * nix mail() будет использовать двоичные файлы ОС.

Если вы хотите отправлять электронную почту на произвольный SMTP-сервер в сети, рассмотрите возможность использования такой библиотеки, как SwiftMailer . Это позволит вам использовать, например, исходящие серверы Google Mail. 

10
Pekka 웃

В тех случаях, когда вы размещаете сайт Wordpress в Linux и имеете доступ к серверу, вы можете сэкономить некоторые головные боли, установив msmtp, который позволяет отправлять через smtp из стандартной функции php mail (). msmtp - более простая альтернатива postfix, которая требует немного больше настроек. 

Вот шаги:

Установить MSMTP

Sudo apt-get install msmtp-mta ca-certificates

Создайте новый файл конфигурации:

Sudo nano /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 <use[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL

Вам необходимо заменить данные конфигурации, представленные всем, что находится внутри «<» и «>» (включительно, удалите их). Для Host/username/password используйте ваши обычные учетные данные для отправки почты через вашего почтового провайдера.

Скажите PHP, чтобы использовать его

Sudo nano /etc/php5/Apache2/php.ini

Добавьте эту единственную строку:

sendmail_path = /usr/bin/msmtp -t

Полная документация может быть найдена здесь:

https://marlam.de/msmtp/

0
Peter Drinnan