Перейти к содержимому


Фото
* * * * * 1 голосов

Правильная отправка мыла через STMP


  • Чтобы отвечать, сперва войдите на форум
39 ответов в теме

#1 Чудилла

Чудилла
  • Фрилансер
  • 125 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x

Опубликовано 19.03.2015 - 01:25

Все доброго времени суток.

Обратился клиент, не приходят письма о заказах, как выяснилось был заблокирован сервис STMP на сервере из-за (вируса) спама.

 

Правильное решение избавится от php mail.

Качаем swiftmailer https://github.com/s...ler/swiftmailer

сохраняем папку lib в /api/lib/

 

Далее находим файл /api/Notify.php

Находим функцию 

function email($to, $subject, $message, $from = '', $reply_to = '')
{

И меняем содержимое 

require_once('lib/swift_required.php');


/**
* $transport = Swift_SmtpTransport::newInstance('smtp.yandex.ru', 465, 'ssl')
* ->setUsername('email@yandex.ru')
* ->setPassword('password');
* Можно создать любой емайл на яндексе и использовать в качестве отправки заказов и * других сообщений
*/

$transport = Swift_SmtpTransport::newInstance('smtp.google.com', 465, 'ssl')
	->setUsername('my@example.com')
	->setPassword('password');

$mailer = Swift_Mailer::newInstance($transport);

$messages = Swift_Message::newInstance($subject)
	->setFrom('my@example.com')
	->setTo($to)
	->setContentType("text/html; charset=UTF-8")
	->setBody($message, 'text/html');

$result = $mailer->send($messages);

И письма будут доходить 100% даже с выключенным сервисом STMP

P.S По мне давно уже никто не использует php mail в качестве отправки писем.


Изменено: Чудилла, 19.03.2015 - 01:25


#2 bermando

bermando
  • Пользователь
  • 21 сообщений

Опубликовано 06.07.2015 - 15:25

Все доброго времени суток.

Обратился клиент, не приходят письма о заказах, как выяснилось был заблокирован сервис STMP на сервере из-за (вируса) спама.

 

Правильное решение избавится от php mail.

Качаем swiftmailer https://github.com/s...ler/swiftmailer

сохраняем папку lib в /api/lib/

 

Далее находим файл /api/Notify.php

Находим функцию 

function email($to, $subject, $message, $from = '', $reply_to = '')
{

И меняем содержимое 

require_once('lib/swift_required.php');


/**
* $transport = Swift_SmtpTransport::newInstance('smtp.yandex.ru', 465, 'ssl')
* ->setUsername('email@yandex.ru')
* ->setPassword('password');
* Можно создать любой емайл на яндексе и использовать в качестве отправки заказов и * других сообщений
*/

$transport = Swift_SmtpTransport::newInstance('smtp.google.com', 465, 'ssl')
	->setUsername('my@example.com')
	->setPassword('password');

$mailer = Swift_Mailer::newInstance($transport);

$messages = Swift_Message::newInstance($subject)
	->setFrom('my@example.com')
	->setTo($to)
	->setContentType("text/html; charset=UTF-8")
	->setBody($message, 'text/html');

$result = $mailer->send($messages);

И письма будут доходить 100% даже с выключенным сервисом STMP

P.S По мне давно уже никто не использует php mail в качестве отправки писем.

после отправки выплевывает на пустую страницу( ничего с этим не могу поделать



#3 mishanya

mishanya
  • Фрилансер
  • 2 541 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 06.07.2015 - 15:33

после отправки выплевывает на пустую страницу( ничего с этим не могу поделать

 

включите вывод ошибок php и посмотрите какая ошибка


Изменено: mishanya, 06.07.2015 - 15:34


#4 Maksclub

Maksclub

    Помогаю с Симплой и c PHP

  • Фрилансер
  • 1 344 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 15.08.2015 - 01:33

Белый экран появляется, если в качестве почты ввести почту вида: info@mysite.ru, которая на Яндексе

Обычная почта прокатывает без проблем



#5 Gloobus

Gloobus
  • Фрилансер
  • 133 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Москва

Опубликовано 22.08.2015 - 22:25

Правильное решение это свой VPS + настроенные SPF и DKIM!

А это костыли!

 

Не понимаю некоторых владельцев магазинов. Это же не бложек, да и сейчас цены на VPS не кусаются.

Нет, сидят многие на самых "ужатых" тарифов какого нибудь задрипанного хостера, который режет все направо и налево



#6 fo011y

fo011y
  • Пользователь
  • 9 сообщений

Опубликовано 21.11.2015 - 20:13

Спасибо, очень помогло!

И кстати сваливается в белое, потому что не указываете настройки почты. Сам только что проверил.



#7 baarseek

baarseek
  • Пользователь
  • 41 сообщений

Опубликовано 10.05.2016 - 06:15

Только в функции лучше, мне кажется, указать:

->setFrom(array('john@doe.com' => 'John Doe'))

Чтобы в почте адрес выглядел красивее.



#8 palehin

palehin
  • Пользователь
  • 13 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Иркутск

Опубликовано 10.05.2016 - 06:24

Вставил этот скрипт

Отправляю письма через ajax

В обработчике вот такой код:

<?php
    chdir('..');
    require_once('api/Simpla.php');
    $simpla = new Simpla();
    $msg = '<b>Имя:</b> '.$simpla->request->post('username', 'string').'<br /> <b>Телефон или Email</b>: '.$simpla->request->post('tel', 'string').'<br /> <b>Отзыв:</b> '.$simpla->request->post('feed', 'string');
    $simpla->notify->email($simpla->notify->settings->notify_from_email, 'Отзыв с сайта ads-irk.ru.org', $msg, '123');
?>

Но при попытке отправки в консоли показывает ошибку:

500 (Internal Server Error)



#9 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 10.05.2016 - 10:03

Для кого-то такая отправка, возможно, и "правильная".

 

А если чуть проанализировать способ, то видно, то что в новом варианте функции mail  из пяти параметров последние два просто ИГНОРИРУЮТСЯ - ошибка принципиальная. Из-за этого некоторые письма, например, оповещение админу о сообщение со страницы Контакты, будет приходить не в таком удобном виде, как обычно, и написать на него ответ комфортным образом без выискивания и подстановки ручками email отправителя админу не удастся...

 

И не исключено, что в некоторых случаях из-за неуказанного в заголовке значения from отправка может и не сработать...



#10 mishanya

mishanya
  • Фрилансер
  • 2 541 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 10.05.2016 - 10:56

Вставил этот скрипт

Отправляю письма через ajax

В обработчике вот такой код:

<?php
    chdir('..');
    require_once('api/Simpla.php');
    $simpla = new Simpla();
    $msg = '<b>Имя:</b> '.$simpla->request->post('username', 'string').'<br /> <b>Телефон или Email</b>: '.$simpla->request->post('tel', 'string').'<br /> <b>Отзыв:</b> '.$simpla->request->post('feed', 'string');
    $simpla->notify->email($simpla->notify->settings->notify_from_email, 'Отзыв с сайта ads-irk.ru.org', $msg, '123');
?>

Но при попытке отправки в консоли показывает ошибку:

500 (Internal Server Error)

 

что это за шедевр?

$simpla->notify->settings->notify_from_email

там должно быть 

$simpla->settings->notify_from_email

 

из-за этого 500я ошибка. потому что вы пытаетесь вызвать массив настроек из notify где его нет.

 

вообще лучше оформить это все отдельной ф-ей в api/Notify.php и вызывать ее 

$simpla->notify->review_admin($msg);

 

например. посмотрите как работает Feedback, там все пишется в базу а потом по айди выбирается


Изменено: mishanya, 10.05.2016 - 11:03


#11 palehin

palehin
  • Пользователь
  • 13 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Иркутск

Опубликовано 10.05.2016 - 14:29

что это за шедевр?

$simpla->notify->settings->notify_from_email

там должно быть 

$simpla->settings->notify_from_email

 

из-за этого 500я ошибка. потому что вы пытаетесь вызвать массив настроек из notify где его нет.

 

вообще лучше оформить это все отдельной ф-ей в api/Notify.php и вызывать ее 

$simpla->notify->review_admin($msg);

 

например. посмотрите как работает Feedback, там все пишется в базу а потом по айди выбирается

 

Спасибо Вам в очередной раз)



#12 Axotn1k

Axotn1k
  • Пользователь
  • 83 сообщений
  • Дизайн
  • Откуда:Украина, Киев

Опубликовано 19.05.2016 - 10:47

При настройке у меня ошибка 

 


Parse error: syntax error, unexpected T_REQUIRE_ONCE, expecting T_FUNCTION in /..../api/Notify.php on line 15

 

что не так сделал ?



#13 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 19.05.2016 - 10:55

Посадил ошибку в файле Notify.php.  Проверяйте аккуратно...



#14 Axotn1k

Axotn1k
  • Пользователь
  • 83 сообщений
  • Дизайн
  • Откуда:Украина, Киев

Опубликовано 20.05.2016 - 09:55

Посадил ошибку в файле Notify.php.  Проверяйте аккуратно...

Та все сделал по инструкции, скачал посылке  swiftmailer  папку lib , закинул по пути /api/lib

Дальше удалил строчку 

 

 

function email($to, $subject, $message, $from = '', $reply_to = '')
{

и добавил вместо нее 

 

require_once('lib/swift_required.php');

 

 

/**
* $transport = Swift_SmtpTransport::newInstance('smtp.yandex.ru', 465, 'ssl')
* ->setUsername('email@yandex.ru')
* ->setPassword('password');
* Можно создать любой емайл на яндексе и использовать в качестве отправки заказов и * других сообщений
*/

$transport = Swift_SmtpTransport::newInstance('smtp.google.com', 465, 'ssl')
    ->setUsername('my@example.com')
    ->setPassword('password');

$mailer = Swift_Mailer::newInstance($transport);

$messages = Swift_Message::newInstance($subject)
    ->setFrom('my@example.com')
    ->setTo($to)
    ->setContentType("text/html; charset=UTF-8")
    ->setBody($message, 'text/html');

$result = $mailer->send($messages);
 

Все же верно, вот мой Notify.php http://rgho.st/8ZpmqmHSf

там и ошибку сделать нету где


Изменено: Axotn1k, 20.05.2016 - 09:59


#15 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 20.05.2016 - 10:22

Находим функцию

И меняем содержимое

Дальше удалил строчку

 

Согласно инструкции из #1 строчку надо было только НАЙТИ, удалять ее - это и есть ошибка.

Удалять надо то, что в ТЕЛЕ функции, то есть строки, обозначенные ниже точками:

function email($to, $subject, $message, $from = '', $reply_to = '')
{
.................
.................
.................
.................
}
 



#16 Axotn1k

Axotn1k
  • Пользователь
  • 83 сообщений
  • Дизайн
  • Откуда:Украина, Киев

Опубликовано 20.05.2016 - 10:24

Согласно инструкции из #1 строчку надо было только НАЙТИ, удалять ее - это и есть ошибка.

Удалять надо то, что в ТЕЛЕ функции, то есть строки, обозначенные ниже точками:

function email($to, $subject, $message, $from = '', $reply_to = '')
{
.................
.................
.................
.................
}
 

 

Находим функцию, И меняем содержимое 

Равнозначно заменить функцию на другу, следственно удалить старую, и вставить новую, разве нет ?



#17 Axotn1k

Axotn1k
  • Пользователь
  • 83 сообщений
  • Дизайн
  • Откуда:Украина, Киев

Опубликовано 20.05.2016 - 10:45

Сделал как правильно, заменил только функцию, ошибка

 

 

Fatal error: Uncaught exception 'Swift_TransportException' with message 'Connection could not be established with host smtp.yandex.ru [Connection timed out #110]' in /home/puma1639/public_html/api/lib/classes/Swift/Transport/StreamBuffer.php:269 Stack trace: #0 /home/puma1639/public_html/api/lib/classes/Swift/Transport/StreamBuffer.php(62): Swift_Transport_StreamBuffer->_establishSocketConnection() #1 /home/puma1639/public_html/api/lib/classes/Swift/Transport/AbstractSmtpTransport.php(113): Swift_Transport_StreamBuffer->initialize(Array) #2 /home/puma1639/public_html/api/lib/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start() #3 /home/puma1639/public_html/api/Notify.php(40): Swift_Mailer->send(Object(Swift_Message)) #4 /home/puma1639/public_html/api/Notify.php(152): Notify->email('info@site.ru', '???????????? ??...', '<h1 style='font...', 'Andrii Shendiuk...', 'Andrii Shendiuk...') #5 /home/puma1639/public_html/view/FeedbackView.php(51): Notify->email_feedback_admin(275) #6 /home/puma1639/publi in /home/puma1639/public_html/api/lib/classes/Swift/Transport/StreamBuffer.php on line 269
 

Изменено: Axotn1k, 20.05.2016 - 10:45


#18 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 20.05.2016 - 10:50


'Connection could not be established with host smtp.yandex.ru [Connection timed out #110]'
 


Это уже ошибка другая. Ошибка не от скрипта, а от соединения со сторонним сервером.
Возможно, дело в настройках хостинга...
Или в неверном логине-пароле (если Вы их задавали)...

#19 Axotn1k

Axotn1k
  • Пользователь
  • 83 сообщений
  • Дизайн
  • Откуда:Украина, Киев

Опубликовано 20.05.2016 - 11:17

Это уже ошибка другая. Ошибка не от скрипта, а от соединения со сторонним сервером.
Возможно, дело в настройках хостинга...
Или в неверном логине-пароле (если Вы их задавали)...

Спасибо, оказалось хостер закрыл доступ к серверу smtp.yandex.ru

написал в саппорт, открыли доступ, и все рабортает!



#20 Axotn1k

Axotn1k
  • Пользователь
  • 83 сообщений
  • Дизайн
  • Откуда:Украина, Киев

Опубликовано 27.05.2016 - 09:42

Такой вопрос, как сделать чтобы письмо приходило на почту от имени емейла который указал пользователь в контактной форме, чтобы на него можно было ответить, сейчас приходит от имени сайту, отвечаю сам себе.

 

В настройках стоит:

 

    ->setFrom(array('info@site.ru' => 'Описание сайта'))





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых