Jump to content
View in the app

A better way to browse. Learn more.

IPBMafia.ru - поддержка Invision Community, релизы, темы, плагины и приложения

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

Posted

Здравствуйте! Поставил версию 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}

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

  • Author
25 минут назад, WOLF сказал:

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

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

  • Author

Пока что выявил, что косяк точно с версией 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

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

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

  • Author

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

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

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

 

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

  • 8 месяцев спустя...
2 часа назад, Dancebunny сказал:

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

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

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

  • 5 месяцев спустя...

Как и вышеотписавшиеся не могу настроить должным образом отправку почты. Пробное письмо не отправляется. Учётные записи для отправки почты точно верны и перепроверены несколько раз. 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

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

 

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

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

 

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

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

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

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

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

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

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

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

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

9 часов назад, Владимир сказал:

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

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

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

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

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

10 часов назад, Владимир сказал:

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

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

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 не приходили бы. Всё это давным давно настроено.

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>');
}

 

В 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, да и то, непонятно как потом скачанное установить.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.