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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.08.2013, 13:00   #6  
AR® is offline
AR®
Участник
 
30 / 15 (1) ++
Регистрация: 07.09.2012
SysMailer - на пенсию.

Вот код, который использует CDO.Message напрямую и отправляет почту через сервер smtp.office365.com
X++:
client static void sendMailByCDO(   str _Addresses, // список адресов через ';', допускается 1 адрес без ';'
                                    str _Subject,
                                    str _Body,
                                    int _MaxRetry = 5
                                )
{
    COM     msg;
    COM     cfg;
    COM     cfgFields;
    COM     cfgField;
    COM     msgFields;
    COM     msgField;
    int     retrycnt = 0;
    ;

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

    cfg = new COM('CDO.Configuration');

    cfgFields = cfg.Fields();

    cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/smtpauthenticate');
    cfgField.value(1);

    cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/sendusing');
    cfgField.value(2);

    cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/smtpserver');
    cfgField.value(GM_QCSettings::eMailSMTPServer());

    cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/smtpserverport');
    cfgField.value(GM_QCSettings::eMailSMTPPort());

    cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/sendusername');
    cfgField.value(GM_QCSettings::eMailSMTPLoginAccount());

    cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/sendpassword');
    cfgField.value(GM_QCSettings::eMailSMTPPassword());

    cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/smtpusessl');
    cfgField.value(GM_QCSettings::eMailSMTPuseSSL());

    cfgFields.update();

    msg = new COM('CDO.Message');
    msg.configuration(cfg);

    msgFields = msg.Fields();
    msgField = msgFields.item('urn:schemas:mailheader:content-type');
    msgField.value('text/html; charset="KOI8-R"');
    msgFields.update();

    msg.From(GM_QCSettings::eMailSMTPFromName() + '<' + GM_QCSettings::eMailSMTPFromAddress() + '>');
    msg.To(_Addresses);
    msg.subject(_Subject);
    msg.htmlBody(_Body);

    try
    {
        msg.send();
    }
    catch
    {
        warning('Произошла ошибка при выполнении метода send() COM-объекта CDO.Message');
        retrycnt++;
        if(retrycnt < _MaxRetry)
        {
            sleep(1000);
            retry;
        }
    }

    if(retrycnt)
        warning(strfmt("Сделано повторных попыток отправки: %1", retrycnt));

    if(retrycnt == _MaxRetry)
        error("Отправить письмо не удалось");

    CodeAccessPermission::revertAssert();

    msg         = null;
    cfg         = null;
    cfgFields   = null;
    cfgField    = null;
    msgFields   = null;
    msgField    = null;
}
Необходимые пояснения.
1. Статические методы на GM_QCSettings просто возвращают хранимые в базе параметры отправки почты.
2. Используемый порт - "обычный" 25-й, а не рекомендованный MS 587-й. С 587-м ничего не получилось.
3. "Обнуление" ком-объектов в конце работы - это не для красоты, а мера против непонятных глюков с ними, которые возникали при попытках вызвать метод с малыми интервалами времени между вызовами.
4. Отправка этим способом работает медленно по сравнению с Outlook'ом. Причина этого мне неизвестна.
5. eMailSMTPuseSSL() == 1

Последний раз редактировалось AR®; 30.08.2013 в 13:09.
За это сообщение автора поблагодарили: kashperuk (5).
Теги
office365, sysmailer, почта

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
amer-ax: It was a great day! Blog bot DAX Blogs 3 29.12.2012 01:02
Проблема с com Outlook Ksizorg DAX: Программирование 3 22.08.2012 15:44
dynamicsaxtraining: Purchase Blog bot DAX Blogs 0 11.03.2012 05:25
dynamicsaxbi: Screenshots of Dynamics AX 2009 Role Centers Blog bot DAX Blogs 0 18.03.2011 20:11
msdynamicsax: VB script that test the com connector for Dynamics Ax 4.0 Blog bot DAX Blogs 0 25.08.2008 18:05

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

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

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