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 article
is 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 void
SendTextMail(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
        new
InteropPermission(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 firstOnly
dirPersonUser
            join userInfo
               
where
dirPersonUser.PersonParty == DirPartyTable::findByName(hcmWorker.name()).RecId
&&
                
userInfo.id == dirPersonUser.User;
        select firstOnly
sysUserInfo
            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         = new
System.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(New
System.Net.NetworkCredential(parameters.SMTPUserName, pwd));
           
mymail.Send(mailmessage);
        }
        catch(Exception::CLRError)
        {
            throw
Exception::CLRError;
        }
       
mailMessage.Dispose();
       
CodeAccessPermission::revertAssert();
    }
}
UI of the utility


I configured gmail smtp in email parameters and your code is perfectly working. However, when I am trying to execute following code which is using default SysMailer class I am getting error:
ReplyDeleteSysMailer sysMailer = new SysMailer();
;
sysMailer.quickSend('sender email address', 'recipient email address', 'test email alert', 'test email alert');
I am getting following error:
Method 'send' in COM object of class 'CDO.Message' returned error code 0x8004020E () which means: .
Any help would be highly appreciated.
Gmail helps in advancing organizations of various kinds by giving them online crowd. Low spam scores
ReplyDelete