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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.02.2016, 15:26   #1  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
IdnMapping
X++:
// The example displays the following output:
//    bücher.com --> xn--bcher-kva.com --> bücher.com
//    Original: U+0062 U+00FC U+0063 U+0068 U+0065 U+0072 U+002E U+0063 U+006F U+006D
//    Restored: U+0062 U+00FC U+0063 U+0068 U+0065 U+0072 U+002E U+0063 U+006F U+006D
//    
//    мойдомен.рф --> xn--d1acklchcc.xn--p1ai --> мойдомен.рф
//    Original: U+043C U+043E U+0439 U+0434 U+043E U+043C U+0435 U+043D U+002E U+0440 U+0444
//    Restored: U+043C U+043E U+0439 U+0434 U+043E U+043C U+0435 U+043D U+002E U+0440 U+0444
//
__________________
За это сообщение автора поблагодарили: AlGol (2), Damn (2), someOne (3).
Старый 16.02.2016, 13:26   #2  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
В продолжении темы.

Действительно, предложенный способ конвертации, похоже, помогает решить проблему

X++:
    System.Globalization.IdnMapping         idn;
    str ret;
    ;
    try
    {
        idn = new System.Globalization.IdnMapping();
        ret = idn.GetAscii("письмо.рф");
    }
    catch
    {
        error(AifUtil::getClrErrorMessage());
    }
На выходе получаем "xn--h1aigbl0e.xn--p1ai", после чего этот адрес уже можно передавать функции

X++:
mailAddressCollection.Add(mailTo);

Это все имеет смысл делать для NET3.5 (Ax2009)

В более поздних версиях NET (4.5 например) этой конвертации не требуется - функция mailAddressCollection.Add принимает на вход кириллицу без конвертации (видимо конвертацию встроили внутрь)

В результате выясняется, что ошибка " 501 5.1.3 Invalid Address." является, скорее всего ошибкой, возвращаемой используемым SMTP сервером, а не почтовым клиентом, используемым в Ax.

По крайней мере, в итоге оба варианта (NET и COM "CDO.Message") возвращают одну и ту же ошибку.

Будем обновлять (менять) SMTP сервер...
За это сообщение автора поблагодарили: Ruff (2).
Старый 28.02.2016, 16:55   #3  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
В итоге, проблему решил таким образом:

- создать новую статичную функцию преобразования кириллических доменов в email адресах

X++:
// Преобразовать email содержащий кириллические символы в домене получателя
static client server str convertEmailCyr(str _email)
{
    int     pos;
    str     domain;
    str     user;
    str     ret;
    System.Globalization.IdnMapping         idn;
    int     len;
    ;
    len = strLen(_email);

    if (subStr(_email, len - 1, 2) != "рф")
        return _email;

    pos = strfind(_email, "@", 1, len);

    if (pos == 0)
        return _email; // это странно

    user = subStr(_email, 1, pos - 1);

    domain = subStr(_email, pos + 1, len - pos);

    new InteropPermission(InteropKind::ClrInterop).assert();

    try
    {
        idn = new System.Globalization.IdnMapping();
        domain = idn.GetAscii(domain);
    }
    catch
    {
        return _email;
    }


    ret = strFmt("%1@%2", user, domain);

    return ret;
}
- далее вставить эту функцию в метод класса SysMailerAddressField
X++:
// Add item to the collection
void appendAddress(str addr, str name='')
{
    str address;
    str addresses;
    ;
    // new
    addr = convertEmailCyr(addr);

    if (prmisdefault(name))
    {
        address = addr;
    }
    else
    {
        address = name + '[' + addr + ']';
    }

...
После чего почту можно отправлять на кириллические адреса из AX2009
За это сообщение автора поблагодарили: gl00mie (2).
Старый 28.02.2016, 18:36   #4  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от someOne Посмотреть сообщение
if (subStr(_email, len - 1, 2) != "рф")
return _email;
Если это не "образец", а окончательная редакция кода, то не забудьте про .рус, .укр, .бел, .москва, .дети, .сайт, .онлайн и т.д. Полный список наверно можно нагуглить где-нить на сайте ICANN, а с учетом того, что домены первого уровня теперь продают почти всем желающим, может быть стоит сделать более универсальную проверку на кириллицу? Или вообще не делать, ведь латиница в Punycode остается без изменений...
За это сообщение автора поблагодарили: someOne (5).
Теги
email кириллицей, кирилица

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
И снова проблема с кодировкой русских email в Ax2009 mikki_messer DAX: Программирование 17 09.09.2015 09:28
emeadaxsupport: Sending email notifications for Retail orders [AX 2012 R2 and R3] Blog bot DAX Blogs 0 17.03.2015 00:11
Проверка корректности формата SMTP-адреса email gl00mie DAX: Программирование 1 11.03.2013 16:51
Проблема с выгрузкой отчетов Reporting Services в AX2009 oleg_e DAX: Администрирование 14 18.01.2012 19:08
Проверка существования email-адреса в Active Directory через ADSI gl00mie DAX: Программирование 0 13.01.2012 15:19

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

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

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