Автор Тема: Почтовые уведомления о заказе и Prestapress  (Прочитано 21293 раз)

05 Май 2014, 11:19:59
Ответ #60
  • Гость
Спасибо за файлы, но не помогло.

Через SMTP письма доходили, но хостинг из соображений безопасности закрыл SMTP. настроил php mail - всё работало, но случайно заметил, что не всем доходят письма. Бадался с хостонгом, но они  создали тестовый скрипт masite.by/test.php с указанием поля from: длинное имя на русском языке, вроде всё проходит, и хостинг сказал - ищите ограничения при отправке через php mail
 

Очень жаль-(( Если найду еще что-то полезное - напишу вам. Я в первом письме сделала пересылку письмо от помощника, там есть его адрес. Может ему напишете? Возможно у него будут еще какие-то наработки.
05 Май 2014, 17:14:49
Ответ #61
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Добавьте функцию ограничение фио по длинне до 22 символов.
05 Май 2014, 17:35:52
Ответ #62
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Я отправляю все заказы почтой, а там требуют по возможности полные ФИО - а у нас фамилии и имена не китайские и втиснуть в 22 символа не получается. Ограничения по длине имени и фамилии по умолчанию в Prestashop установлены по 32 символа каждый, а стандартные ограничения длины имени при отправке любых писем 64 символа, т.е. всё должно работать.
При написании того-же имени отчества и фамилии латиницей письма доходят, значит ограничения по кириллице.
Какие файлы отвечают за отправку писем? Где-то наверное отсутствует utf-8 и из-за этого не проходит на русском?
05 Май 2014, 19:01:07
Ответ #63
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Цитировать
Служебная информация (такая как поля "от кого", "тема" ...) меняется в function Send() класса Mail.
class Mail
{
static public function Send($id_lang, $template, $subject, $templateVars, $to, $toName = NULL, $from = NULL, $fromName = NULL, $fileAttachment = NULL, $modeSMTP = NULL, $templatePath = _PS_MAIL_DIR_)
{
$configuration = Configuration::getMultiple(array('PS_SHOP_EMAIL', 'PS_MAIL_METHOD', 'PS_MAIL_SERVER', 'PS_MAIL_USER', 'PS_MAIL_PASSWD', 'PS_SHOP_NAME', 'PS_MAIL_SMTP_ENCRYPTION', 'PS_MAIL_SMTP_PORT', 'PS_MAIL_METHOD', 'PS_MAIL_TYPE'));
if(!isset($configuration['PS_MAIL_SMTP_ENCRYPTION'])) $configuration['PS_MAIL_SMTP_ENCRYPTION'] = "off";
if(!isset($configuration['PS_MAIL_SMTP_PORT'])) $configuration['PS_MAIL_SMTP_PORT'] = "default";

if (!isset($from)) $from = $configuration['PS_SHOP_EMAIL'];
if (!isset($fromName)) $fromName = $configuration['PS_SHOP_NAME'];
Еще в  /modules/mailalerts/myalerts.php
06 Май 2014, 10:02:37
Ответ #64
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Я посмотрел, у меня в mail.php всё так и есть, иначе письма не уходили бы вообще.
Здесь проблема в чем-то другом. Я вообще не знаю где искать проблему.

06 Май 2014, 10:14:49
Ответ #65
  • Фрилансер
  • *
  • Сообщений: 132
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Проблема в хостинге, у каждого хостера свои взгляды на безопасность. Вот что пишут.
Цитировать
Как известно протокол SMTP не подразумевает никаких средств защиты от спама и аутентификации пользователя, поэтому крупными и не очень компаниями были придуманы «фиксы» безопасности протокола.
06 Май 2014, 10:18:35
Ответ #66
  • Фрилансер
  • *
  • Сообщений: 132
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если проблемы с хостером, не разрешает smtp, то можно использовать google.
06 Май 2014, 10:20:10
Ответ #67
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
06 Май 2014, 10:40:07
Ответ #68
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Это пробывали:
Цитировать
Change
$to_list->addTo($addr, $to_name);into
$to_list->addTo($addr, base64_encode($to_name));and then the second line to be modified
Change
$to = new Swift_Address($to, $to_name);Into
$to = new Swift_Address($to, base64_encode($to_name));
06 Май 2014, 11:14:38
Ответ #69
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Первую запись изменил - не помогло, второю строку в mail.php не нашел, может не там искал?
07 Май 2014, 00:24:35
Ответ #70
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
А как вообще убрать имя пользователя из поля "кому", а оставить только адрес e-mail. В тексте письма ФИО пользователя есть всегда, я думаю, что этим я решу свою проблему.
07 Май 2014, 10:20:28
Ответ #71
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Удалить имя из переменных от кого и кому можно в файле /classes/Mail.php

Поле от кого - from_name
// Sending an e-mail can be of vital importance for the merchant, when his password is lost for example, so we must not die but do our best to send the e-mail
if (!isset($from) || !Validate::isEmail($from))
$from = $configuration['PS_SHOP_EMAIL'];
if (!Validate::isEmail($from))
$from = null;
// $from_name is not that important, no need to die if it is not valid
if (!isset($from_name) || !Validate::isMailName($from_name))
$from_name = $configuration['PS_SHOP_NAME'];
if (!Validate::isMailName($from_name))
$from_name = null;

Поле кому - to_name
/* Construct multiple recipients list if needed */
$to_list = new Swift_RecipientList();
if (is_array($to) && isset($to))
{
foreach ($to as $key => $addr)
{
$addr = trim($addr);
if (!Validate::isEmail($addr))
{
Tools::dieOrLog(Tools::displayError('Error: invalid e-mail address'), $die);
return false;
}
if (is_array($to_name))
{
if ($to_name && is_array($to_name) && Validate::isGenericName($to_name[$key]))
$to_name = $to_name[$key];
}
if ($to_name == null || $to_name == $addr)
$to_name = '';
else
{
if (function_exists('mb_encode_mimeheader'))
$to_name = mb_encode_mimeheader($to_name, 'utf-8');
else
$to_name = self::mimeEncode($to_name);
}
$to_list->addTo($addr, $to_name);
}
$to_plugin = $to[0];
} else {
/* Simple recipient, one address */
$to_plugin = $to;
if ($to_name == null || $to_name == $to)
$to_name = '';
else
{
if (function_exists('mb_encode_mimeheader'))
$to_name = mb_encode_mimeheader($to_name, 'utf-8');
else
$to_name = self::mimeEncode($to_name);
}
$to_list->addTo($to, $to_name);
}

Формирование заголовка
/* Send mail */
$send = $swift->send($message, $to, new Swift_Address($from, $from_name));

Отправка сообщений о заказе и т.д.
public static function Send($id_lang, $template, $subject, $template_vars, $to, $to_name = null, $from = null, $from_name = null, $file_attachment = null, $mode_smtp = null, $template_path = _PS_MAIL_DIR_, $die = false, $id_shop = null, $bcc = null)

Можно сделать так, как происходит отправка тестового сообщения. В нем нет имени в полях от кого и кому.
public static function sendMailTest($smtpChecked, $smtpServer, $content, $subject, $type, $to, $from, $smtpLogin, $smtpPassword, $smtpPort = 25, $smtpEncryption)
07 Май 2014, 17:19:47
Ответ #72
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем спасибо за помощь.
Может кому пригодится: Проблему решил так - значениям поля "кому" в исходящих письма вместо ФИО присвоил "пробел"  ( $to_name = ' ')
т.к. ФИО всегда пишется в теле письма, то дублировать его в поле "кому" в принципе не обязательно
24 Октябрь 2014, 19:02:23
Ответ #73
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем спасибо за помощь.
Может кому пригодится: Проблему решил так - значениям поля "кому" в исходящих письма вместо ФИО присвоил "пробел"  ( $to_name = ' ')
т.к. ФИО всегда пишется в теле письма, то дублировать его в поле "кому" в принципе не обязательно
А в какой строке вы это сделали?
20 Январь 2016, 18:56:35
Ответ #74
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ребята, та же проблема! Версия 1.6.1.3. Письма то уходят корректно, то с ошибкой: A message that you sent contained one or more recipient addresses that were
incorrectly constructed. Кто решил проблему в данной версии, помогите пожалуйста!