Настройка и хранение пароля пользователя для отправки почты по SMTP
Кажется, этот вопрос еще не обсуждался на форуме и не освещен в документации. Так вот, для отправки электронной почты по SMTP произвольным адресатам необходима предварительная аутентификация на SMTP-сервере. В Аксапте есть возможность настройки учетной записи, под которой будет осуществляться аутентификация на SMTP-сервере, если по каким-то причинам вы не используете для этого NTLM-аутентификацию. Однако, если прежде пароль этой учетной записи хранился в одном из полей записи в соотв. настроечной таблице вместе с прочими данными, такими как имя пользователя, DNS-имя и порт SMTP-сервера и проч., то теперь он хранится отдельно в зашифрованном виде, более того - он хранится отдельно для каждого экземпляра AOS!
Это может оказаться некоторой неожиданностью в случае развертывания нескольких AOS'ов, так что надо помнить об этом. В коде эта "особенность" зашита в табличном методе SysEmailParameters::password() - там можно увидеть, что запись из таблицы SysEmailSMTPPassword выбирается по полям "идентификатор AOS'а" и "название экземпляра AOS'а", которые, к примеру, могут иметь вид "AXSRV01@2712" и "01", соответственно. Но и это еще не все: дальше полученные бинарные данные расшифровываются вызовом метода WinAPIServer::cryptUnProtectData(), который вызывает статический метод класса ProtectedData.Unprotect() с параметром scope, равным DataProtectionScope.CurrentUser (это класс и enum из пространства имен System.Security.Cryptography .NET Framework), т.е. получается, что пароль можно успешно расшифровать лишь под тем же пользователем, под которым он был зашифрован.
Итак, пароль пользователя для аутентификации на SMTP-сервере хранится в AX 2009 в разрезе названия хоста, порта и названия экземпляра AOS, а успешно расшифрован он может быть лишь под определенной учетной записью, под которой запускается AOS. При изменении любого из указанных параметров пароль нужно будет настраивать заново.
Последний раз редактировалось gl00mie; 10.09.2010 в 11:58.
|