ALLI#72888 Mail2Melding module implementeren

svn path=/Customer/trunk/; revision=56298
This commit is contained in:
Sander Schepers
2022-06-17 22:05:01 +00:00
parent 847d6ca556
commit 1e48293149

View File

@@ -2993,6 +2993,257 @@ AS
insbes.ins_kenmerkdeel_waarde(+)
AND ( (bes_srtgroep_key != 1623 AND d.ins_srtdeel_key = 9202)
OR (bes_srtgroep_key = 1623 AND d.ins_srtdeel_key = 9201));
/* Formatted on 17/6/2022 23:57:31 (QP5 v5.371) */
CREATE OR REPLACE PROCEDURE alli_processemail (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER)
AS
v_sender prs_perslid.prs_perslid_key%TYPE;
v_kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE;
v_mldstat mld_melding.mld_melding_status%TYPE;
v_stdmelding mld_stdmelding.mld_stdmelding_key%TYPE;
v_errormsg fac_result.fac_result_waarde%TYPE;
v_from VARCHAR2 (4000);
v_body VARCHAR2 (4000);
m_body VARCHAR2 (4000);
v_actie VARCHAR2 (4000);
v_mldkey mld_melding.mld_melding_key%TYPE;
v_mailorigin mld_kenmerk.mld_kenmerk_key%TYPE;
v_attachorigin mld_kenmerk.mld_kenmerk_key%TYPE;
BEGIN
v_sender := 4; --Standaard de persoon Facilitor
v_errormsg := '(0x143)';
v_mailorigin := 462; --Kenmerk_key originele mail-bijlage
v_attachorigin := 461; --Kenmerk_key bijlage uit email
-- Verwijder de Bounce Address Tag Validation
IF pfrom LIKE 'prvs=%'
THEN
v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1);
ELSE
v_from := pfrom;
END IF;
v_body := pbody;
m_body := pbody;
-- DBMS_OUTPUT.PUT_LINE('v_from: '||v_from);
-- Valideer de sender in pfrom: kennen we deze?
SELECT MIN (p.prs_perslid_key), MIN (d.prs_kostenplaats_key)
INTO v_sender, v_kostenplaats
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND p.prs_perslid_verwijder IS NULL
AND UPPER (prs_perslid_email) = UPPER (v_from);
CASE
WHEN UPPER (pto) LIKE 'FACILITAIR@%'
THEN
BEGIN
v_errormsg := '(0x245)' || v_mldkey || psubject || v_actie;
v_stdmelding :=
fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
v_mldstat := 2;
-- Standaard de status in Nieuw (2).
-- pas de omschrijving van de melding aan. Verwijder onnodige html ballast.
v_body := REPLACE (v_body, ' ', ' '); -- spatie
v_body := REPLACE (v_body, '!', '!');
v_body := REPLACE (v_body, '"', CHR (34)); -- double quote
v_body := REPLACE (v_body, '#', '#');
v_body := REPLACE (v_body, '$', '$');
v_body := REPLACE (v_body, '%', '%');
v_body := REPLACE (v_body, '&', '&');
v_body := REPLACE (v_body, ''', CHR (39)); -- single quote
v_body := REPLACE (v_body, '(', '(');
v_body := REPLACE (v_body, ')', ')');
v_body := REPLACE (v_body, '*', '*');
v_body := REPLACE (v_body, '+', '+');
v_body := REPLACE (v_body, ',', ','); -- komma
v_body := REPLACE (v_body, '-', '-'); -- min teken
v_body := REPLACE (v_body, '.', '.'); -- punt
v_body := REPLACE (v_body, '/', '/');
v_body := REPLACE (v_body, ':', ':'); -- dubbele punt
v_body := REPLACE (v_body, '&#x3b;', ';'); -- punt komma
v_body := REPLACE (v_body, '&#x3c;', '<');
v_body := REPLACE (v_body, '&#x3d;', '=');
v_body := REPLACE (v_body, '&#x3e;', '>');
v_body := REPLACE (v_body, '&#x3f;', '?');
v_body := REPLACE (v_body, '&#x40;', '@');
v_body :=
REPLACE (v_body,
' ' || CHR (10) || CHR (13),
CHR (10) || CHR (13)); -- soms komt er ineens een een spatie achter de tag.
EXCEPTION
WHEN OTHERS
THEN
fac.writelog (
'PROCESSEMAIL',
'W',
'Mail kon niet geformateerd worden afzender:'
|| pfrom
|| '['
|| v_errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END;
--Hieronder de acties die gedaan moeten worden.
BEGIN
v_stdmelding :=
fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_melding_omschrijving,
mld_melding_status,
mld_melding_t_uitvoertijd,
mld_stdmelding_key,
mld_alg_locatie_key,
mld_melding_externnr,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES (
'MLD',
4, -- email
SYSDATE,
SUBSTR (
psubject
|| CHR (13)
|| REPLACE (
SUBSTR (
v_body,
1,
4000 - (LENGTH (psubject) + 1)),
CHR (13)
|| CHR (10)
|| CHR (13)
|| CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
NULL,
MLD_T_UITVOERTIJD (5, 'D'),
v_stdmelding,
121, -- Locatie onbekend.
NULL,
v_sender,
v_sender,
v_kostenplaats,
3)
RETURNING mld_melding_key
INTO v_mldkey;
-- DBMS_OUTPUT.PUT_LINE('Melding toegevoegd: ' || v_mldkey);
v_errormsg := '(0x165)';
mld.setmeldingstatus (v_mldkey, 2, v_sender);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Geregistreerd onder melding ' || v_mldkey);
END;
IF v_mldkey IS NOT NULL
THEN
BEGIN
-- Bijlagen toevoegen uit email
v_errormsg :=
'(0x601)' || v_mldkey || psubject || v_actie;
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'kenmerkpath',
'MLD\M'
|| TO_CHAR (TRUNC (v_mldkey / 1000),
'FM0000')
|| '___\M'
|| v_mldkey
|| '\'
|| v_attachorigin
|| '\');
-- Originele email wordt opgeslagen bij de opdracht
v_errormsg :=
'(0x602`)' || v_mldkey || psubject || v_actie;
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'kenmerkpath',
'MLD\M'
|| TO_CHAR (TRUNC (v_mldkey / 1000),
'FM0000')
|| '___\M'
|| v_mldkey
|| '\'
|| v_mailorigin
|| '\');
END;
END IF;
ELSE
v_errormsg :=
'(0x900)'
|| v_mldkey
|| psubject
|| v_actie
|| ' - geen pto herkend';
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', v_errormsg);
END CASE;
EXCEPTION
WHEN OTHERS
THEN
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', v_errormsg);
fac.writelog (
'PROCESSEMAIL',
'E',
'Mail kon niet ingelezen worden afzender:'
|| pfrom
|| '['
|| v_errormsg
|| v_mldkey
|| psubject
|| v_actie
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END;
/
------ payload end ------