AX2012 通过SMTP发送邮件
1. 在AX中配置邮件服务器信息
配置SMTP邮件服务
Dynamics AX 2012:
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:\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;
}

浙公网安备 33010602011771号