Skip to main content

Notifications

Announcements

No record found.

Dynamics 365 Community / Blogs / The Dynamics 365 Library / Send email from AX using li...

Send email from AX using live or gmail exchange server

Faisal Fareed Profile Picture Faisal Fareed 10,794 User Group Leader
You may find few more posts over this topic to send emails from AX using live (Hotmail) or gmail exchange server. This is really helpful when we don’t have exchange is in place sometimes due to high cost or you just want to send emails for testing or demo purpose.

Let’s see what parameters need to setup and how can we achieve this requirement.
Go to System Administration | Setup | System | E-mail parameters

P.S. I am using a dedicated email account at outlook (Hotmail) domain for this example. NTLM option can also be used; TechNet articleis more helpful to get more information on these parameters.

Here is the job I wrote to send email for selected user. I name it SendTextMail as in my following post I will be writing to send invitation from AX using Hotmail or Gmail exchange server.


//SmtpSSL
static voidSendTextMail(Args _args)
{
    System.Net.Mail.MailMessage             mailMessage;
    System.Net.Mail.SmtpClient              myMail;
    System.Net.Mail.MailAddressCollection   mailcoll;
    System.Net.Mail.MailAddress             mailFrom;
    System.Net.Mail.MailAddress             mailTo;
    System.Net.Mail.MailAddress             mailCC;
    str                                     receiverMailAddress;
    str                                     mailBody;
    str                                     smtpServer;
    str                                     mailSubject;
    str                                     CcMailAddress;
    int                                     SMTPPort;
    #File
    str                                     mail;
    str                                     pwd;

    Dialog dialog = new Dialog('Email');
    Dialogfield     person, emailSubject, emailBody;
    HcmWorker       hcmWorker;
    UserInfo        userInfo;
    DirPersonUser   dirPersonUser;
    SysUserInfo     sysUserInfo;
    SysEmailParameters parameters;

    // dialog field to select user to whom email will be send
    person          = dialog.addField(extendedTypeStr(HcmWorkerRecId ), 'Person :' );   
    emailSubject    = dialog.addField(extendedTypeStr(Description), 'Subject :' );      // Email Subject
    emailBody       = dialog.addField(extendedTypeStr(Notes), 'Body :' );               // Email Body

    if(dialog.run())
    {
        parameters = SysEmailParameters::find();   // Find values from Email Parameters

        newInteropPermission(InteropKind::ClrInterop).assert();

        // gets HcmWorker record based on person selected from user dialog
        hcmWorker = hcmWorker::find(person.value()); 

        if(!hcmWorker.RecId)   // Verify either user exist or not
        {
            throw error('User not found');
        }

        select firstOnlydirPersonUser
            join userInfo
                wheredirPersonUser.PersonParty == DirPartyTable::findByName(hcmWorker.name()).RecId &&
                 userInfo.id == dirPersonUser.User;

        select firstOnlysysUserInfo
            where sysUserInfo.Id == userInfo.id;      // Retrieve user info record for selected user

        mailSubject         = emailSubject.value();
        mailFrom            = new  System.Net.Mail.MailAddress(parameters.SMTPUserName ,"Name");
        mailTo              = new  System.Net.Mail.MailAddress(sysUserInfo.Email);
        //mailTo            = new  System.Net.Mail.MailAddress("test1@gmail.com");
        //mailCC            = new  System.Net.Mail.MailAddress("test2@gmail.com";
        mailcoll            = new  System.Net.Mail.MailAddressCollection();
        mailBody            = emailBody.value();

        try
        {
            // using the SMTP server ip //setup in email Parameters
            smtpServer          = SysEmaiLParameters::find(false).SMTPRelayServerName;  
            mailMessage         = newSystem.Net.Mail.MailMessage(mailFrom,mailTo);
            mailmessage.set_Subject(mailSubject);
            mailmessage.set_Body(mailBody);

            SMTPPort            = SysEmaiLParameters::find(false).SMTPPortNumber;
            myMail              = new System.Net.Mail.SmtpClient(smtpServer, SMTPPort);

           // For SSL enabled mail servers. Ex: gmail, smtp.gmail.com, port 465 or 587
            myMail.set_EnableSsl(true); 

            pwd = SysEmaiLParameters::password();

            mymail.set_Credentials(NewSystem.Net.NetworkCredential(parameters.SMTPUserName, pwd));

            mymail.Send(mailmessage);
        }
        catch(Exception::CLRError)
        {
            throwException::CLRError;
        }

        mailMessage.Dispose();
        CodeAccessPermission::revertAssert();
    }
}

UI of the utility


Comments

*This post is locked for comments