AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.02.2012, 11:49   #1  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
И снова проблема с кодировкой русских email в Ax2009
Коллеги, есть проблема с отправкой email из MS Dynamics Ax 2009. Письма на русском языке, посылаемые из Аксапты выглядят странно: тема сообщения отображается странно, а вот тело - дрякозяблами.
Эту тему я читал, не помогло.
Если попробовать создать шаблон email сообщения на русском языке - при сохранении нас радостно встречают либо вопросительные знаки либо опять же дрякозяблы. Буду рад помощи, сам уже закопался.

Axapta 2009, SP1 работает с MS SQL Server, AOS поднят на Windows 7 64 bit.
Старый 28.02.2012, 13:18   #2  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
mikki_messer, AOS развёрнут на физическом сервере или виртуальном ?
__________________
Дмитрий
Старый 28.02.2012, 13:41   #3  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Damn, на физическом. Это тестовый сервер - фактически, это моя рабочая станция.
Старый 28.02.2012, 14:32   #4  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
каким программным кодом отсылаются письма ? на стороне сервера или клиента код выполняется ?
__________________
Дмитрий
Старый 28.02.2012, 15:05   #5  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Damn, пробовал разные варианты:
например
X++:
static void SendMail(container _toAddr, str _subject, str _body, container _attacments)
{
    SysMailer       mailer = new SysMailer();
    SysUserInfo     users = SysUserInfo::find();
    SysEmailParameters parameters;

    int i;
    ;
    mailer.fromAddress(users.Email);


    for (i = 1; i <= conlen(_toAddr); i++)
        mailer.tos().appendAddress(conpeek(_toAddr, i));

    for (i = 1; i <= conlen(_attacments); i++)
        mailer.attachments().add(conpeek(_attacments, i));

    mailer.subject(_subject);

    mailer.htmlBody(_body);



    parameters = SysEmailParameters::find();

    mailer.SMTPRelayServer(parameters.SMTPRelayServerName, parameters.SMTPPortNumber,parameters.SMTPUserName,SysEmailParameters::password(),parameters.NTLM);


    mailer.sendMail();
}
Или
X++:
static void TestMailBatch(Args _args)
{
    SysEmailBatch   SysEmailBatch;
    ;
    SysEmailBatch = new SysEmailBatch();
    SysEmailBatch.parmEmailAddr("im@mail.ru");
    SysEmailBatch.parmMessageBody("test");
    SysEmailBatch.parmSenderAddr("test@mail.ru");
    SysEmailBatch.sendToBatch("mail");
    SysEmailBatch.run();
}
Выполнял на клиенте. Это важно?
Старый 28.02.2012, 17:04   #6  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
А если в первом варианте добавить строчку :
X++:
mailer.bodyCharSet('UTF-8');
и выполнить на стороне клиента ?
Во втором варианте такая строчка уже есть, но класс SysEmailBatch выполняется на сервере.
Что-то мне кажется что проблема тут в Windows 7. Не пробовал я ещё использовать АОС в такой операционке.
__________________
Дмитрий
Старый 28.02.2012, 17:14   #7  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Увы, тогда не компилируется. В 2009-й ахапке такого свойства у SysMailer нет
Старый 28.02.2012, 17:36   #8  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Очень странно. Я привёл кусочек кода как раз из Ax2009.
__________________
Дмитрий
Старый 28.02.2012, 18:34   #9  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Смотрели эту тему?
__________________
Ivanhoe as is..
Старый 28.02.2012, 23:53   #10  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Damn, похоже, у меня не хватает какого-то обновления?
У вас точно
X++:
mailer.bodyCharSet('UTF-8');
- задаётся для SysMailer? Или там какой-то его потомок используется?
Старый 28.02.2012, 23:54   #11  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Смотрели эту тему?
Спасибо за ссылку, в редакторе действительно была эта проблема. Теперь в редакторе всё хорошо, но при отправке по-прежнему всё плохо - сплошные дрякозяблы
Старый 29.02.2012, 06:47   #12  
kaw is offline
kaw
Участник
 
122 / 35 (2) +++
Регистрация: 23.03.2004
Адрес: Новосибирск
посмотрите след.темы:

Снова о кракозябрах в сообщениях эл.почты
Ax4: Баг в \Classes\SysMailer\bodyCharSet

или классы SysEmail*
например SysEmailDistributor.processEmails

у меня Ax 4.0, приведенные выше примеры работают... может проблема не с АХ, а с настройками почтовика.
Удачи.

Последний раз редактировалось kaw; 29.02.2012 в 06:58.
За это сообщение автора поблагодарили: mikki_messer (1).
Старый 29.02.2012, 08:02   #13  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от mikki_messer Посмотреть сообщение
Damn, похоже, у меня не хватает какого-то обновления?
У вас точно
X++:
mailer.bodyCharSet('UTF-8');
- задаётся для SysMailer? Или там какой-то его потомок используется?
Я не знаю точно в каком обновлении это исправили. У себя я без обновлений добавлял этот метод в класс SysMailer вручную .
Вот так он выглядит у меня:
X++:
// AX2009
public str bodyCharSet(str arg='')
{
    Com comBodyPart = _com.BodyPart();
    ;

    if (!prmIsDefault(arg))
        comBodyPart.CharSet(arg);

    return comBodyPart.CharSet();
}

Для централизованной смены кодировки у себя использую вот этот способ Снова о кракозябрах в сообщениях эл.почты. С единственным отличием вместо "koi8r" использую "Windows-1251". Работает!

Последний раз редактировалось S.Kuskov; 29.02.2012 в 08:14.
За это сообщение автора поблагодарили: mikki_messer (1).
Старый 29.02.2012, 11:18   #14  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Я не знаю точно в каком обновлении это исправили. У себя я без обновлений добавлял этот метод в класс SysMailer вручную .
Вот так он выглядит у меня:
X++:
// AX2009
public str bodyCharSet(str arg='')
{
    Com comBodyPart = _com.BodyPart();
    ;

    if (!prmIsDefault(arg))
        comBodyPart.CharSet(arg);

    return comBodyPart.CharSet();
}

Для централизованной смены кодировки у себя использую вот этот способ Снова о кракозябрах в сообщениях эл.почты. С единственным отличием вместо "koi8r" использую "Windows-1251". Работает!
Спасибо, то, что надо!
Старый 07.09.2015, 17:10   #15  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Столкнулся на днях снова с кракозябрами в письмах.
Ax2009 SP1 HFR5. Отправка писем через стандартный класс SysMailer, то есть через COM-объект 'CDO.Message'.
Кракозябры появились в письмах у пользователей, чьи почтовые ящики находятся на почтовом сервере с Exchange 2013. CDO.Message и Exchange 2013 - не совместимы ?
Если отправлять письма через System.Net.Mail.SmtpClient, то с символами проблем нет. В Ax2012 смотрю CDO.Message уже не используется.
__________________
Дмитрий
Старый 07.09.2015, 19:56   #16  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Не знаю на счет совместимости CDO.Message и MS Exchange 2013, не сталкивался, но в целом ничто не мешает переписать SysMailer на использование System.Net.Mail.SmtpClient, см. готовый пример здесь: Почту перевели на outlook.office365.com. SysMailer стал бесполезен?
Старый 07.09.2015, 22:09   #17  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Я думаю, что готовый пример можно взять и из Ax2012, там же есть класс SysMailerNET. Интересна была именно совместимость CDO.Message и Exchange 2013.
__________________
Дмитрий
Старый 09.09.2015, 09:28   #18  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Понял в чём проблема. Совместимость тут ни при чём.
Кракозябры возникали в письмах, рассылаемых классом EventNotificationBatch.
А в нём явного вызова mailer.bodyCharSet('UTF-8') нет, в отличии от классов SysEmailBatch и SysEmailDistributor. Даже в HotfixRollup 8.
Exchange 2010 это проглатывал, а Exchange 2013 уже нет.
__________________
Дмитрий
За это сообщение автора поблагодарили: trud (2), gl00mie (3).
Теги
email, кодировка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с выгрузкой отчетов Reporting Services в AX2009 oleg_e DAX: Администрирование 14 18.01.2012 19:08
Проблема с возвратом AX2009 RU 5.0.1500.4750.11 Shmel_83 DAX: Функционал 9 01.11.2011 15:27
Проблема после установки AX2009 RU7 Cheslav DAX: Администрирование 19 15.08.2011 09:29
Ax2009 AIF: Проблема с Custom Service Aif Marina Konevskih DAX: Программирование 3 07.06.2010 08:45
Проблема при импорте Форм из AX2009 в 4.0 rusalaudinov DAX: Программирование 5 14.03.2010 15:40

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:56.