Description:

The utl_smtp package is used to send e-mails from any database to a valid recipient/recipients with or without attachments.
The generic code is given to send e-mail with excel attachment; it can be modified to match with any business requirement.

 

DECLARE
i                          NUMBER              := 1;
j                          NUMBER              := 1;
p_to                       VARCHAR2 (100)      := ‘Valid Email Id’;
lv_smtp_server             VARCHAR2 (100)      := ‘199.1.1.77’;
lv_domain                  VARCHAR2 (100);
lv_from                    VARCHAR2 (100)      := ‘Valid Domain’;
v_connection               UTL_SMTP.connection;
c_mime_boundary   CONSTANT VARCHAR2 (256)      := ‘–AAAAA000956–‘;
v_clob                     CLOB;
ln_len                     INTEGER;
ln_index                   INTEGER;
ln_count                   NUMBER;
ln_code                    VARCHAR2 (10);
ln_counter                 NUMBER              := 0;
lv_instance                VARCHAR2 (100);
ln_cnt                     NUMBER;
ld_date                    DATE;

BEGIN
ld_date := SYSDATE;
lv_domain := lv_smtp_server;

BEGIN
v_clob := ‘Number’ || ‘,’ || ‘Name’ || UTL_TCP.crlf;
v_connection := UTL_SMTP.open_connection (lv_smtp_server); –To open the connection      UTL_SMTP.helo (v_connection, lv_domain);
UTL_SMTP.mail (v_connection, lv_from);
UTL_SMTP.rcpt (v_connection, p_to); — To send mail to valid receipent

UTL_SMTP.open_data (v_connection);
UTL_SMTP.write_data (v_connection, ‘From: ‘ || lv_from || UTL_TCP.crlf);

IF TRIM (p_to) IS NOT NULL
THEN
UTL_SMTP.write_data (v_connection, ‘To: ‘ || p_to || UTL_TCP.crlf);
END IF;

UTL_SMTP.write_data (v_connection,
‘Subject: Item Creation Report’ || UTL_TCP.crlf
);
UTL_SMTP.write_data (v_connection, ‘MIME-Version: 1.0’ || UTL_TCP.crlf);
UTL_SMTP.write_data (v_connection,
‘Content-Type: multipart/mixed; boundary=”‘
|| c_mime_boundary
|| ‘”‘
|| UTL_TCP.crlf
);
UTL_SMTP.write_data (v_connection, UTL_TCP.crlf);
UTL_SMTP.write_data (v_connection,
‘This is a multi-part message in MIME format.’
|| UTL_TCP.crlf
);
UTL_SMTP.write_data (v_connection,
‘–‘ || c_mime_boundary || UTL_TCP.crlf
);
UTL_SMTP.write_data (v_connection,
‘Content-Type: text/plain’ || UTL_TCP.crlf
);
ln_cnt := 1;

/*Condition to check for the creation of csv attachment*/
IF (ln_cnt <> 0)
THEN
UTL_SMTP.write_data
(v_connection,
‘Content-Disposition: attachment; filename=”‘
|| ‘Emp_details’
|| TO_CHAR (ld_date, ‘dd-mon-rrrr hh:mi’)
|| ‘.csv’
|| ‘”‘
|| UTL_TCP.crlf
);
END IF;

UTL_SMTP.write_data (v_connection, UTL_TCP.crlf);

FOR i IN (SELECT x.*
FROM emp x)
LOOP
ln_counter := ln_counter + 1;

IF ln_counter = 1
THEN
UTL_SMTP.write_data (v_connection, v_clob);–To avoid repeation of column heading in csv file

END IF;

BEGIN
v_clob := ‘=”‘ || i.ID || ‘”‘ || ‘,’ || i.NAME || UTL_TCP.crlf;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, SQLERRM);
END;

UTL_SMTP.write_data (v_connection, v_clob); –Writing data in csv attachment.

END LOOP;

UTL_SMTP.write_data (v_connection, UTL_TCP.crlf);
UTL_SMTP.close_data (v_connection);
UTL_SMTP.quit (v_connection);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM);
END;
END;

Note: To send e-mail to multiple receipents, logic should be build to loop over ‘UTL_SMTP.rcpt (l_mail_conn, p_to)’ command

 

Summary:

This Post explained what the steps should follow to create sending E-mail with Excel attachment using UTL_SMTP

queries?

Do drop a note by writing us at contact@doyensys.com or use the comment section below to ask your questions.

 

 

Recent Posts

Start typing and press Enter to search