CREATE OR REPLACE PACKAGE SWM_MAIL_FILES_PKG IS

----------------------- Customizable Section -----------------------

--Customize the SMTP host, port and your domain name below.

smtp_host VARCHAR2(256) := '172.20.10.97';
smtp_port PLS_INTEGER := 25;
smtp_domain VARCHAR2(256) := null;

-- Customize the signature that will appear in the email's MIME header. Useful for versioning.
MAILER_ID CONSTANT VARCHAR2(256) := 'Mailer by Oracle UTL_SMTP';
--End Customizable Section

-- A unique string that demarcates boundaries of parts in a multi-part email

-- The string should not appear inside the body of any part of the email.
-- Customize this if needed or generate this randomly dynamically.
BOUNDARY CONSTANT VARCHAR2(256) := '-----7D81B75CCC90D2974F7A1CBD';
FIRST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || utl_tcp.CRLF;
LAST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || '--' || utl_tcp.CRLF;

--A MIME type that denotes multi-part email (MIME) messages.
MULTIPART_MIME_TYPE CONSTANT VARCHAR2(256) := 'multipart/mixed; boundary="'|| BOUNDARY || '"';
MAX_BASE64_LINE_WIDTH CONSTANT PLS_INTEGER := 76 / 4 * 3;

-- A simple email API for sending email in plain text in a single call.
-- The format of an email address is one of these:
-- someone@some-domain
-- "Someone at some domain" someone@some-domain
-- Someone at some domain someone@some-domain
-- The recipients is a list of email addresses separated by
-- either a "," or a ";"

PROCEDURE mail(sender IN VARCHAR2, recipients IN
VARCHAR2, subject IN VARCHAR2, cc IN VARCHAR2, message IN VARCHAR2);

-- Extended email API to send email in HTML or plain text with no size limit.
-- First, begin the email by begin_mail(). Then, call write_text() repeatedly
-- to send email in ASCII piece-by-piece. Or, call write_mb_text() to send
-- email in non-ASCII or multi-byte character set. End the email with
-- end_mail().

FUNCTION
begin_mail(sender IN VARCHAR2, recipients IN VARCHAR2, subject IN VARCHAR2, cc IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain', priority IN PLS_INTEGER DEFAULT NULL)
RETURN utl_smtp.connection;

-- Write email body in ASCII
PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection, message IN VARCHAR2);

-- Write email body in non-ASCII (including multi-byte). The email body
-- will be sent in the database character set.
PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection, message IN VARCHAR2);

-- Write email body in binary
PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection, message IN RAW);


-- APIs to send email with attachments. Attachments are sent by sending
-- emails in "multipart/mixed" MIME format. Specify that MIME format when
-- beginning an email with begin_mail().
-- Send a single text attachment.

PROCEDURE
attach_text(conn IN OUT NOCOPY utl_smtp.connection, data IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain', inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL, last IN BOOLEAN DEFAULT FALSE);

PROCEDURE attach_mb_text(conn
IN OUT NOCOPY utl_smtp.connection, data IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain', inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL, last IN BOOLEAN DEFAULT FALSE);

-- Send a binary attachment. The attachment will be encoded in Base-64 -- encoding format.

PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
data IN RAW, mime_type IN VARCHAR2 DEFAULT 'application/octet',
inline IN BOOLEAN DEFAULT TRUE, filename IN VARCHAR2 DEFAULT NULL,
last IN BOOLEAN DEFAULT FALSE);

-- Send an attachment with no size limit. First, begin the attachment
-- with begin_attachment(). Then, call write_text repeatedly to send
-- the attachment piece-by-piece. If the attachment is text-based but
-- in non-ASCII or multi-byte character set, use write_mb_text() instead.
-- To send binary attachment, the binary content should first be
-- encoded in Base-64 encoding format using the demo package for 8i,
-- or the native one in 9i. End the attachment with end_attachment.


PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
mime_type IN VARCHAR2 DEFAULT 'text/plain', inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
transfer_enc IN VARCHAR2 DEFAULT NULL);

-- End the attachment.


PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection, last IN BOOLEAN DEFAULT FALSE);

-- End the email.


PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection);

-- Extended email API to send multiple emails in a session for better
-- performance. First, begin an email session with begin_session.
-- Then, begin each email with a session by calling begin_mail_in_session
-- instead of begin_mail. End the email with end_mail_in_session instead
-- of end_mail. End the email session by end_session.

FUNCTION begin_session RETURN utl_smtp.connection;

-- Begin an email in a session.


PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection, sender IN VARCHAR2,
recipients IN VARCHAR2, subject IN VARCHAR2, cc IN VARCHAR2, mime_type IN VARCHAR2 DEFAULT 'text/plain',
priority IN PLS_INTEGER DEFAULT NULL);

-- End an email in a session.

PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection);

-- End an email session.

PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection);

--

PROCEDURE MAIL_FILES_PROC(
       pv_sender in varchar2
     , pv_recipients in varchar2
     , pv_subject in varchar2
     , pv_cc in varchar2
     , pv_body in varchar2
     , pv_list_ascii_files in varchar2
     , pv_list_binary_files in varchar2
     , pv_directory in varchar2
     , pn_retcode out number
);

END;
/
