Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проблема с mail


Автор: Serebrus 8.10.2008, 13:45
Привет друзья.
Довненько необщались.
Как жизнь?

При отправке почты через mail, выводится такая ошибка:
Код

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in D:\www\xampp\htdocs\Archive\admin\order.php on line 49


Что посоветуете делать?
Как я знаю SMTP же таки-так работает в 25 ом порту?!

Автор: SneG0K 8.10.2008, 14:22
Попробуй например на smtp.mail.ru
Если никак то тогда давай больше кода...

Автор: DizelGenerator 8.10.2008, 15:13
я так понимаю, это на локальном сервере проблема? А mail-сервер-то на локалхосте стоит? telnet localhost 25 что говорит?

Автор: Serebrus 8.10.2008, 16:12
Раньше у меня было установлено пакет Denver а (apache2, php3, mysql4,...). Тогда у меня вообше не было проблем с mail.

А сейчас я меня стоит пакет xampp (php5, mysql5,...). Вот теперь появилось эта проблема.
Чесно говоря, я не так хорошо знаю почтовые серверы и все с этеми связанное. Так что при ответе, был бы рад если вы учтете это, и если можно по подробнее напишите.

Заране спосибо.

Автор: SneG0K 8.10.2008, 16:17
Ты сделал то, что тебя просили? 
Узнай про сервер на локалке. Попробуй прописать не локальный, а удаленный сервер. И если никак, то выложи хоть кусочек кода.

Автор: DizelGenerator 8.10.2008, 16:22
К сожалению, xamp не использовал, скорее всего там есть такое же красивое решение с мейл-заглушкой, как в Денвере.

Если нет, то как вариант, стянуть из Денвера файлики из папки "\usr\local\sendmail\", положить их куда надо, и в php.ini прописать путь к sendmail:
Код

sendmail_path = \там где надо\sendmail -t -i

тогда она будет как в Денвере класть файлики с письмами в /tmp/!sendmail (путь прописан в файле sendmail_stub.pl). Но тогда придется еще и Perl настроить (поставить).

Или еще есть вариант: http://www.glob.com.au/sendmail/. Но тут он реально пытается слать письма.

Автор: Serebrus 9.10.2008, 07:45
DizelGenerator, я смотрел, путь (sendmail_path) таки-так указан правильно, только единственная разница: в окончании не было "-i". Я добавил, но ошибка не удалилась.

Вот код отправки mail

Код

if(isset($_POST['con']))
{
 $to='';
 for($i=1; $i<=$_POST['con']; $i++)
 {
  echo $_POST['eml'.$i]."</br>";  
  if($to=='')
  {$to=$_POST['eml'.$i];}else
  {$to=$to.', '.$_POST['eml'.$i];}
 } 
 $subject="Ваш заказ";
 $message="
 <html>
 <head>
  <title>Заказ</title>
 </head>
 <body>
  <table>
    <tr>
      <th>Наименование</th>
    </tr>
    <tr>
      <td>Book 1</td>
    </tr>
    <tr>
      <td>Book 2</td>
    </tr>
  </table>
 </body>
 </html>
 ";
 $headers='Content-type: text/html; charset=windows-1251' . "\r\n";
 $headers.='From: Order Reminder <[email protected]>' . "\r\n";
 mail($to, $subject, $message, $headers);
}

Автор: DizelGenerator 9.10.2008, 09:24
Куда указывает sendmail_path, там утилитка-то sendmail.exe сама есть?
Если стоит sendmail_path и указывает на утилитку, то проверьте, что в php.ini заккоментированы строки

SMTP = localhost
smtp_port = 25


Тут дело не в коде php, а в настройках.

Автор: Serebrus 9.10.2008, 12:27
DizelGenerator, друг я согласен с тобой.

Цитата(DizelGenerator @  9.10.2008,  09:24 Найти цитируемый пост)
Тут дело не в коде php, а в настройках


sendmail.exe стоит как штык в указанном месте и строки
SMTP = localhost
smtp_port = 25
тоже НЕ закомментированы


Автор: DizelGenerator 9.10.2008, 13:09
Цитата(Serebrus @ 9.10.2008,  12:27)
и строки
SMTP = localhost
smtp_port = 25
тоже НЕ закомментированы

Дак вот заккоментируйте их! Потому что когда они установлены, пхп пытается слать письма сразу соединяясь с SMTP-сервером (хорошо для виндов, где нет sendmail). А вот когда стоит только sendmail_path, то пхп отправляет письма через sendmail (хорошо для UNIX, где это в порядке вещей).

Автор: Serebrus 9.10.2008, 13:57
DizelGenerator, не знаю даже что сказать, я сделал как вы сказали, но почти без результатов, т.е. результат та же ошибка:


Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in D:\www\xampp\htdocs\Archive\admin\order.php on line 49

Автор: DizelGenerator 9.10.2008, 14:17
Значит или вы апач не перезапустили после изменения в php.ini, или php.ini правите один, а подключается другой. Попробуйте через phpinfo(); посмотреть, тот ли файл использует пхп (директива Loaded Configuration File)

Других причин не вижу.

Автор: Serebrus 9.10.2008, 14:48
DizelGenerator, УРА, слава Богу, ошибки НЕТ.
Вы были правы, я исправлял не тот php.ini файл, т.е. не рабочий.

При отправке вышло cmd окно, так как sendmail.exe не windows приложение. Появился мальенкий "НО", я не нашол отправленные e-mail (как я знаю, они же должны по умолчанию отправлятся в папку tmp, но там их нет. tmp папка создается при устанавливании пакета xampp)

Автор: DizelGenerator 9.10.2008, 15:02
а что это оно не windows приложение? может быть винда 64 бит? Заглушка из Денвера вообще никакую консоль не вызывает, она просто запускает интерпретатор перла на запуск sendmail_stub.pl . А путь, куда письма кладутся, как раз в перловском файле прописан. Конечно же, перл должен где-то стоять + в перловском файле должен быть верно прописан путь к интерпретатору (чай, не юникс)

Добавлено через 6 минут и 22 секунды
хотя ошибаюсь: в Денверовском ехешнике sendmail жестко прописан путь к перлу: ..\..\bin\perl

Автор: Serebrus 9.10.2008, 16:03
Ну чтоже теперь делать, DizelGenerator, как вы шитаете, ракая "реакция" нормальна, т.е. можно ли сказать что все работает?

Просто я уже запарился

Автор: DizelGenerator 9.10.2008, 16:26
нет, нездоровая ситуация. Вам же надо контролировать что там за письма отправляются.

напишите подробнее о возникающей ошибке. Попробовал на 64 бит винде - работает. Может быть вы не тот ехешник скопировали из Денвера - их там много sendmail.exe, но нужен реально один - тот, который в папке usr\local\sendmail\

Автор: Serebrus 9.10.2008, 16:33
DizelGenerator, вы же сказали что путь отправки писем указан в перловском файле, это вы имели ввиду в Денвере или это не зависит от пакетов (хоть Денвер, хоть xampp)?

И если путь указывается в перловском файле, то где его найти чтоб "переуказать" путь отправки (я не нашел его в папке perl).

Автор: DizelGenerator 9.10.2008, 16:46
внимательнее: я уточнил, что в ваш пакет xampp требуется скопировать 2 файла из папки Денвера usr\local\sendmail\ . Это файл sendmail.exe и sendmail_stub.pl. Как все происходит:

1. пхп при выполнении функции mail ищет настройки в своем php.ini
2. Так как у вас там путь к sendmail, то он запускает утилику sendmail.exe, которую вы скопировали из Денвера
3. Денверовская утилитка sendmail пытается запустить перловский скрипт sendmail_stub.pl с помощью интерпретатора Perl, путь к которому жестко прописан в самом ехешнике (../../bin/Perl.exe). Соответственно, интерпретатор перла должен находится в папке ../../bin/, считая от каталога, где находится sendmail.exe

Если у вас перла нет, то скопируйте еще и папку usr/bin/ из Денвера и разместите ее так, чтоб sendmail.exe ее нашла.

Добавлено через 59 секунд
Да, путь, куда сваливаются письма, прописан в файле sendmail_stub.pl, в самом его начале. Он тоже относительный и считается от папки, где находится сам файл скрипта.

Автор: Serebrus 10.10.2008, 07:57
DizelGenerator, я скопировал файл sendmail_stub.pl в папку sendmail, но нечего не изменилось, все еще выходит cmd окно и отправленных писем в папке tmp (как указано в файле sendmail_stub.pl) нет.

Я сделал так:
-установил пакет Denver полностью;
-скопировал свой проъект в папку home (со всеми настройками, т.е. с вспомогательными папками, ну прочем это не важно)
-НЕ изменил настройки по умолчанию php.ini, perl, ...
-проверил ВСЕ ОТЛИЧНО

DizelGenerator но вапрос остается без ответа: почему после всех исправлений указанными вами проъект несработал в xampp?

Автор: DizelGenerator 10.10.2008, 08:58
что пишется в окне? конкретно?

Автор: Serebrus 10.10.2008, 09:20
В окне ничего не пишется, cmd окно тоже не появляется.

Или же мне следует сравнить все ключевые файлы (php.ini, perl, ...) Денвера и xampp? Как вы шитаете?

Автор: DizelGenerator 10.10.2008, 09:49
Цитата

все еще выходит cmd окно

Цитата

cmd окно тоже не появляется.


Я вас окончательно не пойму уже...

что стоит сверить - настройку php.ini в секции mail, размещение папок с sendmail и perl.

Я вот все-таки не верю, что в xampp эта пробелма не решается штатными путями.. Есть же там какойто MercuryMail...

Автор: Serebrus 10.10.2008, 12:30
DizelGenerator, вам спасибо за помощ. 

Я решил временно работать в Денвере.

Автор: DizelGenerator 10.10.2008, 13:43
Да собственно не за что ...

Можно конечно сконфигурировать php чтобы он использовал сторонний smtp-сервер (типа mail.ru), но тогда накладываюся ограничения (письма слать можно только себе, да и многие почтовые сервера требуют реального существования адреса отправителя)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)