Отправка электронной почты с помощью 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-серверы, которые не требуют проверки, или я должен сам настроить сервер?
Ответы
Ответ 1
Когда вы отправляете электронное письмо через сервер, которому требуется SMTP-аутентификация, вам действительно нужно указать его и указать хост, имя пользователя и пароль (и, возможно, порт, если он не является значением по умолчанию - 25).
Например, я обычно использую PHPMailer с настройками, подобными этим:
$mail = new PHPMailer();
// Settings
$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
// Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
Вы можете найти больше о PHPMailer здесь: https://github.com/PHPMailer/PHPMailer
Ответ 2
<?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/>";
?>
или, для более подробной информации, читайте дальше.
Ответ 3
Для пользователей Unix, mail() фактически использует команду Sendmail для отправки электронной почты. Вместо изменения приложения вы можете изменить среду. msmtp - это SMTP-клиент с синтаксисом CLI, совместимым с Sendmail, что означает, что он может использоваться вместо Sendmail. Это требует только небольшого изменения вашего php.ini.
sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"
Тогда даже функция lowly mail() может работать с поддержкой SMTP. Это очень полезно, если вы пытаетесь подключить существующее приложение к почтовым службам, таким как sendgrid или mandrill, без изменения приложения.
Ответ 4
Вот способ сделать это с 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, в настройках
Ответ 5
Проблема в том, что функция PHP mail()
имеет очень ограниченную функциональность. Существует несколько способов отправки почты с PHP.
-
mail()
использует SMTP-сервер в вашей системе. В Windows можно использовать как минимум два сервера: hMailServer и xmail. Я провел несколько часов, настраивая и поднимая их. На мой взгляд, первый из них проще. Сейчас hMailServer работает с Windows 7 x64.
-
mail()
использует SMTP-сервер на удаленной или виртуальной машине с Linux. Конечно, реальная почтовая служба, такая как Gmail, не позволяет прямое соединение без каких-либо учетных данных или ключей. Вы можете настроить виртуальную машину или использовать ее в локальной сети. Большинство дистрибутивов Linux имеют почтовый сервер из коробки. Настройте его и получайте удовольствие. Я использую exim4 по умолчанию на Debian 7, который прослушивает его интерфейс LAN.
- Библиотеки рассылки используют прямые подключения. Libs легче настроить. Я использовал SwiftMailer, и он отлично отправляет почту из учетной записи Gmail. Я думаю, что PHPMailer тоже хорош.
Независимо от вашего выбора, я рекомендую вам использовать некоторый уровень абстракции. Вы можете использовать библиотеку PHP на своей машине разработки под управлением Windows и просто mail()
на производственной машине с Linux. Уровень абстракции позволяет вам обменивать почтовые драйверы в зависимости от системы, в которой работает ваше приложение. Создайте абстрактный класс MyMailer
или интерфейс с абстрактным методом send()
. Наследуем два класса MyPhpMailer
и MySwiftMailer
. Внедрите метод send()
соответствующим образом.
Ответ 6
Есть несколько SMTP-серверов, которые работают без проверки подлинности, но если сервер требует аутентификации, нет способа обойти это.
Встроенные функции почты PHP очень ограничены - указание SMTP-сервера возможно только в WIndows. On * nix, mail()
будет использовать двоичные файлы OS.
Если вы хотите отправить E-Mail на произвольный SMTP-сервер в сети, подумайте об использовании библиотеки, например SwiftMailer. Это позволит вам использовать, например, исходящие серверы Google Mail.
Ответ 7
В тех случаях, когда вы размещаете сайт 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 settings.
account default
host <smtp.example.net>
port 587
auth on
user <[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL
Вам необходимо заменить данные конфигурации, представленные всем, что находится внутри "<" и ">" (включительно, удалите их). Для хоста/имени пользователя/пароля используйте ваши обычные учетные данные для отправки почты через вашего почтового провайдера.
Скажите PHP, чтобы использовать его
sudo nano /etc/php5/apache2/php.ini
Добавьте эту единственную строку:
sendmail_path = /usr/bin/msmtp -t
Полная документация может быть найдена здесь:
https://marlam.de/msmtp/