Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

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

 

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

Качаем swiftmailer https://github.com/swiftmailer/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 месяца спустя...

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

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

 

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

Качаем swiftmailer https://github.com/swiftmailer/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 в качестве отправки писем.

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

Отправляю письма через 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)

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

Отправляю письма через 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
Ссылка на сообщение
Поделиться на другие сайты

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

$simpla->notify->settings->notify_from_email

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

$simpla->settings->notify_from_email

 

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

 

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

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

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

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

 


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

 

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

Ссылка на сообщение
Поделиться на другие сайты

Посадил ошибку в файле 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
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

 

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

 

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

 

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

{

.................

.................

.................

.................

}

 

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

{

.................

.................

.................

.................

}

 

 

 

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

 

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
Ссылка на сообщение
Поделиться на другие сайты

 

 

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

 

 

Это уже ошибка другая. Ошибка не от скрипта, а от соединения со сторонним сервером.

Возможно, дело в настройках хостинга...

Или в неверном логине-пароле (если Вы их задавали)...

Ссылка на сообщение
Поделиться на другие сайты

Это уже ошибка другая. Ошибка не от скрипта, а от соединения со сторонним сервером.

Возможно, дело в настройках хостинга...

Или в неверном логине-пароле (если Вы их задавали)...

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

    ->setFrom(array('info@site.ru' => 'Описание сайта'))
Ссылка на сообщение
Поделиться на другие сайты

Как раз про этот недостаток и написано в #9.


Попробуйте поменять

    ->setFrom('my@example.com')

на

    ->setFrom($from)

 

Еще можно пробовать менять поле ReplyTo...

Ссылка на сообщение
Поделиться на другие сайты

Как раз про этот недостаток и написано в #9.

 

Попробуйте поменять

    ->setFrom('my@example.com')

на

    ->setFrom($from)

 

Еще можно пробовать менять поле ReplyTo...

Уже менял так, ошибку выдает при отправке.

 

 

Fatal error: Uncaught exception 'Swift_RfcComplianceException' with message 'Address in mailbox given

Изменено пользователем Axotn1k
Ссылка на сообщение
Поделиться на другие сайты

Ошибку-то КАКУЮ? Зачем экономите на написании ПОЛНОГО текста ошибки?

Извините я думала это полный текст ошибки, Вот 

 


Fatal error: Uncaught exception 'Swift_RfcComplianceException' with message 'Address in mailbox given [Andrei Shenduh <lutsk40@gmail.com>] does not comply with RFC 2822, 3.6.2.' in /home/puma1639/public_html/api/lib/classes/Swift/Mime/Headers/MailboxHeader.php:348 Stack trace: #0 /home/puma1639/public_html/api/lib/classes/Swift/Mime/Headers/MailboxHeader.php(263): Swift_Mime_Headers_MailboxHeader->_assertValidAddress('Andrei Shenduh ...') #1 /home/puma1639/public_html/api/lib/classes/Swift/Mime/Headers/MailboxHeader.php(106): Swift_Mime_Headers_MailboxHeader->normalizeMailboxes(Array) #2 /home/puma1639/public_html/api/lib/classes/Swift/Mime/Headers/MailboxHeader.php(63): Swift_Mime_Headers_MailboxHeader->setNameAddresses(Array) #3 /home/puma1639/public_html/api/lib/classes/Swift/Mime/SimpleMimeEntity.php(592): Swift_Mime_Headers_MailboxHeader->setFieldBodyModel(Array) #4 /home/puma1639/public_html/api/lib/classes/Swift/Mime/SimpleMessage.php(213): Swift_Mime_SimpleMimeEntity->_setHeaderFieldModel('From', Array) #5 /home/p in /home/puma1639/public_html/api/lib/classes/Swift/Mime/Headers/MailboxHeader.php on line 348
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

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

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...