(Автор smtp4dev здесь)
Это обновленный ответ - я не смог воспроизвести проблему с кодом, который вы выложили, но я заметил, что ваш второй вывод показывает, что иногда вы нене имеет CC-адреса.
Этот код воспроизводит проблему и приводит к ошибке 501.
<?php
$to = 'myemail@mydomain.com.au';
$cc = '';
$from = 'myemail@mydomain.com.au';
$headers .= 'To: '. $to . "\r\n";
$headers .= 'Cc: '. $cc . "\r\n";
$headers .= 'From: '. $from . "\r\n";
mail($to, $subject, $message, $headers);
?>
В Windows функция почты PHP просматривает заголовки сообщений для адресов TO / CC ипреобразует каждый заголовок в команду SMTP RCPT TO.К сожалению, он делает это, даже если заголовок не имеет значения:
220 localhost smtp4dev ready
HELO Computer
250 Nice to meet you
MAIL FROM:<myemail@mydomain.com.au>
250 Okey dokey
RCPT TO:<myemail@mydomain.com.au>
250 Recipient accepted
RCPT TO:<>
501 Must specify to address <address>
QUIT
221 See you later aligator
Таким образом, исправление заключается в том, что вам вообще не нужно включать заголовок CC: если у вас нет адреса CC для отправки на:
<?php
$to = 'myemail@mydomain.com.au';
$cc = '';
$from = 'myemail@mydomain.com.au';
$headers .= 'To: '. $to . "\r\n";
if ($cc) {
$headers .= 'Cc: '. $cc . "\r\n";
}
$headers .= 'From: '. $from . "\r\n";
mail($to, $subject, $message, $headers);
?>
У меня сработало нормально.