USE THIS PROCEDURE TO SEND EMAIL
CREATE OR REPLACE PROCEDURE JOYEMAIL (pivcFromName IN VARCHAR2
,pivcFromEmail IN VARCHAR2
,pivcToName IN VARCHAR2
,pivcToEmail IN VARCHAR2
,pivcSubject IN VARCHAR2
,pivcBody IN VARCHAR2
,pivcCcName IN VARCHAR2 := NULL
,pivcCcEmail IN VARCHAR2 := NULL
,pivcBccName IN VARCHAR2 := NULL
,pivcBccEmail IN VARCHAR2 := NULL
,pivcMailIp IN VARCHAR2
,pinPort IN NUMBER ) IS
objConnection utl_smtp.connection;
vrData RAW(32767);
BEGIN
objConnection := UTL_smtp.open_connection(pivcMailIp,pinPort);
UTL_smtp.ehlo(objConnection, pivcMailIp);
UTL_smtp.mail(objConnection, pivcFromEmail);
UTL_smtp.rcpt(objConnection, pivcToEmail);
IF (pivcCcEmail IS NOT NULL) THEN
UTL_smtp.rcpt(objConnection, pivcCcEmail);
END IF;
IF (pivcBccEmail IS NOT NULL) THEN
UTL_smtp.rcpt(objConnection, pivcBccEmail);
END IF;
UTL_smtp.open_data(objConnection);
/* ** Sending the header information */
UTL_smtp.write_data(objConnection, 'From: ' || '"' || pivcFromName || '" <' || pivcFromEmail ||'>' || UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection, 'To: ' || '"' || pivcToName || '" <' || pivcToEmail ||'>' || UTL_tcp.CRLF);
IF (pivcCcEmail IS NOT NULL) THEN
UTL_smtp.write_data(objConnection, 'Cc: ' || '"' || pivcCcName || '" <' || pivcCcEmail ||'>' || UTL_tcp.CRLF);
END IF;
IF (pivcBccEmail IS NOT NULL) THEN
UTL_smtp.write_data(objConnection, 'Bcc: ' || '"' || pivcBccName || '" <' || pivcBccEmail ||'>' || UTL_tcp.CRLF);
END IF;
UTL_smtp.write_data(objConnection, 'Subject: ' || pivcSubject || UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection, 'MIME-Version: ' || '1.0' || UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection, 'Content-Type: ' || 'text/plain; charset=utf-8' || UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection, 'Content-Transfer-Encoding: ' || '8bit' || UTL_tcp.CRLF);
/* ** End of header information */
UTL_smtp.write_data(objConnection, UTL_tcp.CRLF);
/* ** Actual body is sent here */
vrData := utl_raw.cast_to_raw(pivcbody);
UTL_smtp.write_raw_data(objConnection, vrData);
/* ** Connection is closed here */
UTL_smtp.close_data(objConnection);
UTL_smtp.quit(objConnection);
EXCEPTION
WHEN UTL_smtp.transient_error OR UTL_smtp.permanent_error THEN
UTL_smtp.quit(objConnection);
dbms_output.put_line(sqlerrm);
WHEN OTHERS THEN
UTL_smtp.quit(objConnection);
dbms_output.put_line(sqlerrm);
END;
/