Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вылетает по таймауту функция mail() на php

12K
11 декабря 2007 года
dw!
7 / / 06.09.2005
есть такой код:
Код:
$to = "user1@company.ru";
$subj = "Test mail";
$headers = "From: User <user0@company.ru>\r\nX-Mailer: php";
$message = "Test message";

ini_set (SMTP, "mail.company.ru");
ini_set (smtp_port, "25");
ini_set (sendmail_from, "user0@company.ru");

$ret = mail($to, $subj, $message, $headers);
if ($ret == TRUE) echo "Сообщение отправлено";
else echo "Ошибка отправки";


Скрипт повисает при отправке - вылетает по таймауту исполнения. Сообщение при этом успешно отправляется. (company.ru - реальный корпоративный домен.)

С mail.ru - тоже самое, повисает при отправке, но отправляет.
Однако если отправлять через mail.ru и перед функцией mail() вставить строку:
 
Код:
ini_set (max_execution_time, "0.01");

то скрипт отрабатывает - появляется надпись что сообщение отправлено. При этом судя по счетчикам - время работы скрипта около 0,5 сек.

При отправке через company.ru такой трюк с ограниченим времени исполнения не срабатывает - скрипт не останавливается вообще.

В чем прикол? Что я делаю не так?
4
11 декабря 2007 года
mike
3.7K / / 01.10.2002
Есть три способа отправки почти - через локальный MTA (Mail Transfer Agent), напрямую, через SMTP сервер, накривую, через SMTP сервер.

Локальный MTA обычно используют на *nix платформах. Это самый правильный вариант, так как гарантирует доставку почты даже при временных проблемах на каналах связи.

Криво, через SMTP сервер, почту обычно отправляют на Windows платформах. Важно, чтобы SMTP сервер был как можно ближе к серверу, для того чтобы снизить вероятность проблем на каналах связи. Ибо если функция mail не сможет приконнектиться к почтовому серверу, то письмо просто не будет отправлено.

Напрямую, через SMTP сервер - вы получаете с помощью MX записи адрес почтового сервера клиента и отправляете почту напрямую на почтовый сервер клиента. Недостаток такой-же как и во втором варианте.

Так вот строка

ini_set (sendmail_from, [EMAIL="user0@company.ru"]user0@company.ru[/EMAIL]);

устанавливает настройку sendmail (локального MTA)

А

ini_set (SMTP, "mail.company.ru");
ini_set (smtp_port, "25");

задает настройки прямого подключения к SMTP.

Для начала нужно решить что именно используется. Скорее всего это SMTP, так как при использовании локального MTA не должно быть тайм аутов.

Если появляется тайм аут, то в первую очередь нужно попробовать приконнектиться к SMTP серверу, например Telnet'ом. Если консольного (SSH) доступа к серверу нет, то можно сделать это с помощью PHP функции fsockopen.

Телнетом так:

telnet mail.company.ru 25
12K
11 декабря 2007 года
dw!
7 / / 06.09.2005
в php.ini написано:
 
Код:
[mail function]
; For Win32 only.
SMTP = mail.company.ru
smtp_port = 25

; For Win32 only.
sendmail_from = user0@company.ru

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =


не значит ли это что sendmail_from относится только к Win32 системам?

если убрать строку ini_set (sendmail_from, [email]user0@company.ru[/email]); ругается вот так:

Warning: mail() [function.mail]: SMTP server response: 503 Unexpected command or sequence of commands.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог