Wednesday, August 7, 2019

send email through pl/sql code ? What is UTL_SMTP Package

It uses UTL_SMTP package.
In Oracle 11g version, UTL_MAIL package can be used which makes use of UTL_SMTP internally.

CREATE OR REPLACE PROCEDURE XX_SEND_EMAIL (
   p_to             IN     VARCHAR2,
   p_from           IN     VARCHAR2,
   p_subject        IN     VARCHAR2,
   p_text_msg       IN     VARCHAR2 DEFAULT NULL,
   p_html_msg       IN     VARCHAR2 DEFAULT NULL,
   p_smtp_host      IN     VARCHAR2,
   p_smtp_port      IN     NUMBER DEFAULT 25,
   p_email_status      OUT VARCHAR2)
IS
   l_mail_conn   UTL_SMTP.connection;
   l_boundary    VARCHAR2 (50) := '----=*#abc1234321cba#*=';
BEGIN
   fnd_file.put_line (fnd_file.LOG, 'XX_SEND_EMAIL (+)');

   l_mail_conn := UTL_SMTP.open_connection (p_smtp_host, p_smtp_port);
   UTL_SMTP.helo (l_mail_conn, p_smtp_host);
   UTL_SMTP.mail (l_mail_conn, p_from);
   UTL_SMTP.rcpt (l_mail_conn, p_to);

   UTL_SMTP.open_data (l_mail_conn);

   UTL_SMTP.write_data (
      l_mail_conn,
      'Date: ' || TO_CHAR (SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.crlf);
   UTL_SMTP.write_data (l_mail_conn, 'To: ' || p_to || UTL_TCP.crlf);
   UTL_SMTP.write_data (l_mail_conn, 'From: ' || p_from || UTL_TCP.crlf);
   UTL_SMTP.write_data (l_mail_conn,
                        'Subject: ' || p_subject || UTL_TCP.crlf);
   UTL_SMTP.write_data (l_mail_conn, 'Reply-To: ' || p_from || UTL_TCP.crlf);
   UTL_SMTP.write_data (l_mail_conn, 'MIME-Version: 1.0' || UTL_TCP.crlf);
   UTL_SMTP.write_data (
      l_mail_conn,
         'Content-Type: multipart/alternative; boundary="'
      || l_boundary
      || '"'
      || UTL_TCP.crlf
      || UTL_TCP.crlf);

   IF p_text_msg IS NOT NULL
   THEN
      UTL_SMTP.write_data (l_mail_conn, '--' || l_boundary || UTL_TCP.crlf);
      UTL_SMTP.write_data (
         l_mail_conn,
            'Content-Type: text/plain; charset="iso-8859-1"'
         || UTL_TCP.crlf
         || UTL_TCP.crlf);

      UTL_SMTP.write_data (l_mail_conn, p_text_msg);
      UTL_SMTP.write_data (l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
   END IF;

   IF p_html_msg IS NOT NULL
   THEN
      UTL_SMTP.write_data (l_mail_conn, '--' || l_boundary || UTL_TCP.crlf);
      UTL_SMTP.write_data (
         l_mail_conn,
            'Content-Type: text/html; charset="iso-8859-1"'
         || UTL_TCP.crlf
         || UTL_TCP.crlf);

      UTL_SMTP.write_data (l_mail_conn, p_html_msg);
      UTL_SMTP.write_data (l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
   END IF;

   UTL_SMTP.write_data (l_mail_conn,
                        '--' || l_boundary || '--' || UTL_TCP.crlf);
   UTL_SMTP.close_data (l_mail_conn);

   UTL_SMTP.quit (l_mail_conn);

   p_email_status := 'S';

   fnd_file.put_line (fnd_file.LOG, 'XX_SEND_MAIL (-) ');
EXCEPTION
   WHEN OTHERS
   THEN
      p_email_status := 'F';
      fnd_file.put_line (fnd_file.LOG, 'Exception: - ' || SQLERRM);
END XX_SEND_EMAIL;

No comments:

Post a Comment

AME (Approval Management Engine)

AME (Approval Management Engine) : AME Stands for Oracle Approval Management Engine. AME is a self service web application that enables...