22.2.12

E-Mailing aus APEX - How To

Gerade bin ich um Hilfe gebeten worden bzgl. E-Mailing...und gebe die Info hier gerne weiter.

Die Aufgabe: Eine E-Mail an alle User/Nutzer einer Anwendung verschicken, die sich bei meinem Event angemeldet haben; sich also in einer DB Tabelle befinden. Ich habe soetwas mal für eine "EVENT-Verwaltung" realisiert.
In der Oracle Datenbank existiert ja eine E-Mail-Engine mit der Utility UTL_SMTP. Ferner enthält APEX die Funktion: APEX_MAIL.
So kann ich mit APEX_MAIL die UTL_SMTP Funktion der DB nutzen.
Es existiert bei mir die Tabelle ANMELDUNGEN mit den Spalten ANREDE, TITEL,VORNAME, NACHNAME, EMAIL, EVENT, SHOW_NO_SHOW

1. Schritt: Erstellung einer Seite ähnlich eines E-Mail Frontends:


 2. Schritt - E-Mail Prozess erstellen:

begin
  for c1 in (
    select anmeldungen.ID,
        anmeldungen.VORNAME as vorname,
        anmeldungen.TITEL as titel,
        anmeldungen.NACHNAME as name, 
        anmeldungen.EMAIL as email,
        anmeldungen.ANREDE as anrede
    from anmeldungen where SHOW_NO_SHOW ='angemeldet'
and EVENT =:P27_WORKSHOP                 
 ) loop
    -- eMail
    if c1.EMAIL is not null then
      APEX_MAIL.SEND(
        P_TO       =>  c1.EMAIL,
        P_CC       => :P27_COPY,
        P_BCC      => :P27_COPY_BCC,
        P_FROM     => :P27_ERSTELLER,
        P_BODY     => 'Hallo'||' '||c1.ANREDE||' '||c1.TITEL||' '||c1.NAME||','||chr(10)||chr(10)||:P27_BODY,
--        P_BODY_HTML =>'Hallo'||c1.VORNAME||','||chr(10)||chr(10)||:P27_BODY,
        P_SUBJ     => :P27_SUBJECT);
    end if;
end loop;
end;

Alle zu meinem Event angemeldeten User befinden sich in meiner Tabelle ANMELDUNGEN; ich möchte die E-Mail nun nur an Teilnehmer dieses Events versenden - so habe ich eine Selektliste :P27_WORKSHOP eingebaut und grenze darüber die Teilnehmer ein. Hinter der Selektliste befindet sich eine LOV auf meine Tabelle EVENTS 
(LOV etwa: select EVENT_NAME d, EVENT_ID r from EVENTS).
Über den Button " E-Mail versenden" wird obiger Prozess ausgelöst.
Eigentlich fertig..

Optional: E-Mail Log
Um den Überblick zu behalten, wann ich welche Mails rausgeschickt habe, befülle ich die Tabelle  ANMELDUNGEN_MAIL_LOG mittels des Prozesses "60 insert_into_mail_log":

Der Prozess wird ebenfalls über den Versenden Button ausgelöst:
Prozess "insert_into_mail_log":
insert into ANMELDUNGEN_MAIL_LOG (subject,datum,versender)
values (:P27_subject,SYSDATE,:P27_ERSTELLER);

Auf meiner Reportseite sieht es dann so aus:
Oben die Liste der erstellten"E-Mail-Templates" (die ich ja wiederverwenden kann...) und darunter das Mail Log.

Viel Spaß und Erfolg damit !