Jump to content
666fox666

Не отправляет почту через SMTP

Recommended Posts

Здравствуйте! Поставил версию 4.1.18.2, и решил настроить отправку почты через SMTP. Столкнулся с проблемой. Данные от SMTP все верные, но при отправке "тестового" письма, вижу следующее

IPS\Email\Outgoing\Exception:  (0)
#0 normalgame.ru/system/Email/Outgoing/Smtp.php(195): IPS\Email\Outgoing\_SMTP->connect()
#1 normalgame.ru/system/Email/Outgoing/Smtp.php(180): IPS\Email\Outgoing\_SMTP->_sendCompiled('логин@yandex...', Array, 'MIME-Version: 1...')
#2 normalgame.ru/applications/core/modules/admin/settings/email.php(169): IPS\Email\Outgoing\_SMTP->_send('логин@mail.r...', Array, Array, 'логин@yandex...')
#3 normalgame.ru/system/Dispatcher/Controller.php(96): IPS\core\modules\admin\settings\_email->manage()
#4 normalgame.ru/applications/core/modules/admin/settings/email.php(34): IPS\Dispatcher\_Controller->execute()
#5 normalgame.ru/system/Dispatcher/Dispatcher.php(129): IPS\core\modules\admin\settings\_email->execute()
#6 normalgame.ru/ngadmin/index.php(14): IPS\_Dispatcher->run()
#7 {main}

Может кто сталкивался с таким?

Share this post


Link to post
Share on other sites

WOLF, прошу прощения. Видимо случайно создалась.

Версия PHP: 7.0.15 (Режим работы пыха CGI)

Настройки в скринах. Данные от почты (логин-пароль) верны на 100%.

2017-02-22_14-33-45.png

2017-02-22_14-35-34.png

2017-02-22_14-35-54.png

Share this post


Link to post
Share on other sites
25 минут назад, WOLF сказал:

в яндексе все верно настроено? 

Да. Более того, ранее использовалась такая же Email конфигурация, и всё работало. (Ранее - ещё на ранних версиях 4.1.x, пришлось на какое-то время уйти с IPS, вот заново с нуля накатил, и такая беда). Попробовал и с mail.ru, такая же история (При попытке отправить "тестовое" письмо).

Share this post


Link to post
Share on other sites

Пока что выявил, что косяк точно с версией PHP. Проверял сторонним скриптом, при PHP выше 5.5.38 почта перестает приходить через SMTP. Ниже - пожалуйста, всё приходит. В чём загвоздка - не знаю...

P.S. Проверял на своей 7.0.15 и на 5.6.30

Заметил забавную штучку. Имеем скрипт отправки SMTP следующего вида

<?php
$config['smtp_username'] = 'логин@yandex.ru';  //Смените на адрес своего почтового ящика.
$config['smtp_port'] = '465'; // Порт работы.
$config['smtp_host'] =  'ssl://smtp.yandex.ru';  //сервер для отправки почты
$config['smtp_password'] = 'пароль';  //Измените пароль
$config['smtp_debug'] = true;  //Если Вы хотите видеть сообщения ошибок, укажите true вместо false
$config['smtp_charset'] = 'utf-8';	//кодировка сообщений. (windows-1251 или utf-8, итд)
$config['smtp_from'] = 'Адрес'; //Ваше имя - или имя Вашего сайта. Будет показывать при прочтении в поле "От кого"
	
function smtpmail($to='', $mail_to, $subject, $message, $headers='') {
	global $config;
	$SEND =	"Date: ".date("D, d M Y H:i:s") . " UT\r\n";
	$SEND .= 'Subject: =?'.$config['smtp_charset'].'?B?'.base64_encode($subject)."=?=\r\n";
	if ($headers) $SEND .= $headers."\r\n\r\n";
	else
	{
			$SEND .= "Reply-To: ".$config['smtp_username']."\r\n";
			$SEND .= "To: =?".$config['smtp_charset']."?B?".base64_encode($to)."=?= <$mail_to>\r\n";
			$SEND .= "MIME-Version: 1.0\r\n";
			$SEND .= "Content-Type: text/html; charset=\"".$config['smtp_charset']."\"\r\n";
			$SEND .= "Content-Transfer-Encoding: 8bit\r\n";
			$SEND .= "From: =?".$config['smtp_charset']."?B?".base64_encode($config['smtp_from'])."=?= <".$config['smtp_username'].">\r\n";
			$SEND .= "X-Priority: 3\r\n\r\n";
	}
	$SEND .=  $message."\r\n";
	 if( !$socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 30) ) {
		if ($config['smtp_debug']) echo $errno."<br>".$errstr;
		return false;
	 }
 
	if (!server_parse($socket, "220", __LINE__)) return false;
 
	fputs($socket, "HELO " . $config['smtp_host'] . "\r\n");
	if (!server_parse($socket, "250", __LINE__)) {
		if ($config['smtp_debug']) echo '<p>Не могу отправить HELO!</p>';
		fclose($socket);
		return false;
	}
	fputs($socket, "AUTH LOGIN\r\n");
	if (!server_parse($socket, "334", __LINE__)) {
		if ($config['smtp_debug']) echo '<p>Не могу найти ответ на запрос авторизаци.</p>';
		fclose($socket);
		return false;
	}
	fputs($socket, base64_encode($config['smtp_username']) . "\r\n");
	if (!server_parse($socket, "334", __LINE__)) {
		if ($config['smtp_debug']) echo '<p>Логин авторизации не был принят сервером!</p>';
		fclose($socket);
		return false;
	}
	fputs($socket, base64_encode($config['smtp_password']) . "\r\n");
	if (!server_parse($socket, "235", __LINE__)) {
		if ($config['smtp_debug']) echo '<p>Пароль не был принят сервером как верный! Ошибка авторизации!</p>';
		fclose($socket);
		return false;
	}
	fputs($socket, "MAIL FROM: <".$config['smtp_username'].">\r\n");
	if (!server_parse($socket, "250", __LINE__)) {
		if ($config['smtp_debug']) echo '<p>Не могу отправить комманду MAIL FROM: </p>';
		fclose($socket);
		return false;
	}
	fputs($socket, "RCPT TO: <" . $mail_to . ">\r\n");
 
	if (!server_parse($socket, "250", __LINE__)) {
		if ($config['smtp_debug']) echo '<p>Не могу отправить комманду RCPT TO: </p>';
		fclose($socket);
		return false;
	}
	fputs($socket, "DATA\r\n");
 
	if (!server_parse($socket, "354", __LINE__)) {
		if ($config['smtp_debug']) echo '<p>Не могу отправить комманду DATA</p>';
		fclose($socket);
		return false;
	}
	fputs($socket, $SEND."\r\n.\r\n");
 
	if (!server_parse($socket, "250", __LINE__)) {
		if ($config['smtp_debug']) echo '<p>Не смог отправить тело письма. Письмо не было отправленно!</p>';
		fclose($socket);
		return false;
	}
	fputs($socket, "QUIT\r\n");
	fclose($socket);
	return TRUE;
}
 
function server_parse($socket, $response, $line = __LINE__) {
	global $config;
	while (@substr($server_response, 3, 1) != ' ') {
		if (!($server_response = fgets($socket, 256))) {
			if ($config['smtp_debug']) echo "<p>Проблемы с отправкой почты!</p>$response<br>$line<br>";
 			return false;
 		}
	}
	if (!(substr($server_response, 0, 3) == $response)) {
		if ($config['smtp_debug']) echo "<p>Проблемы с отправкой почты!</p>$response<br>$line<br>";
		return false;
	}
	return true;
}
?>

Этим скриптом я запускаю отправку на свою почту данных из формы обратной связи

<?php
include_once('sendmail.php');
include_once('/index.html');
$name = $_POST['name'];
$mail = $_POST['mail'];
$mobnumber = $_POST['mobnumber'];
$name = htmlspecialchars($name);
$mail = htmlspecialchars($mail);
$mobnumber = htmlspecialchars($mobnumber);
$name = urldecode($name);
$mail = urldecode($mail);
$mobnumber = urldecode($mobnumber);
$name = trim($name);
$mail = trim($mail);
$mobnumber = trim($mobnumber);
smtpmail('адрес@mail.ru', 'адрес@mail.ru', 'Информация', '<html><body><p>Имя: '.$name.'</p><p>Почта: '.$mail.'</p><p>Телефон: '.$mobnumber.'</p></body></html>');
header('REFRESH: 3; URL=http://site.ru/');
echo 'Тут мой текст, который выведется на "пустую" страницу, с которой через 3 секунды произойдет редирект обратно на site.ru';
?>

Так вот при версиях PHP ниже 5.5.38, всё было как положено, нажимаем на кнопку отправки данных, нас перебрасывает на "пустую" страничку с надписью "Тут мой текст, который выведется на "пустую" страницу, с которой через 3 секунды произойдет редирект обратно на site.ru", а после через 3 секунды меня перебрасывает на site.ru, и сваливается письмо на адрес.

При версиях PHP выше происходит примерно то же самое, но на "пустой" страничке текст отображается вот так:

0
Тут мой текст, который выведется на "пустую" страницу, с которой через 3 секунды произойдет редирект обратно на site.ru

Ну и соответственно редирект, но без письма. Почему так происходит - не знаю.

Share this post


Link to post
Share on other sites

если  виной версия PHP пробуйте отписать хостеру, возможно он в настройках PHP не выставил некоторые значения, объясните ситуацию, может он выставит все тоже самое что и в версии 5.5 на 5.6 и 7.0

Share this post


Link to post
Share on other sites

WOLF, сайты на VPS стоят.

Начиная с версии PHP 5.6 идет проверка сертификатов при SSL/TLS подключениям.

Решением оказалось обновить корневые сертификаты до последней версии (от igft).

 

P.S. Спасибо ТехПоддержке)

Share this post


Link to post
Share on other sites
2 часа назад, Dancebunny сказал:

Пишет что сообщение отправлено, но его нету ....

Не нужно флудить в каждой теме, один раз написала и все.

По вопросу,смотри на почте в спаме 

Share this post


Link to post
Share on other sites
4 часа назад, WOLF сказал:

Не нужно флудить в каждой теме, один раз написала и все.

По вопросу,смотри на почте в спаме 

Там нету ничего....

 

Share this post


Link to post
Share on other sites

Как и вышеотписавшиеся не могу настроить должным образом отправку почты. Пробное письмо не отправляется. Учётные записи для отправки почты точно верны и перепроверены несколько раз. IPS 4.3.3, PHP 7.2.3, Apache 2.4.29 Unix, Linux Storage 4.2.8. Пробовал и обычный PHP способ настраивать, тоже не вышло. Но нужен SMTP. 

2018-05-26_20-29-00.thumb.png.fdfe9aaa9a793125968b282c6ab08ec5.png2018-05-26_20-28-05.thumb.png.086f5f74c16bde8ebececdd7c1bd2181.png

Share this post


Link to post
Share on other sites

Владимир на название темы не смотри, там 5 страниц, уже на второй начали решать проблему с почтой. Возможно на моем примере решишь проблему. Все ветки перечитай ибо уже не вспомню что делал)

 

Share this post


Link to post
Share on other sites
2 часа назад, Megalex сказал:

Владимир на название темы не смотри, там 5 страниц, уже на второй начали решать проблему с почтой. Возможно на моем примере решишь проблему. Все ветки перечитай ибо уже не вспомню что делал)

 

Насколько я понял, в теме обсуждался pop (т.е. входящие сообщения)? Проверил по такому же подходу, сохраняются ли настройки для smtp в БД - всё сохраняется, всё верно. Или же это неким образом связанные и влияющие друг на друга вещи? Т.к. для pop у меня в БД действительно не заданы никакие значения

Share this post


Link to post
Share on other sites
2 часа назад, Emix12 сказал:

У вас в настройках яндекса, стоит прием писем или отправка? 

У меня на NAS уже есть учётка от яндекса, через которую он отправляет письма, там всё работает. На ips я выставляю другую учётку с того же домена на яндексе.

Более того, если указать недостоверный SMTP в настройках IPS, то выскакивает ошибка таймаута. Т.е. всё-таки при правильных настройках он пытается что-то выполнить.

Вход через саму учётку на яндексе работает. Письма с учётки так же отправляются без вопросов.

2 часа назад, Emix12 сказал:

И проверьте, ли у вас все модули в системе установлены, PHP 

Более подробно, какие модули проверять? 

Share this post


Link to post
Share on other sites
9 часов назад, Владимир сказал:

У меня на NAS уже есть учётка от яндекса, через которую он отправляет письма, там всё работает. На ips я выставляю другую учётку с того же домена на яндексе.

Более того, если указать недостоверный SMTP в настройках IPS, то выскакивает ошибка таймаута. Т.е. всё-таки при правильных настройках он пытается что-то выполнить.

Вход через саму учётку на яндексе работает. Письма с учётки так же отправляются без вопросов.

Более подробно, какие модули проверять? 

Screenshot_2.thumb.png.fcd478863dc742823f266327719959f9.pngScreenshot_3.thumb.png.d503fde4f87429ecd7b45d95e5126372.png

Share this post


Link to post
Share on other sites
10 часов назад, Владимир сказал:

У меня на NAS уже есть учётка от яндекса

Да что ты заладил про свой NAS, да NAS... Да хоть на серверах гугл у тебя пусть стоит сайт. Или у тебя прям сервак Яндекса в твоем NAS хранится... В настройках почты ПРЯМО В ЯНДЕКСЕ, посмотри чтобы включены были протоколы по приему/отправке почты. Так же DNS яндекса должны быть добавлены с правильными значениями (A / AAAA / MX / SRV / TXT / CNAME / SOA) в настройках конфигурации DNS прямо на сервере. 

Share this post


Link to post
Share on other sites
44 минуты назад, Emix12 сказал:

Screenshot_2.thumb.png.fcd478863dc742823f266327719959f9.pngScreenshot_3.thumb.png.d503fde4f87429ecd7b45d95e5126372.png

Всё подключено, всё зелёное.

 

16 минут назад, Megalex сказал:

Да что ты заладил про свой NAS, да NAS... Да хоть на серверах гугл у тебя пусть стоит сайт. Или у тебя прям сервак Яндекса в твоем NAS хранится... В настройках почты ПРЯМО В ЯНДЕКСЕ, посмотри чтобы включены были протоколы по приему/отправке почты. Так же DNS яндекса должны быть добавлены с правильными значениями (A / AAAA / MX / SRV / TXT / CNAME / SOA) в настройках конфигурации DNS прямо на сервере. 

Я это к тому, что если бы с яндексом было что-то не так, то он уведомления с NAS не приходили бы. Всё это давным давно настроено.

Share this post


Link to post
Share on other sites

1. Выполни: 

sudo apt-get install php-pear

sudo pear install -o Mail
sudo pear install -o Net_SMTP
sudo pear install -o Auth_SASL
sudo pear install -o mail_mime

2. Попробуй кастомно отправить сообщение:

// Pear Mail Library
require_once "Mail.php";

$from = '<ete>';
$to = '<te';
$subject = 'Hi!';
$body = "Hi,\n\nHow are you?";

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.yandex.ru',
        'port' => '465',
        'auth' => true,
        'username' => 'user',
        'password' => 'password'
    ));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
    echo('<p>' . $mail->getMessage() . '</p>');
} else {
    echo('<p>Message successfully sent!</p>');
}

 

Share this post


Link to post
Share on other sites
В 28.05.2018 в 00:02, Emix12 сказал:

1. Выполни: 


sudo apt-get install php-pear

sudo pear install -o Mail
sudo pear install -o Net_SMTP
sudo pear install -o Auth_SASL
sudo pear install -o mail_mime

 

 

Установка новых программ на NAS это целое дело. Он урезан в командах, никаких apt-get, pear и прочих нет. Есть только wget, да и то, непонятно как потом скачанное установить.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Ваша ссылка была автоматически строена.   Отображать как обычную ссылку

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...