Sending an email is very simple and easy concept, but there are so many
different things that we need to keep in mind from best practices to new
additional methods that can be useful in different purpose. I am trying to cover
all the different aspects of sending emails, this will be Bible
for sending emails in the PeopleSoft. Best Practice
1) Anything that works is not correct or best method to follow while writing the
PeopleCode. First thing comes to the mind - SendMail function
to send the email, it is an deprecated method and should not be
used. Application Class MCFOutboundEmail needs to be used
and it is the fully SMTP Protocol compliant to RFC 821/822. It uses Javamail
functionality using this package. Where to Configure
MCFOutBoundEmail() function uses the SMTP section of the Application Server's
psappsrv.cfg file, and Process Scheduler's SMTP section of the psprcs.cfg file,
just as the SendMail() function does. No special configuration is required for
the MCFOutboundEmail() function to work.
Local PT_MCF_MAIL:MCFOutboundEmail &email =
&email.Recipients = "FINQAGenUser10@ap6023fems.us.oracle.com";
&email.BCC = "";
&email.Subject = "MCF Outbound Email
&email.ReplyTo = "";
&email.Text = "Email Body - This is a
Test of the MCF Outbound Email";
&res = &email.Send(); Best Performance for sending Bulk email if you need to send several emails where content is specific to each
email is different. Following code will help if you need to send email
notification on the component peoplecode, as it make one SMTP connection to send
all the emails and performance will be better.
Local integer &noOfMails = 20;
Local array of PT_MCF_MAIL:MCFOutboundEmail &mails;
Local PT_MCF_MAIL:MCFOutboundEmail &email;
Local integer &i;
Local PT_MCF_MAIL:SMTPSession &commonSession = create
&commonSession.Port = 25;
For &i = 1 To &noOfMails
&email.From = "firstname.lastname@example.org";
"Mail: " | NumberToString("2.0", &i) | " Hi there";
"Mail No: " | NumberToString("2.0", &i) | "One of
multiple mails from from
&mails &i = &email;
End-For; Local PT_MCF_MAIL:MCFMailUtil &util = create
PT_MCF_MAIL:MCFMailUtil(); Local array of integer &allRes =
In case if mails are not working for you and you are not able to figure out
You should look into smtp logs for more details and it will tell
you exactly what is happening.
Before using the SMTP logs , you need to
For enabling SMTP logs for App Server you need to edit the app
server configuration file :psappsrv.cfg.
Open the psappsrv.cfg file and find
“SMTP”.Look for SMTPTrace variable.
It will be SMTPTrace=0 initially.
the value of this variable SMTPTrace=1 and save the file.
This change does not require a Application Server boot and changes will be
If you are using mail classes from Process Scheduler, you may need to set
their trace also.
The psprcs.cfg file needs to be modified for this.
the file and look for SMTP and change the settings as done in the App server
configuration file. It will generate Trace file SMTP.LOG in LOGS Folder
under $PS_HOMEappservdomain_namelogsSMTP.LOG for Appserver and
$PS_HOMEappservprcsdomain_namelogsSMTP.LOG for Batchserver. Creating an Email from Rich Text Editor Output
Using the ParseRichTextHTML - you can send the Rich Text with messages.
Follwoing link has the complete details of the sample code.
Validating Email Address ValidateAddress(addresslist) - Use the
ValidateAddress method to validate a comma- or semicolon-separated list of email
addresses. This method checks the syntax of the email address. It does not
verify the domain name or the validity of the user name.
&emailutil = create PT_MCF_MAIL:MCFMailUtil();
Local boolean &result =
Local array of string &bAddresses = &emailutil.badaddresses;
If (&result = False) Then
If (&bAddresses <> Null) Then
Warning ("Bad email address in input = " |
End-If; Creating an HTML Email with Images
Sending the HTML content and sending the Client Image may be requried. It
looks good to send them in the email, Rather than the boring static emails which
doesn't have much of details in it.
Following link has the details of the code to send the same.
2) Notification Framework Another option is not explored very well by developers to send emails. It can be easy way sending the email for many scenarios, where code can be simple and provide configurable options.
The Notifications Framework uses the generic templates of the PeopleTools Workflow Technology, and the reader is urged to review the information in PeopleTools: Workflow Technology, “Using Notification Templates,” for a more comprehensive understanding.
Entity Registry to generalize all notifications into a single structure. The architecture is modeled on a pluggable channel-based approach. Each notification type is supported by a dedicated channel that supports the idiosyncrasies of the particular notification type.
After creating Templates
PeopleTools, then select Workflow, then selectNotifications, then selectGeneric Templates
Notification Setup page (select Set Up SACR, then select System Administration, then select Utilities, then select Notifications, then select Notification Setup)
Notification Consumer Setup page (select Set Up SACR, then select System Administration, then select Utilities, then select Notifications, then select Notification Consumer Setup).
Write an AppClass that extends AbstractNotification class. The Consumer ID must be passed to the Super Class constructor
Implement the abstract method createNtfContext().
Implement the abstract method populateNtfContext(). This method populates the context create above with the necessary values
Invoke the send(), remind(), or resend() methods.
Override the OnSuccess() and OnError() for custom behavior
Consultants can refer to the Delegated Access Application Class SCC_DA:NOTIFY as a reference for how to trigger the Notifications Framework as a consumer.