Автор Тема: Ошибка отправки contact-form  (Прочитано 4828 раз)

17 Июнь 2016, 16:46:34
Ответ #30
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
<?php
ini_set
('display_errors''On');
error_reporting(E_ALL); 

require(
dirname(__FILE__).'/config/config.inc.php');
include_once(
_PS_SWIFT_DIR_.'swift_required.php');

$smtp_server '';
$smtp_port ''// 25
$smtp_encryption false// true
$smtp_login '';
$smtp_password '';
$content 'Here is the message.';
$subject 'Message subject'
//array('receiver@domain.org', 'other@domain.org' => 'A name')
$to 'other@domain.org';
//array('john@doe.com' => 'John Doe')
$from 'john@doe.com';

// Create the Transport
$transport Swift_SmtpTransport::newInstance($smtp_server$smtp_port)
  ->
setUsername($smtp_login)
  ->
setPassword($smtp_password);

/*
You could alternatively use a different transport such as Sendmail or Mail:

// Sendmail
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');

// Mail
$transport = Swift_MailTransport::newInstance();
*/

// Create the Mailer using your created Transport
$mailer Swift_Mailer::newInstance($transport);

// Create a message
$message Swift_Message::newInstance($subject)
  ->
setFrom($from)
  ->
setTo($to)
  ->
setContentType("text/html; charset=UTF-8")
  ->
setBody($content'text/html')
  ;

// Send the message
if ($mailer->send($message$failures))
{
echo "Sent";
}
else
{
echo "Failures:";
print_r($failures);
}
?>

Для проверки отправки почты, сохраняете в файл в корне сайта, например, mail.php. Меняте переменные "smtp_", "to", "from" на свои данные. Открываете этот файл в браузере. Если почта не уходит, проверяете лог ошибок сайта.
Cоздание интернет сайтов Webstudio UwK
17 Июнь 2016, 18:23:32
Ответ #31
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
Виталий

Спасибо, но данный скрипт отправляет сообщения, подобно mail(), но мне нужна отправка только по SMTP.

coder

Про обратную зону интересно.

 Есть новая вводная. Засниффил сессию, выяснились любопытные детали.
...
 SSL 277 Client Hello
 TLSv1 1484 Server Hello
 190 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
 322 New Session Ticket, Change Cipher Spec, Encrypted Handshake Message
 189 Application Data
 146 Application Data,
 189 Application Data
 TLSv1 93 Encrypted Alert
 
TCP 56 465 Б├▓ 15670 [ACK] Seq=4555 Ack=1072 Win=7504 Len=0 TSval=4251498818 TSecr=9336018
TCP 56 465 Б├▓ 15670 [FIN, ACK] Seq=4555 Ack=1072 Win=7504 Len=0 TSval=4251498818 TSecr=9336018


Вывод - ошибка шифрования на уровне приложения.  Выполнен приём ключа, создан билет сессии, начат обмен данными на уровне приложений..... но какая-то ошибка на стороне Prestashop,  FIN, ACK от сервера.

Что могло вызвать ошибку? Проблема с буферизацией? .... мрак.
18 Июнь 2016, 10:43:57
Ответ #32
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
Виталий
Спасибо, но данный скрипт отправляет сообщения, подобно mail(), но мне нужна отправка только по SMTP.
Это и есть имитация отправки почты с помощью библиотеки SwiftMailer (все как в prestashop) по своим параметрам SMTP сервера, только без учета ошибок в самой cms prestashop.
Отправка прошла без ошибок, значит проблема в системных файлах prestashop, отправка не прошла, проблема в используемой библиотеки SwiftMailer. Ошибки сервера сохраняются в логе ошибок сайта. После тестирования сразу будет ясно в каком направлении двигаться.
Cоздание интернет сайтов Webstudio UwK
18 Июнь 2016, 13:49:30
Ответ #33
  • Фрилансер
  • *
  • Сообщений: 140
  • Репутация: +2/-1
  • Сообщество PrestaShop
    • Просмотр профиля
<?php
ini_set
('display_errors''On');
error_reporting(E_ALL); 

require(
dirname(__FILE__).'/config/config.inc.php');
include_once(
_PS_SWIFT_DIR_.'swift_required.php');

$smtp_server '';
$smtp_port ''// 25
$smtp_encryption false// true
$smtp_login '';
$smtp_password '';
$content 'Here is the message.';
$subject 'Message subject'
//array('receiver@domain.org', 'other@domain.org' => 'A name')
$to 'other@domain.org';
//array('john@doe.com' => 'John Doe')
$from 'john@doe.com';

// Create the Transport
$transport Swift_SmtpTransport::newInstance($smtp_server$smtp_port)
  ->
setUsername($smtp_login)
  ->
setPassword($smtp_password);

/*
You could alternatively use a different transport such as Sendmail or Mail:

// Sendmail
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');

// Mail
$transport = Swift_MailTransport::newInstance();
*/

// Create the Mailer using your created Transport
$mailer Swift_Mailer::newInstance($transport);

// Create a message
$message Swift_Message::newInstance($subject)
  ->
setFrom($from)
  ->
setTo($to)
  ->
setContentType("text/html; charset=UTF-8")
  ->
setBody($content'text/html')
  ;

// Send the message
if ($mailer->send($message$failures))
{
echo "Sent";
}
else
{
echo "Failures:";
print_r($failures);
}
?>

Для проверки отправки почты, сохраняете в файл в корне сайта, например, mail.php. Меняте переменные "smtp_", "to", "from" на свои данные. Открываете этот файл в браузере. Если почта не уходит, проверяете лог ошибок сайта.

То что нужно. Не мог понять почему у меня почта не работает после обновления престашоп. Страно что путь к Swift у меня такой - /tools/swift/Swift/Swift.php. Я так понимаю, что с ним и была проблема, так как когда заменил на такой   - /tools/swift/swift_required.php, то ошибок нестало.
Это в престе так намудрили или только у меня такие проблемы?
18 Июнь 2016, 16:30:15
Ответ #34
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
Виталий

Ясно, спасибо за пояснение, проверю.
Однако, причём тут библиотеки? Соединение то устанавливается, обмен данными идёт..... библиотека здесь явно ни причём. Ошибка шифрования - вот причина.
Думаю, с новыми алгоритмами или протоколами шифрования проблема..... STARTTLS и всё такое.
 
А скрипт Ваш в какой версии Престашоп должен работать? Случайно не в 1.5? Ему ведь класс Swift_SmtpTransport нужен, а в 1.6 его нет и быть не должно.   
19 Июнь 2016, 11:29:18
Ответ #35
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Swift_SmtpTransport есть в Prestashop версии 1.6

Prestashop 1.6 класс /classes/Mail.php
$connection = Swift_SmtpTransport::newInstance($configuration['PS_MAIL_SERVER'], $configuration['PS_MAIL_SMTP_PORT'], $configuration['PS_MAIL_SMTP_ENCRYPTION'])
                    ->setUsername($configuration['PS_MAIL_USER'])
                    ->setPassword($configuration['PS_MAIL_PASSWD']);
19 Июнь 2016, 11:46:26
Ответ #36
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
DarinSr
Странно, у меня вместо этого
$connection = new Swift_Connection_SMTP.......
Версия Prestashop 1.6.0.14
-------------------------------------------------------
У Prestashop действительно была проблема со STARTTLS, но исправлена ли она? Поддерживаются ли новые протоколы шифрования?
https://www.prestashop.com/forums/topic/451298-non-starttls-email-service-to-use-with-presta-smtp/

Думаю, проблема не решена и способ решить её один - хостовый SMTP сервер.

19 Июнь 2016, 11:59:33
Ответ #37
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
У вас в /tools/swift/ какие файлы и папки?
19 Июнь 2016, 12:39:42
Ответ #38
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Версия Prestashop 1.6.0.14
-------------------------------------------------------
У Prestashop действительно была проблема со STARTTLS, но исправлена ли она? Поддерживаются ли новые протоколы шифрования?
https://www.prestashop.com/forums/topic/451298-non-starttls-email-service-to-use-with-presta-smtp/

Думаю, проблема не решена и способ решить её один - хостовый SMTP сервер.
На этом же форуме, только во фр. версии ответ по этой проблеме
Цитировать
Le problème vient de la très vieille version de swiftmailer 3.3.2 qui date d'octobre 2007 qui ne sait pas gérer TLS.
La solution est de mettre la dernière version de swiftmailer et de modifier le fichier /classes/Mail.php pour tenir compte de la dernière version de swiftmailer.
....
La version 1.6.5 inclut la dernière version de swiftmailer 5.x
Par conséquent mon fix n'est plus nécessaire.
Mettez à jour votre prestashop et le TLS marchera.
Обновить нужно swiftmailer. Кстате в prestashop 1.6.1.5 это наконец-то сделали. Полностью сменили стуртуру swiftmailer и обновили саму библиотеку. Не понятно только почему не до последней версии, пятая но не последний релиз. Хотя можно и самому обновить.
Вывод, нужно обновлять prestashop и проблем не будет.
19 Июнь 2016, 13:19:08
Ответ #39
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
Виталий
Ясно, спасибо за пояснение, проверю.
Однако, причём тут библиотеки? Соединение то устанавливается, обмен данными идёт..... библиотека здесь явно ни причём. Ошибка шифрования - вот причина.
Думаю, с новыми алгоритмами или протоколами шифрования проблема..... STARTTLS и всё такое.
А скрипт Ваш в какой версии Престашоп должен работать? Случайно не в 1.5? Ему ведь класс Swift_SmtpTransport нужен, а в 1.6 его нет и быть не должно.
Этот код для версии prestashop 1.6.1.5. Только с этой версии можно использовать
include_once(_PS_SWIFT_DIR_.'swift_required.php');В более ранних версиях нужно скачать swiftmailer 5.x, распаковать в корень сайта и заменить путь к файлу swift_required.php.

Проблемы с STARTTLS как раз из-за устаревшей библиотеки swiftmailer. Это она отвечает за возможности использования различных методов шифрования при отправки почты.

Вам нужно обновить Prestashop до версии 1.6.1.6.
Cоздание интернет сайтов Webstudio UwK
20 Июнь 2016, 12:19:11
Ответ #40
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
Adik
Виталий

Спасибо, попробую. Опасаюсь, что https слетит...... но это не смертельно.