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

$from = "someonelse@example.com"; $headers = "From:" . $from; echo mail ("borutflis1@gmail.com" ,"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 = someonelse@example.com 

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

Когда вы отправляете электронное письмо через сервер, для которого требуется SMTP Auth, вам действительно нужно указать его и установить хост, имя пользователя и пароль (и, возможно, порт, если он не является стандартным – 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

 <?php ini_set("SMTP", "aspmx.l.google.com"); ini_set("sendmail_from", "YOURMAIL@gmail.com"); $message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = YourMail@address.com"; $headers = "From: YOURMAIL@gmail.com"; mail("Sending@provider.com", "Testing", $message, $headers); echo "Check your email now....<BR/>"; ?> 

ИЛИ

ЧИТАЙ ДАЛЬШЕ

Для пользователей 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, без изменения приложения.

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

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

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

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

 // Pear Mail Library require_once "Mail.php"; $from = '<your@mail.com>'; //change this to your email address $to = '<someone@mail.com>'; // 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' => 'your@gmail.com', //your gmail account 'password' => 'snip' // your password )); // Send the mail $mail = $smtp->send($to, $headers, $body); 

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

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

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

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