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
staticvoidSendTextMail(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');
}
selectfirstOnlydirPersonUser
join userInfo
wheredirPersonUser.PersonParty == DirPartyTable::findByName(hcmWorker.name()).RecId &&
userInfo.id == dirPersonUser.User;
selectfirstOnlysysUserInfo
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