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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.08.2018, 14:17   #1  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
D365FO: Отправка eMail из кода
Доброго времени суток.
Есть необходимость написания код отправки сообщений. Думал какие проблемы, есть класс SysEmailBatch, как в AX2009 сделаю и все. Но нельзя же просто взять и отправить почту из Д-шки.
В общем при отправке сообщений падает ошибка в момент дешифровки пароля smtp:
Ошибка в методе
Global::editEncryptedField
на строке
X++:
return appl.DecryptForPurpose(_common.(_fieldId), common.encryptionPurpose(_fieldId));
Из подробностей только
Microsoft.Dynamics.Ax.Xpp.Security.EncryptionException: Encryption error occured.

Есть у кого идеи как отправлять сообщения?
Старый 28.08.2018, 14:36   #2  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Ну вот к примеру http://dev.goshoom.net/en/2016/05/ho...-code-in-ax-7/
Старый 28.08.2018, 14:40   #3  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от skuull Посмотреть сообщение
В SysEmailBatch ровно также вызываются все эти же настройки smtp и также отправляется сообщение, которое падает в ошибку.
То есть ошибка падает независимо от режима вызова отправки сообщение интерактивно или нет (с вызовом промежуточной формы для отправки сообщений или без неё, с формированием письма в коде)
Старый 29.08.2018, 08:46   #4  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Еще как показатель этой же проблемы, еще до отправки сообщений- это при открытии параметров электронной почты на вкладке параметры SMTP выдается ошибка
Неподдерживаемый тип возврата метода для метода данных passwordEdit
и ошибка Encryption error occured.
P.s. в параметрах пользователя введен логин и пароль другого пользователя (не мои данные).
При чем отправка почты через workflow работает без проблем
Старый 29.08.2018, 09:11   #5  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Попробуйте так https://dynamicsaxgyan.wordpress.com...or-operations/
Иначе придется раздавать права на отправку от имени, как указано в https://docs.microsoft.com/en-us/dyn...onfigure-email
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.

Последний раз редактировалось KiselevSA; 29.08.2018 в 09:15. Причина: Дополнительная ссылка
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 29.08.2018, 09:47   #6  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Я использовал метод sendEmail на таблице SysEmailTable. Все отлично работает.
Старый 31.08.2018, 01:53   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от IvanS Посмотреть сообщение
В общем при отправке сообщений падает ошибка в момент дешифровки пароля smtp: Ошибка в методе Global::editEncryptedField на строке
X++:
return appl.DecryptForPurpose(_common.(_fieldId), common.encryptionPurpose(_fieldId));
Из подробностей только
Microsoft.Dynamics.Ax.Xpp.Security.EncryptionException: Encryption error occured.

Есть у кого идеи как отправлять сообщения?
Не уверен, что дело в этом, но у меня был похожий случай во время установки D365O on-premises Суть была в том, что надо было сгенерить сертификат для Data Encryption непременно с использованием Microsoft Enhanced RSA and AES Cryptographic Provider - прям жирным шрифтом выделено в инструкции. Я сдуру решил генерить сертификат через местный CA, а не самоподписанный, говорю ему - сделай такой-то, он мне - пожалуйста! Я посмотрел, пощупал, понюхал - вроде то, что надо, разлил везде эти сертификаты, начал ставить... А через какое-то время на установке, кажется, Management Reporter полезла ошибка, связанная с криптографией, вот прям такая же информативная:
Код:
Microsoft.Dynamics.Ax.Xpp.Security.EncryptionException: Encryption error occured.
Не буду рассказывать, как я 3 дня с ней бодался, но в итоге выяснилось, что за кулисами вылезала ошибка
Код:
System.Security.Cryptography.CryptographicException: Invalid provider type specified
Это было уже намного лучше - оказалось, что местный CA молча сгенерил мне сертификат не для Microsoft Enhanced RSA and AES Cryptographic Provider, как я просил, а для Microsoft RSA SChannel Cryptographic Provider, потому что другие провайдеры, видите ли, были на нем не включены. В коде же вспомогательной сборки (Microsoft.Dynamics.AX.Framework.EncryptionEngine.dll) явным образом используется RSACryptoServiceProvider, который, собака, поддерживает только то, что сгенерил Microsoft Enhanced RSA and AES Cryptographic Provider. Внимание, вопрос, а как он это узнает по сертификату? Оказалось, что в свойствах закрытого ключа под особым микроскопом можно разглядеть такое:
Код:
[Private Key]
  Provider Name: Microsoft RSA SChannel Cryptographic Provider
  Provider type: 12
А у правильного сертификата для шифрования данных должно быть вот так:
Код:
[Private Key]
  Provider Name: Microsoft Enhanced RSA and AES Cryptographic Provider
  Provider type: 24
При этом кроме циферок 12/24 сертификаты могут больше ничем не отличаться - у обоих будет, скажем, использоваться SHA256 и RSA 2048. В общем, проверьте, той ли системы у вас сертификат для шифрования данных.
За это сообщение автора поблагодарили: sukhanchik (6), IvanS (1), vmoskalenko (2).
Старый 31.08.2018, 02:15   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от IvanS Посмотреть сообщение
Еще как показатель этой же проблемы, еще до отправки сообщений- это при открытии параметров электронной почты на вкладке параметры SMTP выдается ошибка Encryption error occured.
Посмотрите с помощью PerfView, какое на самом деле лезет исключение и сообщение об ошибке. Сборка Microsoft.Dynamics.AX.Framework.EncryptionEngine.dll ловит исходные исключения и вместо них выбрасывает свою неинформативную фигню, но в трассировке всё должно быть видно.
Цитата:
Сообщение от IvanS Посмотреть сообщение
P.s. в параметрах пользователя введен логин и пароль другого пользователя (не мои данные). При чем отправка почты через workflow работает без проблем
Хм, загадочно, тогда дело может быть и не в сертификате шифрования данных.
Старый 31.08.2018, 09:06   #9  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от KiselevSA Посмотреть сообщение
Попробуйте так https://dynamicsaxgyan.wordpress.com...or-operations/
Иначе придется раздавать права на отправку от имени, как указано в https://docs.microsoft.com/en-us/dyn...onfigure-email
Спасибо, но этот вариант отправки я тоже пробовал и настройки делаю абсолютно также.
Старый 31.08.2018, 09:10   #10  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Посмотрите с помощью PerfView, какое на самом деле лезет исключение и сообщение об ошибке. Сборка Microsoft.Dynamics.AX.Framework.EncryptionEngine.dll ловит исходные исключения и вместо них выбрасывает свою неинформативную фигню, но в трассировке всё должно быть видно.
Хм, загадочно, тогда дело может быть и не в сертификате шифрования данных.
В общем проблема оказалось совершенно простой. При разворачивании бэкапа базы данных, пароли с шифрованием слетают. И их нужно перезавести. Единственное, когда я пытался ввести свои данные с месяц назад, у меня выдавалась ошибка, что у моего профиля должно быть настроено отправка сообщение как SendAs.В итоге отправка сейчас проходит без проблем.
За это сообщение автора поблагодарили: sukhanchik (2), gl00mie (2).
Старый 06.09.2018, 14:25   #11  
vmoskalenko is offline
vmoskalenko
Участник
Аватар для vmoskalenko
 
145 / 334 (12) ++++++
Регистрация: 25.01.2007
Адрес: Toronto
Цитата:
Сообщение от IvanS Посмотреть сообщение
При разворачивании бэкапа базы данных, пароли с шифрованием слетают. И их нужно перезавести.
Когда-то я очень долго бадался с ошибкой расшифровки после переноса БД.
Проблема решается удалением всех зашифрованных данных и созданием новых занчений. Потому что шифруется и дальше конкретного SQL сервера не уходит.

Майкрософт автоматизировал это в одну строку:
Код:
-- Clear encrypted hardware profile merchand properties
update dbo.RETAILHARDWAREPROFILE set SECUREMERCHANTPROPERTIES = null where SECUREMERCHANTPROPERTIES is not null
Вот отсюда https://docs.microsoft.com/en-us/dyn...e-the-database
Старый 06.09.2018, 14:56   #12  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
В 2012 пароли для почты шифровались на каждом АОСе - не может быть тут в этом же дело? Т.е. нужно явно ввести пароль при смене АОСа. С учетом D365 без возможности выбора конкретного АОСа для входа, интересно, как фактически происходит сохранение?
__________________
Ivanhoe as is..
Старый 06.09.2018, 16:34   #13  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
В 2012 пароли для почты шифровались на каждом АОСе - не может быть тут в этом же дело? Т.е. нужно явно ввести пароль при смене АОСа. С учетом D365 без возможности выбора конкретного АОСа для входа, интересно, как фактически происходит сохранение?
Это еще с 2009-й началось: при шифровании пароля для почты данные сохранялись в локальном реестре, причем с привязкой к порту, на котором работает AOS. В D365 реестр используется для хранения разве что сертификатов (и поэтому они настраиваются заранее и вручную), а всё остальное хранится либо в текстовых конфигах и иных файлах в каталоге приложения, либо в базе, иначе развертывание в Azure и в Service Fabric превратилось бы в misson impossible.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
d365technext: Email In CC and BCC D365FO Blog bot DAX Blogs 0 13.08.2018 18:12
D365FO - Как включить шрифты штрих-кода автоматически на рабочих станциях пользователей? MarinaAX DAX: Администрирование 0 27.02.2018 22:13
stoneridgesoftware: Email Alerts on Power BI Dashboards with Microsoft Flow – Better Together Blog bot DAX Blogs 0 19.01.2017 20:11
emeadaxsupport: Sending email notifications for Retail orders [AX 2012 R2 and R3] Blog bot DAX Blogs 0 17.03.2015 00:11
Axapta 3, отправка файлов по eMail (КАК ИСПРАВИТЬ) raz DAX: Программирование 1 01.10.2003 15:07

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

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

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