функция mail() не отправляет почту.

AdeL1ne

Новичок
Вопрос такой, есть php-код отправки почты пользователю:
PHP:
        $checksum = base64_encode(substr($_POST['user'],0,3).$email_cnx[0]);
        $email = '[email protected]';
        $from = '[email protected]';
        $subject = 'Регистрация на сайте!';
        $subject = "=?utf-8?b?".base64_encode($subject)."?=";
        $headers = "Content-Type: text/plain; charset=\"utf-8\"\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
       	$headers .= "From: <".$from.">\r\n";
        $headers .= "Reply-To: ".$from."\r\n";
        $headers .= "Date: ". date('D, d M Y H:i:s O') ."\r\n";
        
        $message = "Вы зарегестрировались на сайте под именем: user1!\r\n";
        $message .= "Для активации вашего аккаунта пожалуйста пройдите по ссылке, указанной ниже!\r\n";
        $message .= "<br><a href='http://test.ru/activate.php?checksum=".$checksum."&email=".$email."'><b>Активировать аккаунт!</b></a>\r\n";

        if (mail($email,$subject,$message,$headers,'-f'.$from)) {echo "ПОЧТА ОТПРАВЛЕНА!!!";}
        else {echo "Отправка почты НЕ удалась!!!";}
ну обычная такая отправка почты. И суть в том, что на локальном сервере (Denwer) все отправляется, и выдается сообщение 'Мы отправили вам письмо для подтверждения регистрации!'. То есть функция mail() возвращает значение true. Проверяю этот же код на реальном хостинге и выдается сообщение 'Отправка почты не получилась!'. Соответственно mail() выдает false. Попытался пообщаться с техподдержкой хостинга, они сказали, что у них все должно работать, функция mail() не запрещена и sendmail настроен верно. В чем может быть проблема?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
AdeL1ne
Поподробнее с момента, как это денвер отправляет почту с локальной машины? На сколько мне известно там простая заглушка была на сендмейл долгое время, которая просто складировала письма в одну папку.
 

tz-lom

Продвинутый новичок
AdeL1ne
Поподробнее с момента, как это денвер отправляет почту с локальной машины? На сколько мне известно там простая заглушка была на сендмейл долгое время, которая просто складировала письма в одну папку.
Вообще речь о том что mail() вернул true , то что почта не ушла с машины дело другое :)
AdeL1ne
я думаю вам стоит просто попытаться вызывать mail с минимальным количеством параметров и смотреть на ошибки, ТП иногда ТП
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
tz-lom
вопрос в том, что отладка почты на денвере и фраза "у меня на нем все работало, а на сервере перестало", внушает как минимум - улыбку.
 

Xupypr

Новичок
такое наивное использование данных пришедших непонятно откуда прям "как есть"...

вы уверены, что в $_POST['email'] хоть что-то есть?


з.ы. ... отправил спамерам новый адресок... [email protected] ))
 

AdeL1ne

Новичок
да, на денвере почта падает в !sendmail, тоесть функция возвращает значение true, а на хостинге false. Я уже много чего подправил, но все равно, зараза, на хостинге не отрабатывается :(
 

AdeL1ne

Новичок
такое наивное использование данных пришедших непонятно откуда прям "как есть"...

вы уверены, что в $_POST['email'] хоть что-то есть?


з.ы. ... отправил спамерам новый адресок... [email protected] ))
дружок, ну ты пойми, свое чсв можно повышать миллионом других способов.
а конкретно по твоему вопросу - мне важно, что бы почта таки начала отправляться.
все проверки и прочая защита будут доделываться потом и сейчас нет смысла заморачиваться этим, если функция пока просто отказывается работать на хостинге!

P.S.: в первом посте отредактированный вариант отправки почты, согласно множеству рекомендаций из разных источников. Пока все-так же безрезультатно, функция выдает false :(
 

Semen

Семён
проверь на простом примере из мануала:
если отправляет, ищи ошибки в твоём коде;
если не отправляет, в техподдержку хостинга с этим примером.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
AdeL1ne
А в логи ты смотрел?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
AdeL1ne
tail -n 50 /var/log/mail.log... ну или например лог от твоего php. Да и вообще хотелось бы видеть, что все таки функция mail породит в системе на хостинге.
После вызова mail(xxx) вставь print_r(error_get_last()); и посмотри, есть ли там что.
 

AdeL1ne

Новичок
AdeL1ne
tail -n 50 /var/log/mail.log... ну или например лог от твоего php. Да и вообще хотелось бы видеть, что все таки функция mail породит в системе на хостинге.
После вызова mail(xxx) вставь print_r(error_get_last()); и посмотри, есть ли там что.
print_r(error_get_last()); вообще ничего не выдал!
а насчет логов я так и не понял, где их смотреть конкретно на хостинге?
 

AdeL1ne

Новичок
служба поддержки хостинга долго тупила, но потом таки признала, что функция mail у нее отключена... всем спасибо за ответы, кое-что новое все-таки узнал.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Логи смотреть с консоли через ssh
 
Сверху