HPJI#67531 mail direct in Facilitor als melding

svn path=/Customer/trunk/; revision=57202
This commit is contained in:
Sander Schepers
2022-09-08 13:17:15 +00:00
parent 9dc3996b65
commit 13c633ac9c

View File

@@ -2846,6 +2846,279 @@ EXCEPTION
END hpji_monthly;
/
CREATE OR REPLACE PROCEDURE hpji_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_stduitvoer mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE;
v_errormsg fac_result.fac_result_waarde%TYPE;
v_from VARCHAR2 (4000);
v_fromaddr VARCHAR2 (4000);
v_body VARCHAR2 (4000);
m_body 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_stdmelding := fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
v_mailorigin := 2081; --Kenmerk_key originele mail-bijlage
v_attachorigin := 2101; --Kenmerk_key bijlage uit email
-- Verwijder de Bounce Address Tag Validation
v_errormsg := '(0x101)';
IF pfrom LIKE 'prvs=%'
THEN
v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1);
ELSE
v_from := pfrom;
END IF;
v_errormsg := '(0x102)';
-- Indien een mail is doorgestuurd, dan moet er teruggevallen worden op de v_fromaddr.
SELECT fac_result_waarde
INTO v_fromaddr
FROM fac_result
WHERE fac_result_sessionid = psessionid AND fac_result_naam = 'fromaddr';
v_fromaddr := REPLACE (REPLACE (v_fromaddr, '>', ''), '<', '');
v_body := pbody;
m_body := pbody;
-- Valideer de sender in pfrom: kennen we deze?
v_errormsg := '(0x111)';
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 'ICT@%'
THEN
BEGIN
v_errormsg :=
SUBSTR (('(0x201)' || psessionid || pfrom || m_body),
0,
4000);
-- Valideer de sender in pfromaddr: kennen we deze?
-- Bij ict@hpji.facilitor.nl worden de mails via ict@elker.nl doorgestuurd.
-- In fromaddr zit dan het mailadres van de oorspronkelijke melder.
-- Bij ict meldingen mag de fromaddr de v_sender uit v_from overschrijven.
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_fromaddr);
v_errormsg :=
SUBSTR (('(0x202)' || psessionid || pfrom || m_body),
0,
4000);
-- pas de omschrijving van de melding aan. Verwijder onnodige html ballast.
v_body := REPLACE (v_body, '&#x20;', ' '); -- spatie
v_body := REPLACE (v_body, '&#x21;', '!');
v_body := REPLACE (v_body, '&#x22;', CHR (34)); -- double quote
v_body := REPLACE (v_body, '&#x23;', '#');
v_body := REPLACE (v_body, '&#x24;', '$');
v_body := REPLACE (v_body, '&#x25;', '%');
v_body := REPLACE (v_body, '&#x26;', '&');
v_body := REPLACE (v_body, '&#x27;', CHR (39)); -- single quote
v_body := REPLACE (v_body, '&#x28;', '(');
v_body := REPLACE (v_body, '&#x29;', ')');
v_body := REPLACE (v_body, '&#x2a;', '*');
v_body := REPLACE (v_body, '&#x2b;', '+');
v_body := REPLACE (v_body, '&#x2c;', ','); -- komma
v_body := REPLACE (v_body, '&#x2d;', '-'); -- min teken
v_body := REPLACE (v_body, '&#x2e;', '.'); -- punt
v_body := REPLACE (v_body, '&#x2f;', '/');
v_body := REPLACE (v_body, '&#x3a;', ':'); -- 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_errormsg := '(0x211)' || pfrom || psubject;
v_stdmelding := 641; -- Standaardmelding 'ICT vraag/melding' in vakgroeptype ICT
v_mldstat := 2; -- Standaard de status in Nieuw (2).
v_stduitvoer :=
mld.getstduitvoer (v_stdmelding,
NULL,
NULL,
NULL);
v_errormsg := '(0x212)' || pfrom || v_mldkey || psubject;
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_melding_onderwerp,
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, 1, 80),
SUBSTR (
REPLACE (
SUBSTR (v_body, 1, 4000),
CHR (13)
|| CHR (10)
|| CHR (13)
|| CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
v_mldstat,
NULL, -- v_stduitvoer
v_stdmelding,
NULL, -- Locatie onbekend
NULL,
v_sender,
v_sender,
v_kostenplaats,
3)
RETURNING mld_melding_key
INTO v_mldkey;
v_errormsg := '(0x221)';
mld.setmeldingstatus (v_mldkey, v_mldstat, 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 := '(0x231)' || v_mldkey || psubject;
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 := '(0x232`)' || v_mldkey || psubject;
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 || ' - 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
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END;
/
------ payload end ------
SET DEFINE OFF