php.ini sendmail_from требуется для Test Mail Server и Papercut? - PullRequest
0 голосов
/ 20 июня 2019

У меня Windows 10 с установленным XAMPP.Я хотел посмотреть, каковы мои варианты способов проверки отправки электронных писем с помощью функции PHP mail () в автономном режиме для целей разработки и тестирования.Я нашел три способа сделать это в Windows, и они ...

XAMPP + Инструмент тестирования почтового сервера XAMPP + Papercut XAMPP, настроенный с mailtodesk

Я опробовал два разных PHP-скрипта.Один из них - это простой скрипт PHP mail ()


mail('me@mail.com', 'MySubject', 'Message 123...');

?>

А другой - более продвинутое использование PHP mail () и создание электронной почты в формате HTML.

<?php
$to = "somebody@example.com, somebodyelse@example.com";
$subject = "HTML email";

$message = "
<html>
<head>
<title>HTML email</title>
</head>
<body>
<p>This email contains HTML Tags!</p>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
</tr>
</table>
</body>
</html>
";

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

// More headers
$headers .= 'From: <webmaster@example.com>' . "\r\n";
$headers .= 'Cc: myboss@example.com' . "\r\n";

mail($to,$subject,$message,$headers);
?>

Почему-то янеобходимо удалить точку с запятой из строки sendmail_from в php.ini, чтобы первый скрипт PHP работал с Test Mail Server Tool и Papercut.Если я не удаляю точку с запятой, я получаю следующую ошибку:

Warning: mail(): Bad Message Returns Path in C:\xampp\htdocs\mailtestbasic.php on line 3

Почему это так?Когда я настраиваю mailtodisk в XAMPP, я не получаю эту ошибку и не получаю эту ошибку со вторым PHP-скриптом.

1 Ответ

1 голос
/ 20 июня 2019

Сообщение об ошибке выглядит довольно забавно, так как содержит опечатку (обратный путь, а не обратный путь) ...

При отправке электронной почты вам нужен действительный return-path.Если sendmail_from не закомментировано в php.ini, по умолчанию используется имя пользователя @ сервера Apache, поэтому, вероятно, что-то вроде apache@localhost в вашей среде разработки, что будет отклонено любым SMTP.

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

Выможно также установить его с помощью параметра additional_parameters mail(), см. пример № 4 в https://www.php.net/manual/en/function.mail.php

PS: sendmail_from может сбить с толку, если вы не знакомы с заголовками электронной почты. На самом деле генерируетЗаголовок return-path, который будет использоваться в случае отскока электронной почты.Отклоненные электронные письма не будут переходить на From, который вы определяете в своих заголовках, так как он используется только для отображения отправителя (и используется при ответе на электронное письмо, если вы также не определите заголовок reply-to, который может отличаться от From один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...