Уже с полгода бьюсь с такой проблемой
Нужно послать письмо от имени васи пупкина (имя юзера с формы) на адрес робота вне моего сервера.
Проблема вот в чем.
Модель 1.
Используем майл, стандартно подставляем в заголовок From: Vasiliy Pupkin
Replay-To: Vasiliy Pupkin
To: robot
и далее по тексту
При этом в настройках php.ini:
[mail function]
SMTP = 127.0.0.1
sendmail_from = mail@server.com
Ясно что в заголовок попадает 2 адреса
сначла
From: mail@server.com
а ниже
From: Vasiliy Pupkin
И робот берет то один то второй. На робота повлиять не могу.
Модель 2.
Меняю php.ini
[mail function]
SMTP = 127.0.0.1
sendmail_from = ; закоментировал
Тогда окей, первый фром пустой игнорируется, но!
SMTP локальный не берет письмо так как получает FROM: пусто и отлупит. Нашел один который это пропускает, но он доставку писем теряет периодически ;((( то есть пропущена не только эта проверка.....
Подход 3
Берем сокетом и ручками посылаем письмо
function open_socket($socket) {
global $smtp_id;
fputs($socket,"EHLO SP $smtp_id\\r
");
}
function write_current_mail($socket, $from, $header, $email, $subject, $body) {
fputs($socket,"mail from: $from\\r
");
fputs($socket,"rcpt to: $email\\r
");
fputs($socket,"data\\r
");
fputs($socket,"To: $email\\r
");
fputs($socket,"Reply-To: $from\\r
");
fputs($socket,"Subject: $subject\\r
");
fputs($socket,"$header\\r
");
fputs($socket,"\\r
");
fputs($socket,"$body\\r
");
fputs($socket,".\\r
");
fputs($socket, "RSET\\r
");
}
function close_socket($socket) {
fputs($socket, "QUIT\\r
");
while(!feof($socket)){
fgets($socket, "1024");
}
fclose($socket);
}
и выполняем сл. последовательность
$smtp_id="localhost";
$from=$sFrom;
$header=$Tall;
$email=$sTo;
$subject=$sSubj;
$body=$sTxt;
$socket = fsockopen($smtp_id, 25, $errno, $errstr);
if ($socket) {
open_socket($socket);
write_current_mail($socket, $from, $header, $email, $subject, $body);
close_socket($socket);
return (true);
} else {
return (false);
}
ну с сокращениями понятно.
Так вот smtp берет а когда роботу шлет то тот постоянно отлупит - вот цитата из логов.
Thread 1: 19:29:38 [--->] : 220 тут адрес верен ESMTP
Thread 1: 19:29:38 [<---] : HELO SH
Thread 1: 19:29:38 [--->] : 250 unganisha.idrc.ca
Thread 1: 19:29:38 [<---] : MAIL FROM:
Thread 1: 19:29:38 [--->] : 250 ok
Thread 1: 19:29:38 [<---] : RCPT TO:
Thread 1: 19:29:39 [--->] : 250 ok
Thread 1: 19:29:39 [<---] : DATA
Thread 1: 19:29:39 [--->] : 354 go ahead
Thread 1: 19:29:40 [--->] :
Thread 1: 19:29:40 [<-->] : Error:
при этом если письмо аналогичное посылаю почтовым клиентом на тот же адрес с того же адреса то пробелем не возникает.
Просьба ко всем гуру -
как выйти из ситуации? Может есть готовые советы или примеры по
1. Какой SMTP поставить под NT чтобы глюков не было
2. Как отсылать письма сокетом чтобы проблем не было
Я не могу понять на каком этапе что то срывается ;((((
Спасибо всем огромное.
Тем кто поможет постараюсь в долгу не остаться. На самом деле!