11.02.2016, 12:49 | #1 |
Участник
|
Проблема отправки email на адреса с кириллицей (Ax2009)
При попытке отправки почты из Ax (версия 2009) с использованием встроенного класса SysMailer возникает ошибка при указании адреса электронной почты на кириллице (например user@компания.рф)
Получаем ошибку 501 5.1.3 Invalid Address. SysMailer использует для отправки COM объект "CDO.Message". Кто нибудь сталкивался с проблемой ? У меет ли вообще "CDO.Message" отправлять птсьма на адреса электронной почты на кириллице ? Какие варианты решения проблемы ? Переводить отправку на NET ? Подскажите, какую библиотеку отправки почты используют в AX2012 ? |
|
11.02.2016, 13:44 | #2 |
Участник
|
В AX2012 SysMailer остался без изменений. Перевести отправку на .NET довольно просто, вот тут был готовый пример.
|
|
|
За это сообщение автора поблагодарили: someOne (3). |
11.02.2016, 15:15 | #3 |
Участник
|
Спасибо. Проверил этот способ.
Вот в этом месте X++: mailAddressCollection = mailMessage.get_To(); try { mailAddressCollection.Add(mailTo); } catch { error(aifUtil::getClrErrorMessage()); } The specified string is not in the form required for an e-mail address. Похоже эта штука тоже не работает с кириллицей. Стоит отметить что через outlook письма на эти адреса - отправляются! |
|
11.02.2016, 15:26 | #4 |
Дмитрий Ерин
|
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 | #5 |
Участник
|
В продолжении темы.
Действительно, предложенный способ конвертации, похоже, помогает решить проблему X++: System.Globalization.IdnMapping idn; str ret; ; try { idn = new System.Globalization.IdnMapping(); ret = idn.GetAscii("письмо.рф"); } catch { error(AifUtil::getClrErrorMessage()); } 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 | #6 |
Участник
|
В итоге, проблему решил таким образом:
- создать новую статичную функцию преобразования кириллических доменов в 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; } 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 + ']'; } ... |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
28.02.2016, 18:36 | #7 |
Дмитрий Ерин
|
Если это не "образец", а окончательная редакция кода, то не забудьте про .рус, .укр, .бел, .москва, .дети, .сайт, .онлайн и т.д. Полный список наверно можно нагуглить где-нить на сайте ICANN, а с учетом того, что домены первого уровня теперь продают почти всем желающим, может быть стоит сделать более универсальную проверку на кириллицу? Или вообще не делать, ведь латиница в Punycode остается без изменений...
|
|
|
За это сообщение автора поблагодарили: someOne (5). |
Теги |
email кириллицей, кирилица |
|
|