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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.02.2013, 16:57   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
А как Вы формируете собственно письмо? В смысле, куда передаете сформированное значение переменной msg? В какой объект?

Кстати, Вы по совету mazzy посмотрели текст источника? В этом самом источнике есть перевод строк? Т.е. где произошла ошибка: при формировании письма в портале или при его чтении в почтовом клиенте?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 07.02.2013, 17:28   #2  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
А как Вы формируете собственно письмо? В смысле, куда передаете сформированное значение переменной msg? В какой объект?

Кстати, Вы по совету mazzy посмотрели текст источника? В этом самом источнике есть перевод строк? Т.е. где произошла ошибка: при формировании письма в портале или при его чтении в почтовом клиенте?
msg передается в:
mail.quickSend(name, _ecpCustSignUp.UserEmail, "@SYS98191", msg);
из класса SysMailer, но, насколько я понял, форматирует строку функция strfmt еще перед передачей в этот метод.

Исходный текст я посмотрел, но только в Аутлуке.
Он как раз нормальный.
А в mail.ru посмотреть исходный текст не получается. Не знаю как.
То есть, можно было бы сказать, что виноват почтовый клиент.
Но, ведь другие письма отображаются с форматированием, значит используются какие-то другие символы превода строки.

В Аутлуке сработал символ ручного перевода каретки, который вводится с помощью Alt+011(код символа), но в mail.ru это все-равно не работает.

Поэтому пока версия такая, что Аксапта правильно генерирует строку, но использует управляющие символы, которые не везде работают.
Стало быть, нужно найти такие символы, которые везде работают.
Если, конечно, они есть.
Старый 07.02.2013, 18:34   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Narayana Посмотреть сообщение
Вот пара строк кода, с помощью которых формируется часть текста письма: [...]В коде явно присутствуют символы перевода строки \n\n , но в пришедшем на почту письме все сообщение выводится одной строкой.
Цитата:
Сообщение от Narayana Посмотреть сообщение
msg передается в:
mail.quickSend(name, _ecpCustSignUp.UserEmail, "@SYS98191", msg);
из класса SysMailer
Исходный текст я посмотрел, но только в Аутлуке. Он как раз нормальный. То есть, можно было бы сказать, что виноват почтовый клиент.
Почтовые клиенты не виноваты, особенно mail.ru Они обычно отображают сообщения с форматированием, обычно такие сообщения приходят в формате html, Outlook вот еще rtf поддерживает, а вы, судя по всему, отправляете письмо plain text'ом. Потом почтовый клиент его преобразует, как умеет, в html-формат (потому что он заточен на отображение писем в таком формате), скармливает его HTML-компоненту или браузеру, там все ваши переводы строки пропадают - и вы получаете то, что получаете.
Не используйте quickSend и обычный текстовый формат сообщений, используйте формат html и форматируйте письма соотв. образом - тогда будут вам и переводы строк, и работающие гиперссылки:
X++:
msg = strfmt(@'<p>%1<br/>Адрес электронной почты (%2) bla-bla-bla.<br/>'
           + @'Чтобы подтвердить, щелкните по ссылке: <a href="%3">%3</a><br/>'
           + @'С наилучшими пожеланиями, <a href="mailto:%4">%4</a></p>',
             "@SYS98189", _ecpCustSignUp.UserEmail, confirmationUrl, helpdeskEmail);
За это сообщение автора поблагодарили: sukhanchik (4).
Старый 07.02.2013, 19:30   #4  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Почтовые клиенты не виноваты, особенно mail.ru Они обычно отображают сообщения с форматированием, обычно такие сообщения приходят в формате html, Outlook вот еще rtf поддерживает, а вы, судя по всему, отправляете письмо plain text'ом. Потом почтовый клиент его преобразует, как умеет, в html-формат (потому что он заточен на отображение писем в таком формате), скармливает его HTML-компоненту или браузеру, там все ваши переводы строки пропадают - и вы получаете то, что получаете.
Не используйте quickSend и обычный текстовый формат сообщений, используйте формат html и форматируйте письма соотв. образом - тогда будут вам и переводы строк, и работающие гиперссылки:
X++:
msg = strfmt(@'<p>%1<br/>Адрес электронной почты (%2) bla-bla-bla.<br/>'
           + @'Чтобы подтвердить, щелкните по ссылке: <a href="%3">%3</a><br/>'
           + @'С наилучшими пожеланиями, <a href="mailto:%4">%4</a></p>',
             "@SYS98189", _ecpCustSignUp.UserEmail, confirmationUrl, helpdeskEmail);
Ага, уже просвет ))
Но, ведь quickSend, насколько я понял, только пересылает строку, а в каком она формате, зависит только от того, как вы эту строку собрали, - plain text'ом или в html-формате? Или plain и html должны разными методами отсылаться по почте?
Старый 07.02.2013, 22:02   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Narayana Посмотреть сообщение
plain и html должны разными методами отсылаться по почте?
Да, разными. Если вы посмотрите на методы SysMailer из 4-ки или 3-ки, то увидите у него отдельно body()/bodyCharSet() и htmlBody()/htmlBodyCharSet(). В 2009-й первые два убрали, однако, COM-объект, для которого SysMailer является оберткой, от этого не изменился, он все ещё умеет отсылать текст писем plain text'ом, и метод quickSend() для обратной совместимости так их и шлет.
Старый 08.02.2013, 19:17   #6  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Да, разными. Если вы посмотрите на методы SysMailer из 4-ки или 3-ки, то увидите у него отдельно body()/bodyCharSet() и htmlBody()/htmlBodyCharSet(). В 2009-й первые два убрали, однако, COM-объект, для которого SysMailer является оберткой, от этого не изменился, он все ещё умеет отсылать текст писем plain text'ом, и метод quickSend() для обратной совместимости так их и шлет.
А можно вас попросить завершить мой ликбез?
Возможно, еще кому-то будет полезно.

Итак, что я понял...
Почтовым клиентом письмо воспринимается как в формате "текст" или как в формате "html".
При этом в шапке письма должно существовать поле Content-Type, хотя в сорсе страницы на mail.ru я такого поля в заголовке письма не вижу.

Соответственно, если мы хотим отправить письмо простым текстом, мы должны воспользоваться методом quickSend, а если хотим отправить письмо с html контентом, то методом sendMail.
Но, вот здесь с этим методом sendMail я уже ничего не понимаю, потому как вот все его содержание:

public void sendMail()
{
InteropPermission permission = new InteropPermission(InteropKind::ComInterop);
;
permission.assert();
//BP Deviation Documented
_COM.send();
}

Где COM уже системный класс.

В общем, никаких параметров, никаких полей заголовка письма и никакой документации куда че толкать.

РасскАжите как этим пользоваться?
Я так понимаю, ваш пример должен был пересылаться как раз этим методом, потому как quickSend строку с объектами html отослать-то может, но почтовые клиенты этого снова не поймут.

Кстати, если все-таки пытаться цеплять html-ные тэги в строку для quickSend, кое-что происходит. Например </br> таки переводит строку, а если расметить что-то типа полного линка, то сам линк не отображается, зато начинает отображаться следующая за ним строка, начинающаяся с "http://".
Старый 08.02.2013, 19:17   #7  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Да, разными. Если вы посмотрите на методы SysMailer из 4-ки или 3-ки, то увидите у него отдельно body()/bodyCharSet() и htmlBody()/htmlBodyCharSet(). В 2009-й первые два убрали, однако, COM-объект, для которого SysMailer является оберткой, от этого не изменился, он все ещё умеет отсылать текст писем plain text'ом, и метод quickSend() для обратной совместимости так их и шлет.
А можно вас попросить завершить мой ликбез?
Возможно, еще кому-то будет полезно.

Итак, что я понял...
Почтовым клиентом письмо воспринимается как в формате "текст" или как в формате "html".
При этом в шапке письма должно существовать поле Content-Type, хотя в сорсе страницы на mail.ru я такого поля в заголовке письма не вижу.

Соответственно, если мы хотим отправить письмо простым текстом, мы должны воспользоваться методом quickSend, а если хотим отправить письмо с html контентом, то методом sendMail.
Но, вот здесь с этим методом sendMail я уже ничего не понимаю, потому как вот все его содержание:

public void sendMail()
{
InteropPermission permission = new InteropPermission(InteropKind::ComInterop);
;
permission.assert();
//BP Deviation Documented
_COM.send();
}

Где COM уже системный класс и посмотреть че в нем нельзя.

В общем, никаких параметров, никаких полей заголовка письма и никакой документации куда че толкать.

РасскАжите как этим пользоваться?
Я так понимаю, ваш пример должен был пересылаться как раз этим методом, потому как quickSend строку с объектами html отослать-то может, но почтовые клиенты этого снова не поймут.

Кстати, если все-таки пытаться цеплять html-ные тэги в строку для quickSend, кое-что происходит. Например </br> таки переводит строку, а если расметить что-то типа полного линка, то сам линк не отображается, зато начинает отображаться следующая за ним строка, начинающаяся с "http://".
Теги
mail, почта

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Стоимость перехода с AX3.0 на АХ2009 Pustik DAX: Прочие вопросы 18 30.03.2011 16:21
функционал Работа с документами и создание договора в Word GM2005 DAX: Функционал 5 28.09.2009 14:49
В АХ2009 проблема с General Ledger->Chart of accounts AndrianG DAX: Администрирование 3 12.02.2009 13:15
Доступ к меню "Работа с документами" Kuat DAX: Администрирование 4 16.11.2007 17:07
Совместная работа заказчика и исполнителя в разных или одном слое? Кузин Владимир В. DAX: Программирование 6 08.08.2006 10:02

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

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

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