En este post le quiero explicar otra opción para realizar el envió de correo en Dynamics Ax, diferente al uso de la clase SysMailer, esta opción usa el framework de .Net y me vi en la obligación de utilizarla debido a que usando la clase SysMailer se presentaron muchos problemas en el ambiente de producción, en pruebas funcionaba perfecto pero ya en producción por alguna razón Dynamics Ax no enviaba los correos, apenas invocaba los parámetros para conectarme me presentaba errores de invocación en el método CLR.
Entre las opciones que se muestran en este job, esta la linea de:
1 | mailMessage.set_Priority(System.Net.Mail.MailPriority::High); |
Con esta sencilla instrucción podemos darle la prioridad de importante al correo enviado, pueden quitar la linea de 5, 32, 33 si no desean enviar una copia, adicional en el job que se muestra al final del articulo tiene la opción de un archivo adjunto que también es opcional quitando las lineas 8, 17, 18, 37, 38, 39.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | static void EnvioCorreoNet(Args _args) { str sender = '[email protected]'; str recipient = '[email protected]'; str cc1 = '[email protected]'; str subject = 'Asunto del Correo'; str body = 'Cuerpo del email'; str fileName1 = @'C:\adjunto.txt'; Set permissionSet; System.Exception e; str mailServer; System.Net.Mail.SmtpClient mailClient; System.Net.Mail.MailMessage mailMessage; System.Net.Mail.MailAddress mailFrom; System.Net.Mail.MailAddress mailTo; System.Net.Mail.MailAddressCollection mailCCCollection; System.Net.Mail.AttachmentCollection mailAttachementCollection; System.Net.Mail.Attachment mailAttachment; ; try { permissionSet = new Set(Types::Class); permissionSet.add(new InteropPermission(InteropKind::ClrInterop)); permissionSet.add(new FileIOPermission(filename1, 'rw')); CodeAccessPermission::assertMultiple(permissionSet); mailServer = SysEmaiLParameters::find(false).SMTPRelayServerName; mailClient = new System.Net.Mail.SmtpClient(mailServer); mailFrom = new System.Net.Mail.MailAddress(sender); mailTo = new System.Net.Mail.MailAddress(recipient); mailMessage = new System.Net.Mail.MailMessage(mailFrom, mailTo); mailCCCollection = mailMessage.get_CC(); mailCCCollection.Add(cc1); mailMessage.set_Priority(System.Net.Mail.MailPriority::High); mailMessage.set_Subject(subject); mailMessage.set_Body(body); mailAttachementCollection = mailMessage.get_Attachments(); mailAttachment = new System.Net.Mail.Attachment(fileName1); mailAttachementCollection.Add(mailAttachment); mailClient.Send(mailMessage); mailMessage.Dispose(); CodeAccessPermission::revertAssert(); info("Correo Enviado."); } catch (Exception::CLRError) { e = ClrInterop::getLastException(); while (e) { info(e.get_Message()); e = e.get_InnerException(); } CodeAccessPermission::revertAssert(); } } |
Espero les sirva como otra opción para enviar correos desde Microsoft Dynamics AX usando el framework del .net, no olvides usar los comentarios.