|  | dimidroll Егоровых Дмитрий
 
  
 Зарегистрирован: 2007-10-05
 Сообщений: 81
 | Хостер обновил до PHP 5.3. Перестали приходить письма с сайта. Поддержка хостера говорит о необходимости smtp-авторизации на отправку писем. В неткате /lib/Mail есть библиотеки, в частности smtp.php, в нем прописал реквизиты на внешний smtp-сервер с авторизацией, все равно не уходят и не приходят письма. Ошибок не выдает. Подскажите, хостера напрягать или каким то образом можно решить проблему средствами Нетката.
 Нашел решение от мастерхоста, но что-то оно не работает
 http://masterhost.ru/support/doc/windows/smtp-auth/#netcat
 
 Заранее благодарю.
 
 
 ася - 97336016 | 
                            
                            
  |  | 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 | 
  |  | Дмитрий 
 
 Зарегистрирован: 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-го года, но я уже не знаю что делать. Та же ситуация, при заказе в карзине, письма с уведомлениями не приходят.
 
 Заранее спасибо!
 |