git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@50874 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
473
Data/BulkLoad/EFT/Nominations/plsql/amfr_messaging.bdy
Normal file
473
Data/BulkLoad/EFT/Nominations/plsql/amfr_messaging.bdy
Normal file
@@ -0,0 +1,473 @@
|
||||
CREATE OR REPLACE PACKAGE BODY amfr_messaging IS
|
||||
--
|
||||
c_sms_spool_dir CONSTANT VARCHAR2(200) := cout_system_configuration.get_configuration_item('G_SMS_SPOOL_DIR');
|
||||
c_sms_enabled CONSTANT VARCHAR2(200) := cout_system_configuration.get_configuration_item('G_SMS_ENABLED');
|
||||
c_directory_name CONSTANT VARCHAR2(15) := 'sms_spool_dir';
|
||||
--
|
||||
c_mslo_id NUMBER := 0;
|
||||
--
|
||||
PROCEDURE setup_dir IS
|
||||
BEGIN
|
||||
--
|
||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY '||c_directory_name||' as '''||c_sms_spool_dir||'''';
|
||||
--
|
||||
END setup_dir;
|
||||
--
|
||||
/**
|
||||
-- Procedure to send an SMS message
|
||||
-- @param p_sms_number VARCHAR The number of the SMS recipient, including the international code but without the leading +
|
||||
-- @param p_sms_message VARCHAR The SMS message to send, message passed in as text
|
||||
*/
|
||||
PROCEDURE send_sms_message ( p_sms_number IN VARCHAR2
|
||||
, p_sms_message IN VARCHAR2
|
||||
) IS
|
||||
--
|
||||
l_file_handle utl_file.file_type;
|
||||
l_file_name VARCHAR2(100);
|
||||
--
|
||||
l_unicode_message BOOLEAN := FALSE;
|
||||
--
|
||||
BEGIN
|
||||
--
|
||||
IF c_sms_spool_dir IS NOT NULL AND UPPER(c_sms_enabled) = 'Y' THEN
|
||||
--
|
||||
-- There is a spool directory specified and SMS messages are to be sent, set up the file name
|
||||
--
|
||||
IF cout_system_configuration.get_configuration_item('G_UNICODE_SMS') = 'Y' THEN
|
||||
--
|
||||
l_unicode_message := TRUE;
|
||||
--
|
||||
END IF;
|
||||
--
|
||||
SELECT sms_seq.NEXTVAL
|
||||
INTO l_file_name
|
||||
FROM DUAL;
|
||||
--
|
||||
l_file_name := 'msg'||l_file_name||'.sms';
|
||||
--
|
||||
-- Open the file for writing
|
||||
--
|
||||
l_file_handle := utl_file.fopen ( location => UPPER(c_directory_name)
|
||||
, filename => l_file_name
|
||||
, open_mode => 'w'
|
||||
, max_linesize => 1024
|
||||
);
|
||||
--
|
||||
utl_file.put_line( l_file_handle
|
||||
, 'To: ' || LTRIM(LTRIM(p_sms_number,'+'),'0'));
|
||||
--
|
||||
IF l_unicode_message THEN
|
||||
--
|
||||
utl_file.put_line( l_file_handle
|
||||
, 'Alphabet: unicode'
|
||||
);
|
||||
--
|
||||
utl_file.put_line( l_file_handle
|
||||
, ''
|
||||
);
|
||||
--
|
||||
utl_file.put_line( l_file_handle
|
||||
, p_sms_message
|
||||
);
|
||||
--
|
||||
ELSE
|
||||
--
|
||||
utl_file.put_line( l_file_handle
|
||||
, ''
|
||||
);
|
||||
--
|
||||
utl_file.put_line( l_file_handle
|
||||
, p_sms_message
|
||||
);
|
||||
--
|
||||
END IF;
|
||||
--
|
||||
utl_file.fclose(l_file_handle);
|
||||
--
|
||||
END IF;
|
||||
--
|
||||
END send_sms_message;
|
||||
--
|
||||
PROCEDURE send_smtp_email ( from_name VARCHAR2
|
||||
, to_names VARCHAR2
|
||||
, subject VARCHAR2
|
||||
, message VARCHAR2 DEFAULT NULL
|
||||
, html_message VARCHAR2 DEFAULT NULL
|
||||
, cc_names VARCHAR2 DEFAULT NULL
|
||||
, bcc_names VARCHAR2 DEFAULT NULL
|
||||
, filename VARCHAR2 DEFAULT NULL
|
||||
, file_mime_type VARCHAR2 DEFAULT NULL
|
||||
, filecontents BLOB DEFAULT NULL
|
||||
) IS
|
||||
--
|
||||
smtp_host VARCHAR2(256) := cout_system_configuration.get_configuration_item('SYSTEM_SMTP_SERVER');
|
||||
smtp_port NUMBER := cout_system_configuration.get_configuration_item('SYSTEM_SMTP_PORT');
|
||||
--
|
||||
boundary CONSTANT VARCHAR2(256) := 'CES.Boundary.DACA587499938898'||TO_CHAR(SYSDATE, 'DDMMYYYYHH24MISS');
|
||||
--
|
||||
crlf VARCHAR2(2) := chr(13) || chr(10);
|
||||
mesg VARCHAR2(32767);
|
||||
conn utl_smtp.connection;
|
||||
--
|
||||
max_base64_line CONSTANT pls_integer := 76 / 4 * 3; --32000;
|
||||
--
|
||||
ind PLS_INTEGER;
|
||||
len PLS_INTEGER;
|
||||
--
|
||||
BEGIN
|
||||
conn := utl_smtp.open_connection(smtp_host
|
||||
,smtp_port);
|
||||
utl_smtp.helo(conn
|
||||
,smtp_host);
|
||||
utl_smtp.mail(conn
|
||||
,from_name);
|
||||
utl_smtp.rcpt(conn
|
||||
,to_names);
|
||||
IF cc_names IS NOT NULL THEN
|
||||
utl_smtp.rcpt(conn
|
||||
,cc_names);
|
||||
END IF;
|
||||
IF bcc_names IS NOT NULL THEN
|
||||
utl_smtp.rcpt(conn
|
||||
,bcc_names);
|
||||
END IF;
|
||||
utl_smtp.open_data(conn);
|
||||
|
||||
mesg := 'Date: ' || TO_CHAR(systimestamp
|
||||
, 'dd Mon yyyy hh24:mi:ss tzhtzm','NLS_DATE_LANGUAGE=English')|| crlf ||
|
||||
'From: ' ||
|
||||
from_name || crlf || 'Subject: ' || subject || crlf || 'To: ' ||
|
||||
to_names || crlf;
|
||||
IF cc_names IS NOT NULL THEN
|
||||
mesg := mesg || 'Cc: ' || cc_names || crlf;
|
||||
END IF;
|
||||
IF bcc_names IS NOT NULL THEN
|
||||
mesg := mesg || 'Bcc: ' || bcc_names || crlf;
|
||||
END IF;
|
||||
mesg := mesg || 'Mime-Version: 1.0' || crlf ||
|
||||
'Content-Type: multipart/mixed; boundary="' || boundary || '"' || crlf || crlf ||
|
||||
'This is a Mime message, which your current mail reader may not' || crlf ||
|
||||
'understand. Parts of the message will appear as text. If the remainder' || crlf ||
|
||||
'appears as random characters in the message body, instead of as' || crlf ||
|
||||
'attachments, then you''ll have to extract these parts and decode them' || crlf ||
|
||||
'manually.' || crlf || crlf;
|
||||
utl_smtp.write_data(conn
|
||||
,mesg);
|
||||
IF message IS NOT NULL THEN
|
||||
mesg := '--' || boundary || crlf ||
|
||||
'Content-Type: text/plain; name="message.txt"; charset="iso-8859-2"' || crlf ||
|
||||
'Content-Disposition: inline; filename="message.txt"' || crlf ||
|
||||
'Content-Transfer-Encoding: quoted-printable' || crlf || crlf;
|
||||
|
||||
mesg := '--' || boundary || crlf ||
|
||||
'Content-Type: text/plain; charset="iso-8859-2"' || crlf ||
|
||||
'Content-Disposition: inline; ' || crlf || crlf;
|
||||
utl_smtp.write_data(conn
|
||||
,mesg);
|
||||
IF SUBSTR(message
|
||||
,1
|
||||
,1) = '/' THEN
|
||||
utl_smtp.write_data(conn
|
||||
,crlf);
|
||||
ELSE
|
||||
utl_smtp.write_data(conn
|
||||
,message || crlf);
|
||||
END IF;
|
||||
END IF;
|
||||
--
|
||||
IF html_message IS NOT NULL THEN
|
||||
mesg := '--' || boundary || crlf ||
|
||||
'Content-Type: text/html; name="message.html"; charset=US-ASCII' || crlf ||
|
||||
'Content-Disposition: inline; filename="message.html"' || crlf ||
|
||||
'Content-Transfer-Encoding: 7bit' || crlf || crlf;
|
||||
utl_smtp.write_data(conn
|
||||
,mesg);
|
||||
IF SUBSTR(html_message
|
||||
,1
|
||||
,1) = '/' THEN
|
||||
utl_smtp.write_data(conn
|
||||
,crlf);
|
||||
ELSE
|
||||
utl_smtp.write_data(conn
|
||||
,html_message || crlf);
|
||||
END IF;
|
||||
END IF;
|
||||
--
|
||||
IF filecontents IS NOT NULL
|
||||
AND file_mime_type IS NOT NULL THEN
|
||||
--
|
||||
mesg := crlf || '--' || boundary || crlf;
|
||||
mesg := mesg || 'Content-Type: ' || file_mime_type || '; name="' ||
|
||||
filename || '"' || crlf || 'Content-Disposition: attachment; filename="' || filename || '"' || crlf;
|
||||
mesg := mesg || 'Content-Transfer-Encoding: base64' || crlf ||
|
||||
crlf;
|
||||
utl_smtp.write_data(conn
|
||||
,mesg);
|
||||
--
|
||||
ind := 1;
|
||||
len := dbms_lob.getlength(filecontents);
|
||||
--
|
||||
WHILE ( ind < len ) LOOP
|
||||
IF (ind + max_base64_line < len) THEN
|
||||
--
|
||||
utl_smtp.write_raw_data( conn
|
||||
, utl_encode.base64_encode(dbms_lob.substr(filecontents, max_base64_line, ind))
|
||||
);
|
||||
--
|
||||
ELSE
|
||||
--
|
||||
utl_smtp.write_raw_data( conn
|
||||
, utl_encode.base64_encode(dbms_lob.substr(filecontents, (len+1 - ind), ind))
|
||||
);
|
||||
--
|
||||
END IF;
|
||||
--
|
||||
utl_smtp.write_data(conn
|
||||
,crlf);
|
||||
--
|
||||
ind := ind + max_base64_line;
|
||||
--
|
||||
END LOOP;
|
||||
--
|
||||
utl_smtp.write_data(conn
|
||||
,crlf);
|
||||
--
|
||||
END IF;
|
||||
--
|
||||
mesg := crlf || '--' || boundary || '--' || crlf;
|
||||
utl_smtp.write_data(conn
|
||||
,mesg);
|
||||
--
|
||||
-- Close the SMTP connection
|
||||
--
|
||||
utl_smtp.close_data(conn);
|
||||
utl_smtp.quit(conn);
|
||||
--
|
||||
END send_smtp_email;
|
||||
--
|
||||
PROCEDURE send_smime_email ( from_name VARCHAR2
|
||||
, to_names VARCHAR2
|
||||
, subject VARCHAR2
|
||||
, message VARCHAR2 DEFAULT NULL
|
||||
, html_message VARCHAR2 DEFAULT NULL
|
||||
, cc_names VARCHAR2 DEFAULT NULL
|
||||
, bcc_names VARCHAR2 DEFAULT NULL
|
||||
, filename VARCHAR2 DEFAULT NULL
|
||||
, file_mime_type VARCHAR2 DEFAULT NULL
|
||||
, filecontents BLOB DEFAULT NULL
|
||||
) IS
|
||||
--
|
||||
l_job VARCHAR2(1000);
|
||||
l_lock NUMBER;
|
||||
--
|
||||
BEGIN
|
||||
--
|
||||
IF c_mslo_id = 0 THEN
|
||||
--
|
||||
INSERT INTO messaging_log
|
||||
(mslo_id
|
||||
,from_name
|
||||
,to_names
|
||||
,subject
|
||||
,message
|
||||
,html_message
|
||||
,cc_names
|
||||
,bcc_names
|
||||
,filename
|
||||
,file_mime_type
|
||||
,filecontents
|
||||
,senton)
|
||||
VALUES
|
||||
( mslo_seq.nextval
|
||||
, from_name
|
||||
, to_names
|
||||
, subject
|
||||
, NVL(message, ' ')
|
||||
, NULL
|
||||
, NULL
|
||||
, NULL
|
||||
, filename
|
||||
, file_mime_type
|
||||
, filecontents
|
||||
, NULL) RETURNING mslo_id INTO c_mslo_id;
|
||||
--
|
||||
COMMIT; -- need this here for the external smime call
|
||||
--
|
||||
END IF;
|
||||
--
|
||||
l_job := 'email_'||c_mslo_id;
|
||||
--
|
||||
l_lock := dbms_lock.request(id => 101202303
|
||||
,lockmode => 6
|
||||
,timeout => 30);
|
||||
--
|
||||
dbms_scheduler.create_job(job_name => l_job
|
||||
,job_type => 'EXECUTABLE'
|
||||
,job_action => cout_system_configuration.get_configuration_item('G_SMIME_LOCATION') || '\smime.bat'
|
||||
,number_of_arguments => 1
|
||||
,enabled => FALSE
|
||||
,job_class => 'BATCH_EMAIL_CLASS'
|
||||
);
|
||||
--
|
||||
dbms_scheduler.set_job_argument_value(l_job,1,TO_CHAR(c_mslo_id));
|
||||
--
|
||||
dbms_scheduler.enable(l_job);
|
||||
dbms_lock.sleep(2);
|
||||
l_lock := dbms_lock.release(id => 101202303);
|
||||
--
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
--
|
||||
cout_err.report_and_go;
|
||||
--
|
||||
END send_smime_email;
|
||||
--
|
||||
PROCEDURE send_email ( from_name VARCHAR2
|
||||
, to_names VARCHAR2
|
||||
, subject VARCHAR2
|
||||
, message VARCHAR2 DEFAULT NULL
|
||||
, html_message VARCHAR2 DEFAULT NULL
|
||||
, cc_names VARCHAR2 DEFAULT NULL
|
||||
, bcc_names VARCHAR2 DEFAULT NULL
|
||||
, filename VARCHAR2 DEFAULT NULL
|
||||
, file_mime_type VARCHAR2 DEFAULT NULL
|
||||
, filecontents BLOB DEFAULT NULL
|
||||
) IS
|
||||
BEGIN
|
||||
--
|
||||
IF NVL(UPPER(cout_system_configuration.get_configuration_item('EMAIL_METHOD')), 'SMTP') = 'SMTP' THEN
|
||||
--
|
||||
send_smtp_email ( from_name => from_name
|
||||
, to_names => to_names
|
||||
, subject => subject
|
||||
, message => message
|
||||
, html_message => html_message
|
||||
, cc_names => cc_names
|
||||
, bcc_names => bcc_names
|
||||
, filename => filename
|
||||
, file_mime_type => file_mime_type
|
||||
, filecontents => filecontents
|
||||
);
|
||||
--
|
||||
ELSIF UPPER(cout_system_configuration.get_configuration_item('EMAIL_METHOD')) = 'SMIME' THEN
|
||||
--
|
||||
send_smime_email ( from_name => from_name
|
||||
, to_names => to_names
|
||||
, subject => subject
|
||||
, message => message
|
||||
, html_message => html_message
|
||||
, cc_names => cc_names
|
||||
, bcc_names => bcc_names
|
||||
, filename => filename
|
||||
, file_mime_type => file_mime_type
|
||||
, filecontents => filecontents
|
||||
);
|
||||
--
|
||||
ELSE
|
||||
--
|
||||
cout_err.report_and_stop('-20001','Unknown Email Method');
|
||||
--
|
||||
END IF;
|
||||
--
|
||||
END send_email;
|
||||
--
|
||||
PROCEDURE send_background_email ( from_name VARCHAR2
|
||||
, to_names VARCHAR2
|
||||
, subject VARCHAR2
|
||||
, message VARCHAR2 DEFAULT NULL
|
||||
, html_message VARCHAR2 DEFAULT NULL
|
||||
, cc_names VARCHAR2 DEFAULT NULL
|
||||
, bcc_names VARCHAR2 DEFAULT NULL
|
||||
, filename VARCHAR2 DEFAULT NULL
|
||||
, file_mime_type VARCHAR2 DEFAULT NULL
|
||||
, filecontents BLOB DEFAULT NULL
|
||||
) IS
|
||||
--
|
||||
l_job NUMBER;
|
||||
l_mslo_id messaging_log.mslo_id%TYPE;
|
||||
--
|
||||
BEGIN
|
||||
--
|
||||
INSERT INTO messaging_log
|
||||
(mslo_id
|
||||
,from_name
|
||||
,to_names
|
||||
,subject
|
||||
,message
|
||||
,html_message
|
||||
,cc_names
|
||||
,bcc_names
|
||||
,filename
|
||||
,file_mime_type
|
||||
,filecontents
|
||||
,senton)
|
||||
VALUES
|
||||
( mslo_seq.nextval
|
||||
, from_name
|
||||
, to_names
|
||||
, subject
|
||||
, NVL(message, ' ')
|
||||
, html_message
|
||||
, cc_names
|
||||
, bcc_names
|
||||
, filename
|
||||
, file_mime_type
|
||||
, filecontents
|
||||
, NULL)
|
||||
RETURNING mslo_id INTO l_mslo_id;
|
||||
--
|
||||
DBMS_JOB.SUBMIT ( l_job
|
||||
, 'amfr_messaging.send_email_job ( '||l_mslo_id||' );'
|
||||
);
|
||||
--
|
||||
END send_background_email;
|
||||
--
|
||||
PROCEDURE send_email_job ( p_job IN NUMBER ) IS
|
||||
--
|
||||
l_msg_rec messaging_log%ROWTYPE;
|
||||
--
|
||||
BEGIN
|
||||
--
|
||||
SELECT *
|
||||
INTO l_msg_rec
|
||||
FROM messaging_log ml
|
||||
WHERE ml.mslo_id = p_job;
|
||||
--
|
||||
c_mslo_id := p_job;
|
||||
--
|
||||
amfr_messaging.send_email ( from_name => l_msg_rec.from_name
|
||||
, to_names => l_msg_rec.to_names
|
||||
, subject => l_msg_rec.subject
|
||||
, message => l_msg_rec.message
|
||||
, html_message => l_msg_rec.html_message
|
||||
, cc_names => l_msg_rec.cc_names
|
||||
, bcc_names => l_msg_rec.bcc_names
|
||||
, filename => l_msg_rec.filename
|
||||
, file_mime_type => l_msg_rec.file_mime_type
|
||||
, filecontents => l_msg_rec.filecontents
|
||||
);
|
||||
--
|
||||
UPDATE messaging_log ml
|
||||
SET ml.senton = sysdate
|
||||
WHERE ml.mslo_id = p_job;
|
||||
--
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
cout_err.report_and_stop;
|
||||
END send_email_job;
|
||||
--
|
||||
FUNCTION about RETURN VARCHAR2 IS
|
||||
BEGIN
|
||||
--
|
||||
RETURN(g_package_name || CHR(10) || g_revision || CHR(10) || g_header);
|
||||
--
|
||||
END about;
|
||||
--
|
||||
BEGIN
|
||||
/**
|
||||
-- Initialization
|
||||
*/
|
||||
NULL;
|
||||
--
|
||||
END amfr_messaging;
|
||||
/
|
||||
Reference in New Issue
Block a user