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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.09.2013, 13:17   #7  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Добавлю свои 5 копеек, все то же самое но с использование .Net, глюков пока не замечено.
X++:
public static boolean sendMailNet(
                    str         mailTo,
                    str         mailToCC = '',
                    str         mailSubject,
                    str         mailBody,
                    str         mailServer,
                    str         mailFrom,
                    str         userName,
                    str         userPass,
                    boolean     isBodyHTML = false,
                    int         port = 25,
                    boolean     highMailImportance = false,
                    str         attachmentFile = '',
                    str         mailToBCC = '',
                    container   conAttachFileName = conNull() //отправка нескольких файлов
                )
{
    System.Net.Mail.SmtpClient              smtpClient;
    System.Net.Mail.MailMessage             mailMessage;
    System.Net.Mail.MailAddress             mailAddressFrom;
    System.Net.NetworkCredential            networkCredential;
    System.Net.Mail.AttachmentCollection    attachmentCollection;
    System.Net.Mail.Attachment              attachment;

    int                                     countMails;
    boolean                                 fileExists;
    int                                     countAttachFiles;
    int                                     n;
    str                                     tmpFileName;
    str                                     strInfo;
    boolean                                 res = false;
    ;


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


    if (!mailServer)
    {
        error('Не указан почтовый сервер!');
        return false;
    }

    if (!mailFrom)
    {
        error('Не указан обратный адрес отправителя!');
        return false;
    }

    try
    {
        mailAddressFrom = new System.Net.Mail.MailAddress(mailFrom);
    }
    catch
    {
        error("Адрес отправителя не задан или некорректен");
        return false;
    }

    mailMessage = new System.Net.Mail.MailMessage();

    mailMessage.set_From(mailAddressFrom);

    if(mailTo != "")
    {
        countMails += CDOMailNet::createMailAddressCollection(mailTo, mailMessage.get_To()); //создание коллекции
// адресатов (ниже по тексту код)
    }

    if(mailToCC != "")
    {
        countMails += CDOMailNet::createMailAddressCollection(mailToCC, mailMessage.get_CC()); //создание коллекции
// адресатов (ниже по тексту код)
    }

    if(mailToBCC != "")
    {
        countMails += CDOMailNet::createMailAddressCollection(mailToBCC, mailMessage.get_Bcc()); //создание коллекции 
// адресатов (ниже по тексту код)
    }

    if(countMails == 0)
    {
        error("Не заданы адреса получателей");
        return false;
    }

    mailMessage.set_Subject(mailSubject);

    if(highMailImportance)
    {
        mailMessage.set_Priority(System.Net.Mail.MailPriority::High);
    }

    if(attachmentFile != "")
    {
        conAttachFileName += attachmentFile;
    }

    countAttachFiles = conLen(conAttachFileName);
    if(countAttachFiles > 0)
    {
        attachmentCollection = mailMessage.get_Attachments();
        for(n=1 ; n <= countAttachFiles; n++)
        {
            tmpFileName = conpeek(conAttachFileName, n);
            if(tmpFileName != "")
            {
                fileExists = System.IO.File::Exists(tmpFileName);
                if(fileExists == true)
                {
                    try
                    {
                        attachment = new System.Net.Mail.Attachment(tmpFileName);
                        attachmentCollection.Add(attachment);
                    }
                    catch( Exception::CLRError)
                    {
                        error(strFmt("Ошибка отправки почты: %1", AifUtil::getClrErrorMessage()));
                        return false;
                    }
                }
                else
                {
                    strInfo = strFmt(@"Не найден файл для отправки: %1", tmpFileName);
                    if(isBodyHTML)
                        mailBody = strInfo + @"<br /><br />" + mailBody;
                    else
                        mailBody = strInfo + "\n\n" + mailBody;

                    error(strInfo);
                }
            }
        }
    }

    mailMessage.set_IsBodyHtml(isBodyHTML);
    mailMessage.set_Body(mailBody);

    try
    {
        smtpClient = new System.Net.Mail.SmtpClient(mailServer, port);
        if(userName != "")
        {
            smtpClient.set_UseDefaultCredentials(false);
            networkCredential = new System.Net.NetworkCredential(userName, userPass);
            smtpClient.set_Credentials(networkCredential);
        }
        smtpClient.Send(mailMessage);
        res = true;
    }
    catch( Exception::CLRError)
    {
        error(strFmt("Ошибка отправки почты: %1", AifUtil::getClrErrorMessage()));
    }


    if(attachmentCollection != null)
        attachmentCollection.Dispose();

    if(mailMessage != null)
        mailMessage.Dispose();

    return res;
}

//создание коллекции адресатов
protected static int createMailAddressCollection(str _strEmails, System.Net.Mail.MailAddressCollection  _mailAddressCollection)
{

    List                                listEmails;
    ListEnumerator                      le;
    eMail                               eMail;
    int                                 countMails = 0;
    ;

    if(_strEmails && _mailAddressCollection != null)
    {
        listEmails = strSplit(_strEmails, ";, ");
        le = listEmails.getEnumerator();

        while (le.moveNext())
        {
            eMail = le.current();
            if(eMail != "")
            {
                try
                {
                    _mailAddressCollection.Add(eMail);
                    countMails ++;
                }
                catch( Exception::CLRError)
                {
                    warning(strFmt("Адрес: %1 будет пропущен, причина: %2", eMail, AifUtil::getClrErrorMessage()));
                }
            }
        }
    }

    return countMails;
}
За это сообщение автора поблагодарили: gl00mie (5), AR® (1).
Теги
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, время: 13:00.