Jump to content

Отправка писем через сторонний SMTP


Go to solution Solved by n0a,

Recommended Posts

Понадобилось отправить письма через SMTP яндекса. Написал решение через библиотеку Phpmailer. В скрепке архив с файлами (Убрать в конце расширение .php). Надо к текущему сайту лишь добавить папку Phpmailer (в корень) и заменить api/Notify.php

 

В конфиге config/config.php добавить секцию:

[phpmailer]
phpmailer_enable = true;
phpmailer_host = 'smtp.yandex.ru';
phpmailer_port = 25;
phpmailer_user = 'user';
phpmailer_password = 'pass';
phpmailer_ssl = false;
Также переработал отправку сообщений о комментариях и заказах. Если в настройках указать не 1 email, а несколько через точку с запятой - сообщения о комментариях и заказах разойдутся всем.

simpla.rar.php

Link to post
Share on other sites
  • Replies 57
  • Created
  • Last Reply

Top Posters In This Topic

  • 2 weeks later...
  • 3 weeks later...

У меня вот такую ошибку выдает:

SMTP Error: Could not connect to SMTP host. SMTP Error: Could not connect to SMTP host. 
Warning: Cannot modify header information - headers already sent by (output started at /home/folder/public_html/name.ru/Phpmailer/Phpmailer.php:586) in /home/folder/public_html/name.ru/view/CartView.php on line 125

Warning: Cannot modify header information - headers already sent by (output started at /home/folder/public_html/name.ru/Phpmailer/Phpmailer.php:586) in
Link to post
Share on other sites
  • 5 months later...

Большое спасибо, очень полезная доработка!

Пришлось немного модифицировать конфиг для Яндекса:

[phpmailer]
phpmailer_enable = true;
phpmailer_host = 'smtp.yandex.ru';
phpmailer_port = 465;
phpmailer_user = 'email';
phpmailer_password = 'pass';
phpmailer_ssl = true;
 
и notify:

            $mailer->From = $mailer->Username; // $from
            $mailer->FromName = "robot";
            $mailer->Sender = $mailer->Username;

Иначе не хотело работать...

Link to post
Share on other sites
  • 2 months later...

у меня вот такая ошибка вышла, но в админке в ЗАКАЗЫ поступает, но НЕ отсылается

 

SMTP Error: Could not connect to SMTP host. SMTP Error: Could not connect to SMTP host.
Warning: Cannot modify header information - headers already sent by (output started at /home/site/data/www/site/Phpmailer/Phpmailer.php:586) in /home/site/data/www/site/view/CartView.php on line 122

Warning: Cannot modify header information - headers already sent by (output started at /home/site/data/www/site/Phpmailer/Phpmailer.php:586) in /home/site/data/www/site/index.php on line 33
Link to post
Share on other sites

кусок CartView.php:



			// Отправляем письмо пользователю
			$this->notify->email_order_user($order->id);
	    	
			// Отправляем письмо администратору
			$this->notify->email_order_admin($order->id);
	    	
	    	// Очищаем корзину (сессию)
			$this->cart->empty_cart();
						
			// Перенаправляем на страницу заказа
сторка 122		header('Location: '.$this->config->root_url.'/order/'.$order->url);
		}

кусок от index.php:



// Если все хорошо

if(($res = $view->fetch()) !== false)

{

	// Выводим результат

строка 33	header("Content-type: text/html; charset=UTF-8");	

	print $res;



	// Сохраняем последнюю просмотренную страницу в переменной $_SESSION['last_visited_page']

	if(empty($_SESSION['last_visited_page']) || empty($_SESSION['current_page']) || $_SERVER['REQUEST_URI'] !== $_SESSION['current_page'])

	{

		if(!empty($_SESSION['current_page']) && !empty($_SESSION['last_visited_page']) && $_SESSION['last_visited_page'] !== $_SESSION['current_page'])

			$_SESSION['last_visited_page'] = $_SESSION['current_page'];

		$_SESSION['current_page'] = $_SERVER['REQUEST_URI'];

	}		

}

 

помогите ребята. что не так?

Link to post
Share on other sites

Автор темы 

Был на сайте 27.09.2013 14:11

 

думаю он бросил это дело.

Писал симпле:

 

Denis Pikusov
11:26 (2 ч. назад)
cleardot.gif
 
cleardot.gif
cleardot.gif
кому: мне
cleardot.gif
К сожалению я не могу помочь с чужим кодом, уточните пожалуйста у автора модуля

 
       
А у Вас нету другого решения?
хостинг менять не Хочется, т.к. привык к нему.
 


 
profile_mask2.png
Denis Pikusov
11:49 (1 ч. назад)
cleardot.gif
 
cleardot.gif
cleardot.gif
К сожалению пока нет

 

 

что делать уже незнаю, руки опустились

 

смотрю файлы надо сохранить в utf-8 без БОМа

Link to post
Share on other sites

У вас ошибка о невозможности соединиться с SMTP хостом.

Если у кого то работает, а у вас нет, тут варианты:

1. Хостинг который вас безбожно режет, попробуйте поменять порт, многие закрывают 25 порт. Все популярные почтовые сервисы предоставляют альтернативный с SSL

2. Вы ошиблись в параметрах конфигурации (хост, порт, имя пользователя, пароль). Не везде срабатывает в качестве логина username, многие требуют указывать username@domain.ru

 

А по хорошему, SMTP не нужен, достаточно нормального VPS и настроенного DKIM на почтовом сервере - письма уходят без проблем и не попадают в спам

Link to post
Share on other sites
  • 1 month later...
  • 3 weeks later...

[phpmailer]
phpmailer_enable = true;
phpmailer_host = "smtp.yandex.ru";
phpmailer_port = 465;
phpmailer_user = "вашеимя@yandex.ru";
phpmailer_password = "пароль";
phpmailer_ssl = true;

 

кавычки двойные с учетом измененив notifi

и как тут писали.

c 47 строки по 49 (у меня) меняем на

 

$mailer->From = $mailer->Username; // $from
$mailer->FromName = "robot";
$mailer->Sender = $mailer->Username;

 

и все работает

Link to post
Share on other sites
  • 1 month later...
  • 1 month later...
  • 7 months later...

Пол дня мучался, заработало когда заменил строку

 

phpmailer_host = 'smtp.yandex.ru';

 

на

 

phpmailer_host = 'ssl://smtp.yandex.ru';

 

http://forum.simplacms.ru/topic/9389-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0-%D0%BC%D1%8B%D0%BB%D0%B0-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-stmp/ пол-минуты не мучался и все получилось ;)

Link to post
Share on other sites

Хотя кто бы знал, что просто нужно дописать ssl://   перед адресом сервера. Думаю и с этим примером то же самое было бы

 

яндекс анонсировали полный переход на защищенный протокол год назад помоему или около того, поэтому везде нужно было заменить простой http на шифрованый и порт 465.

Edited by mishanya
Link to post
Share on other sites

Хотя кто бы знал, что просто нужно дописать ssl://   перед адресом сервера. Думаю и с этим примером то же самое было бы

 

1,5 года стоит эта доработка и все работает

Edited by Rash
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 link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
×
×
  • Create New...