Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Sending multiple attachments through email with clob & blob input parameters

DevguyFeb 3 2017 — edited Feb 6 2017

Hi All,

I have the below piece of code which sends email with attachment from pl/sql. This code only can send single attachment at a time, I am trying to extend this to be able to send multiple attachments at a time and which accepts clob & blob attachments.

pastedImage_4.png

DECLARE

cursor c_get_det

is

select null key_file_name, null key_file

from dual

where 1=2

union

SELECT key_file_name, to_char(key_file)

 FROM xxc\_som\_orders

WHERE order\_header\_id = 1000197;

p_smtp_host VARCHAR2 (240) := 'oraclemail.xyz.com';

p_from VARCHAR2 (240) := 'xyz@gmail.com';

p_to VARCHAR2 (240) := 'xyz@gmail.com';

p_subject VARCHAR2 (2000) := 'Order Details';

p_text_msg VARCHAR2 (2000) := 'Please find the order details';

p_attach_name VARCHAR2 (240);

p_attach_mime VARCHAR2 (30) := 'text/plain';

p_attach_clob CLOB;

BEGIN

open c_get_det;

fetch c_get_det INTO p_attach_name, p_attach_clob;

close c_get_det;

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/mixed; 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_attach_name 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: ' || p\_attach\_mime || '; name="' || p\_attach\_name || '"' || UTL\_TCP.crlf);

UTL\_SMTP.write\_data(l\_mail\_conn, 'Content-Disposition: attachment; filename="' || p\_attach\_name || '"' || UTL\_TCP.crlf || UTL\_TCP.crlf);

FOR i IN 0 .. TRUNC((DBMS\_LOB.getlength(p\_attach\_clob) - 1 )/l\_step) LOOP

  UTL\_SMTP.write\_data(l\_mail\_conn, DBMS\_LOB.substr(p\_attach\_clob, l\_step, i \* l\_step + 1));

END LOOP;

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);

--dbms_output.put_line('l_mail_conn'||l_mail_conn);

UTL_SMTP.quit(l_mail_conn);

END;

Any suggestions would be appreciated.

Thanks!

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Mar 6 2017
Added on Feb 3 2017
5 comments
2,103 views