Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

РЕШЕНА! Не уходят письма как с заказами, так и с простой веб-формы на Netcat 5.3

16.05.2014, 12:24
dimidroll
Егоровых Дмитрий
dimidroll

Зарегистрирован:
2007-10-05
Сообщений: 81

Хостер обновил до PHP 5.3. Перестали приходить письма с сайта. Поддержка хостера говорит о необходимости smtp-авторизации на отправку писем. В неткате /lib/Mail есть библиотеки, в частности smtp.php, в нем прописал реквизиты на внешний smtp-сервер с авторизацией, все равно не уходят и не приходят письма. Ошибок не выдает.
Подскажите, хостера напрягать или каким то образом можно решить проблему средствами Нетката.
Нашел решение от мастерхоста, но что-то оно не работает
http://masterhost.ru/support/doc/windows/smtp-auth/#netcat

Заранее благодарю.

ася - 97336016
16.05.2014, 16:53
13bis
Плотников Сергей
13bis

Зарегистрирован:
2008-01-23
Сообщений: 40

А что тех. поддержка НетКат говорит по этому поводу?
19.05.2014, 19:41
dimidroll
Егоровых Дмитрий
dimidroll

Зарегистрирован:
2007-10-05
Сообщений: 81

Цитата:
А что тех. поддержка НетКат говорит по этому поводу?


Создал тикет! Сказали будут смотреть... Но вышел сам из ситуации... Может кому то пригодится.
В файл /netcat/modules/default/function.inc.php добавляем функцию, отвечающую за отправку почты с smtp-авторизацией
Код:

function SendAuthMail($mail_to, $mail_subject, $mail_message, $mail_header)
{
//Param for SMTP-server
$mail_smtpServer = "smtp.domain.you";
$mail_port = 25;
$mail_timeout = 30;
$mail_username = "user@domain.you";
$mail_password = "pass";
$mail_localhost = "localhost";
$newLine = "\r\n";

//Connect to the host on the specified port
$smtpConnect = fsockopen($mail_smtpServer, $mail_port, $errno, $errstr, $mail_timeout);

if(!$smtpConnect)
{
$logArray['connection'] = "Failed to connect: ".$smtpResponse;
fclose($smtpConnect);
return false;
}
else
{
$logArray['connection'] = "Connected: ".$smtpResponse;
}

$smtpResponse = fgets($smtpConnect, 515);
//Say Hello to SMTP
fputs($smtpConnect, "HELO ".$mail_localhost . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['heloresponse'] = $smtpResponse;

//Request Auth Login
fputs($smtpConnect,"AUTH LOGIN" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authrequest'] = $smtpResponse;

//Send username
fputs($smtpConnect, base64_encode($mail_username) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authusername'] = $smtpResponse;

//Send password
fputs($smtpConnect, base64_encode($mail_password) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authpassword'] = $smtpResponse;

//Email From
fputs($smtpConnect, "MAIL FROM: <$mail_username>" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailfromresponse'] = $smtpResponse;

//Email To
fputs($smtpConnect, "RCPT TO: <$mail_to>" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailtoresponse'] = $smtpResponse;

//The Email
fputs($smtpConnect, "DATA" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data1response'] = $smtpResponse;

//Construct Headers
$header = $mail_header;
$header .= "To: <$mail_to>\r\n";
$header .= "Subject: ".$mail_subject."\r\n";

//Headers and Message
fputs($smtpConnect, $header."\r\n".$mail_message."\r\n.\r\n");
$smtpResponse = fgets($smtpConnect, 515);
$logArray['endDataresponse'] = $smtpResponse;

fputs($smtpConnect, "RSET\r\n");
$smtpResponse = fgets($smtpConnect, 515);

// Say Bye to SMTP
fputs($smtpConnect,"QUIT\r\n");
$smtpResponse = fgets($smtpConnect, 515);
$logArray['quitresponse'] = $smtpResponse;
fclose($smtpConnect);

// Display log

/*
echo "connect: " . $logArray['connection'] . "<BR>";
echo "HELO: " . $logArray['heloresponse'] . "<BR>";
echo "auth: " . $logArray['authrequest'] . "<BR>";
echo "user: " . $logArray['authusername'] . "<BR>";
echo "pass: " . $logArray['authpassword'] . "<BR>";
echo "From: " . $logArray['mailfromresponse'] . "<BR>";
echo "To: " . $logArray['mailtoresponse'] . "<BR>";
echo "Data: " . $logArray['data1response'] . "<BR>";
echo "Message: " . $logArray['data2response'] . "<BR>";
echo "End message: " . $logArray['endDataresponse'] . "<BR>";
echo "Quit: " . $logArray['quitresponse'] . "<BR>";
*/
}


Затем идем в /netcat/admin/mail.inc.php , ищем функцию send
комментируем строку
Код:

// return @mail($this->to, nc_base64_encode_header($this->subject, $this->charset), $this->makebody(), $this->makeheader());

и вставляем нашу функцию, заменяющую отправку через mail()
Код:

SendAuthMail($this->to, nc_base64_encode_header($this->subject, $this->charset), $this->makebody(), $this->makeheader());


Вот таким способом решается проблема... Надеюсь разработчики учтут способы отправки почты через внешние сервера в следующих релизах системы.
Часть переменных отрезало в функции - если что пишите гордый

ася - 97336016
24.03.2015, 17:10
Вячеслав

Зарегистрирован:
2014-05-13
Сообщений: 8

А какую часть переменных отрезало?
28.04.2022, 01:38
Дмитрий

Зарегистрирован:
2022-04-28
Сообщений: 1

Здравствуйте!

Подскажите пожалуйста, какие данные нужно передать в эти строки?
Код:

$mail_smtpServer = "smtp.domain.you";

$mail_port = 25;

$mail_timeout = 30;

$mail_username = "user@domain.you";

$mail_password = "pass";

$mail_localhost = "localhost";

$newLine = "\r\n";


Не очень понятно, что должно лежать в $mail_localhost = "localhost". Или это оставлять без изменений?
В поле $mail_smtpServer = "smtp.domain.you", подойдёт любой smtp сервер или только сервер хостера и почты к нему привязанной? У меня timeweb.

Наверное странно поднимать тему с 14-го года, но я уже не знаю что делать. Та же ситуация, при заказе в карзине, письма с уведомлениями не приходят.

Заранее спасибо!
198 196 2022-04-28 01:38:43 13648
Описание проекта