Автор Тема: PHP+Win32+Sending mail - кто объяснит ошибку в логике - пиво!  (Прочитано 3305 раз)

0 Пользователей и 1 Гость просматривают эту тему.

  • Гость
Уже с полгода бьюсь с такой проблемой
Нужно послать письмо от имени васи пупкина (имя юзера с формы) на адрес робота вне моего сервера.

Проблема вот в чем.
Модель 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. Как отсылать письма сокетом чтобы проблем не было

Я не могу понять на каком этапе что то срывается ;((((


Спасибо всем огромное.
Тем кто поможет постараюсь в долгу не остаться. На самом деле!

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
ойой как всего много. не проще ли поставить sendmail под win32 и юзать функцию mail() ?
ну, будем исповедоваться?

  • Гость
Спасибо за ответ!

А такой есть? Сейчас буду искать. Однако может спасти.

Там есть подводные камни?

  • Гость
нашел sendmail for win 32
и ничего не знаю как сделать. Можно выпросить пример php.ini с соответствующей частью?
Можно вообще все вместе с нужным софтном мылом послать.
Буду очень признателен.


  • Гость
Спасибо
прочитал
Поставил sendmail

но внимание вопрос - в статье не слова про настройку php - я пробовал в настройках php3 прописать но никакой реакции php не неблюдается на соответствующие строки конфигурации ;(

Еще 1 шаг остался. Помогите!!!

Спасибо!

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
$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 сервер.
ну, будем исповедоваться?

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
тоже самое и с функцией mail()
надо прописать в РНР.ini работающий SMTP сервер
ну, будем исповедоваться?

  • Гость
Спасибо, попробую, про system не знал.

а на счет того что достаточно поставить в php.ini работающий smtp сервер то прочитайте первое сообщение, там как раз написано в чем проблема 2-х работаюхих серверов на локальной машине и почему мне надо третий ;)))

  • Гость
Кстати а как сервер отнесется к одновременному вызову десятка сендмайлов? если 10 человек одновременно на сайте сидит?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28