AX2012 通過SMTP傳送郵件
阿新 • • 發佈:2020-11-20
1. 在AX中配置郵件伺服器資訊
配置SMTP郵件服務 Dynamics AX 2012:private boolean prov_EmailReportSMTP(SrsReportEMailDataContract _emailContract, str _attachmentPath) { str sender ='[email protected]'; str recipient = _emailContract.parmTo(); str cc = _emailContract.parmCc(); str subject = _emailContract.parmSubject(); str body = _emailContract.parmBody(); str fileName = _attachmentPath;//@'D:\test.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; }