AX2012 通过SMTP发送邮件

1. 在AX中配置邮件服务器信息

配置SMTP邮件服务
Dynamics AX 2012: System administration > Setup > System > E-mail parameters
 
2. 发邮件代码
private boolean prov_EmailReportSMTP(SrsReportEMailDataContract _emailContract,  str _attachmentPath)
{
    str                                   sender ='ERP@providencechina.com';
    str                                   recipient = _emailContract.parmTo(); 
    str                                   cc        = _emailContract.parmCc(); 
    str                                   subject   = _emailContract.parmSubject();
    str                                   body      = _emailContract.parmBody(); 
    str                                   fileName  = _attachmentPath;//@'D:	est.txt';

    List                                  toList;
    List                                  ccList;
    ListEnumerator                        le;

    Set                                   permissionSet;
    System.Exception                      e;

    str                                   mailServer ;
    int                                   mailServerPort = 25;
    System.Net.Mail.SmtpClient            mailClient;
    System.Net.Mail.MailMessage           mailMessage;
    System.Net.Mail.MailAddress           mailFrom;
    System.Net.Mail.MailAddress           mailTo;
    System.Net.Mail.MailAddressCollection mailToCollection;
    System.Net.Mail.MailAddressCollection mailCCCollection;
    System.Net.Mail.AttachmentCollection  mailAttachementCollection;
    System.Net.Mail.Attachment            mailAttachment;
    SysEmaiLParameters      SysEmaiLParameters;

    
    System.Security.Cryptography.X509Certificates.X509CertificateCollection  CertificateCollection;

    System.Net.NetworkCredential    credentials;
    SMTPPassword                    password;

    SMTPPassword getPassword()
    {
        CryptoBlob cryptoBlob = connull();
        SysEmailSMTPPassword SMTPPassword;

        AOSId AOSId;
        AOSInstanceId AOSInstanceId;

        ;
        [AOSId,AOSInstanceId] = SysEmailSMTPPassword::currentAOSInstance();

        SMTPPassword = SysEmailSMTPPassword::find(AOSId,AOSInstanceId);

        if (SMTPPassword.RecId != 0)
            cryptoBlob = SMTPPassword.Password;

        if (cryptoBlob != connull())
            return cryptoblob2str(WinapiServer::cryptUnProtectData(cryptoBlob));
        else
            return '';
    }
    
    ;

    try
    {
        SysEmaiLParameters = SysEmaiLParameters::find();

        if (!SysEmaiLParameters.RecId)
            throw error("@SYS77517");

        mailServer = SysEmaiLParameters.SMTPRelayServerName;

        sender = SysEmaiLParameters.SMTPUserName;
        mailServerPort = SysEmaiLParameters::find(false).SMTPPortNumber;

        recipient = strReplace(recipient,  ",",  ";");
        cc = strReplace(cc, ",",  ";");

        toList = strSplit(recipient, ';');
        ccList = strSplit(cc, ';');

        permissionSet = new Set(Types::Class);
        permissionSet.add(new InteropPermission(InteropKind::ClrInterop));
        permissionSet.add(new FileIOPermission(filename, 'rw'));
        CodeAccessPermission::assertMultiple(permissionSet);

        mailClient = new System.Net.Mail.SmtpClient(mailServer, mailServerPort);

        password = getPassword();
        credentials = new System.Net.NetworkCredential(SysEmaiLParameters.SMTPUserName,  password);
        mailClient.set_Credentials( credentials);

        le = toList.getEnumerator();
        le.moveNext();

        mailFrom = new System.Net.Mail.MailAddress(sender);
        mailTo  = new System.Net.Mail.MailAddress(strLTrim(strRTrim(le.current())));
        mailMessage = new System.Net.Mail.MailMessage(mailFrom, mailTo);

        mailToCollection = mailMessage.get_To();
        while (le.moveNext())
        {
            mailToCollection.Add(strLTrim(strRTrim(le.current())));
        }

        le = ccList.getEnumerator();
        mailCCCollection = mailMessage.get_CC();
        while (le.moveNext())
        {
            mailCCCollection.Add(strLTrim(strRTrim(le.current())));
        }

        mailMessage.set_Priority(System.Net.Mail.MailPriority::High);
        mailMessage.set_Subject(subject);
        mailMessage.set_Body(body);
        mailMessage.set_IsBodyHtml( true);

        mailAttachementCollection = mailMessage.get_Attachments();
        mailAttachment = new System.Net.Mail.Attachment(fileName);
        mailAttachementCollection.Add(mailAttachment);

        mailClient.Send(mailMessage);
        mailMessage.Dispose();

        CodeAccessPermission::revertAssert();

        info("Email sent.");
    }
    catch (Exception::CLRError)
    {
        e = ClrInterop::getLastException();
        while (e)
        {
            info(e.get_Message());
            e = e.get_InnerException();
        }
        CodeAccessPermission::revertAssert();
    }


    return true;

}

  

原文地址:https://www.cnblogs.com/sxypeace/p/14010283.html