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