Forum Webscript.Ru
Программирование => PHP => Тема начата: от 19 Июля 2001, 21:35:55
-
Уже с полгода бьюсь с такой проблемой
Нужно послать письмо от имени васи пупкина (имя юзера с формы) на адрес робота вне моего сервера.
Проблема вот в чем.
Модель 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. Как отсылать письма сокетом чтобы проблем не было
Я не могу понять на каком этапе что то срывается ;((((
Спасибо всем огромное.
Тем кто поможет постараюсь в долгу не остаться. На самом деле!
-
ойой как всего много. не проще ли поставить sendmail под win32 и юзать функцию mail() ?
-
Спасибо за ответ!
А такой есть? Сейчас буду искать. Однако может спасти.
Там есть подводные камни?
-
нашел sendmail for win 32
и ничего не знаю как сделать. Можно выпросить пример php.ini с соответствующей частью?
Можно вообще все вместе с нужным софтном мылом послать.
Буду очень признателен.
-
Вот тута почитай (http://userguide.webservis.ru/homeserver-apache-forprint.shtml)
-
Спасибо
прочитал
Поставил sendmail
но внимание вопрос - в статье не слова про настройку php - я пробовал в настройках php3 прописать но никакой реакции php не неблюдается на соответствующие строки конфигурации ;(
Еще 1 шаг остался. Помогите!!!
Спасибо!
-
$name="Testing";
$to="alimamed@ultranet.ru";
$tmp=time().".mail";
$subject="Это тест";
$MAIL=fopen($tmp, "w");
$messaga="Subject: $subject
";
$messaga.="From: testing@webscript.ru
";
$messaga.="To: $to
";
$messaga.= "Это сообщение подтверждает, что сендмейл работает.
";
fputs($MAIL, $messaga);
fclose ($MAIL);
system("c:\\usr\\sbin\\sendmail.exe -t -messagefile=$tmp");
?>
естественно в sendmail.ini должен быть прописан реальный работающий SMTP сервер.
-
тоже самое и с функцией mail()
надо прописать в РНР.ini работающий SMTP сервер
-
Спасибо, попробую, про system не знал.
а на счет того что достаточно поставить в php.ini работающий smtp сервер то прочитайте первое сообщение, там как раз написано в чем проблема 2-х работаюхих серверов на локальной машине и почему мне надо третий ;)))
-
Кстати а как сервер отнесется к одновременному вызову десятка сендмайлов? если 10 человек одновременно на сайте сидит?