This is a test message to test the length of the message box.
Login
ABAP Cloud Mails
Erstellt von Software-Heroes

ABAP Cloud - Mails

149

Mails mit ABAP Cloud versenden? Eigentlich so leicht wie immer, nur mit kleinen Unterschieden, die wir in diesem Artikel klären wollen.

Werbung


In diesem Artikel wirst du etwas mehr zu den Gemeinsamkeiten und den Unterschieden beim Erstellen und Versenden von E-Mails erfahren. Dabei werden wir auf die beiden Welten On-Premise und das ABAP Environment eingehen. Vor allem bei der Konfiguration unterscheiden sich die beiden Umgebungen.

 

Einleitung

Der Versand von E-Mails wird für unterschiedliche Zwecke im System verwendet. Egal ob du deinem Kollegen den aktuellen Finanzreport zukommen lassen, selbst eine Benachrichtigung über den letzten ABAP Unit Test bekommen oder einfach nur bei Fehlern informiert werden möchtest. In sehr vielen Fällen wird auf die klassische Mail gesetzt.

Diese kannst du nun sehr klassisch als Plain-Text verschicken oder als HTML Dokument aufbereiten, um dich von den Mails der Kollegen zu unterscheiden. Für alles stehen dir verschiedene Klassen im System zur Verfügung.

 

Vergleich

In diesem Abschnitt werden wir uns einmal die klassische Welt anschauen und auf die neue Welt mit ABAP Cloud eingehen.

 

Konfiguration

Für die Konfiguration des Mailservers On-Premise kann über die Transaktion SCOT die entsprechende Einstellung im System vorgenommen werden und der Mailserver hinterlegt werden.

 

Für die neue Versandmethode muss eine neue Konfiguration hinterlegt werden. Je nach System gibt es hier unterschiedliche Möglichkeiten der Konfiguration. Wie du im ABAP Environment die Mailanbindung machst, erfährst du in diesem Artikel. On-Premise muss dazu die Transaktion SBCS_MAIL_CONFIGSMTP aufgerufen werden. Am Ende sollte eine Default-Konfiguration in der Tabelle BCS_MSG_SMTPCONF zu finden sein.

 

Erstellung

Im klassischen ABAP setzen wir vor allem auf die Klassen CL_BCS und CL_DOCUMENT_BCS, um unsere Mail zu erstellen und zum Abschluss zu versenden. Zuerst einmal erstellen wir dazu eine Anfrage, im Anschluss übergeben wir das Dokument und Informationen zu Sender und Empfänger. Wichtig ist dabei, dass am Ende ein COMMIT WORK folgt, damit die E-Mail an den Sendeprozess übergeben wird.

DATA(lo_request) = cl_bcs=>create_persistent( ).

DATA(lt_text) = VALUE soli_tab(
    ( line = `<h2>Hello World</h2><p>This is my HTML Mail from <strong>Classic ABAP</strong>.</p>` ) ).

DATA(lo_document) = cl_document_bcs=>create_document( i_type       = 'HTM'
                                                      i_subject    = 'Test from Classic ABAP'
                                                      i_text       = lt_text
                                                      i_importance = '5' ).
lo_request->set_document( lo_document ).

DATA(lo_address) = cl_cam_address_bcs=>create_internet_address( CONV #( c_sender ) ).
lo_request->set_sender( lo_address ).

DATA(lo_receiver1) = cl_cam_address_bcs=>create_internet_address( CONV #( c_receiver1 ) ).
lo_request->add_recipient( i_recipient = lo_receiver1
                           i_copy      = abap_false ).
DATA(lo_receiver2) = cl_cam_address_bcs=>create_internet_address( CONV #( c_receiver2 ) ).
lo_request->add_recipient( i_recipient = lo_receiver2
                           i_copy      = abap_true ).

COMMIT WORK.

 

In ABAP Cloud ist die Hauptklasse für die Erstellung der E-Mails CL_BCS_MAIL_MESSAGE, welche alle nötigen Funktionen zum Erstellen und Versenden im Bauch hat. Dazu gibt es die Klasse CL_BCS_MAIL_BODYPART um Texte und Anhänge für die E-Mail zu erzeugen. Neben der Body Klasse, gibt es auch die beiden Unterklassen CL_BCS_MAIL_TEXTPART für reine Texte und CL_BCS_MAIL_BINARYPART für Binärformate.

DATA(lo_mail) = cl_bcs_mail_message=>create_instance( ).

lo_mail->set_sender( c_sender ).

lo_mail->add_recipient( iv_address = c_receiver1
                        iv_copy    = cl_bcs_mail_message=>to ).
lo_mail->add_recipient( iv_address = c_receiver2
                        iv_copy    = cl_bcs_mail_message=>cc ).

lo_mail->set_subject( 'Test from ABAP Cloud' ).

DATA(ld_content) = `<h2>Hello World</h2><p>This is my HTML Mail from <strong>ABAP Cloud</strong>.</p>`.
lo_mail->set_main( cl_bcs_mail_textpart=>create_instance( iv_content      = ld_content
                                                          iv_content_type = 'text/html' ) ).

lo_mail->send( IMPORTING et_status      = DATA(lt_status)
                         ev_mail_status = DATA(ld_mail_status) ).

 

Im Beispiel erzeugen wir die Instanz der Mail-Klasse, setzen den Sender, die Empfänger und die Texte und Senden die Nachricht. Als Ergebnis erhalten wir pro Empfänger einen Status, sowie einen Gesamtstatus der E-Mail.

 

Monitoring

In der SAP GUI gibt es die Transaktion SOST, SOSG oder SOSB, um sich die Sendeaufträge anzuschauen und wie der aktuelle Status dazu ist. In der Transaktion kannst du auch nach verschiedenen Einstellungen filtern, um das gewünschte Ergebnis zu erhalten.

 

Alle E-Mails, die über die neue Cloud API versendet werden, können nur über die entsprechende Fiori App angeschaut werden. Eine entsprechende Meldung erscheint auch, wenn du die SOST öffnest und das Cloud Szenario aktiviert ist. Die Fiori App ist "Monitor Email Transmissions" (F5442).

 

Komplettes Beispiel

Hier das komplette Beispiel zum Versand von E-Mails aus dem System, einmal über den klassischen Weg und einmal über ABAP Cloud. Entsprechende Konfigurationen müssen bereits durchgeführt sein, damit der Versand funktioniert.

CLASS zcl_bs_demo_mail DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.

  PRIVATE SECTION.
    CONSTANTS c_sender    TYPE cl_bcs_mail_message=>ty_address VALUE '<MAIL>'.
    CONSTANTS c_receiver1 TYPE cl_bcs_mail_message=>ty_address VALUE '<MAIL>'.
    CONSTANTS c_receiver2 TYPE cl_bcs_mail_message=>ty_address VALUE '<MAIL>'.

    METHODS classic_mail
      IMPORTING io_out TYPE REF TO if_oo_adt_classrun_out.

    METHODS cloud_mail
      IMPORTING io_out TYPE REF TO if_oo_adt_classrun_out.
ENDCLASS.


CLASS zcl_bs_demo_mail IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    classic_mail( out ).
    cloud_mail( out ).
  ENDMETHOD.


  METHOD classic_mail.
    DATA(lo_request) = cl_bcs=>create_persistent( ).

    DATA(lt_text) = VALUE soli_tab(
        ( line = `<h2>Hello World</h2><p>This is my HTML Mail from <strong>Classic ABAP</strong>.</p>` ) ).

    DATA(lo_document) = cl_document_bcs=>create_document( i_type       = 'HTM'
                                                          i_subject    = 'Test from Classic ABAP'
                                                          i_text       = lt_text
                                                          i_importance = '5' ).
    lo_request->set_document( lo_document ).

    DATA(lo_address) = cl_cam_address_bcs=>create_internet_address( CONV #( c_sender ) ).
    lo_request->set_sender( lo_address ).

    DATA(lo_receiver1) = cl_cam_address_bcs=>create_internet_address( CONV #( c_receiver1 ) ).
    lo_request->add_recipient( i_recipient = lo_receiver1
                               i_copy      = abap_false ).
    DATA(lo_receiver2) = cl_cam_address_bcs=>create_internet_address( CONV #( c_receiver2 ) ).
    lo_request->add_recipient( i_recipient = lo_receiver2
                               i_copy      = abap_true ).

    io_out->write( lo_request->send( ) ).

    COMMIT WORK.
  ENDMETHOD.


  METHOD cloud_mail.
    DATA(lo_mail) = cl_bcs_mail_message=>create_instance( ).

    lo_mail->set_sender( c_sender ).

    lo_mail->add_recipient( iv_address = c_receiver1
                            iv_copy    = cl_bcs_mail_message=>to ).
    lo_mail->add_recipient( iv_address = c_receiver2
                            iv_copy    = cl_bcs_mail_message=>cc ).

    lo_mail->set_subject( 'Test from ABAP Cloud' ).

    DATA(ld_content) = `<h2>Hello World</h2><p>This is my HTML Mail from <strong>ABAP Cloud</strong>.</p>`.
    lo_mail->set_main( cl_bcs_mail_textpart=>create_instance( iv_content      = ld_content
                                                              iv_content_type = 'text/html' ) ).

    lo_mail->send( IMPORTING et_status      = DATA(lt_status)
                             ev_mail_status = DATA(ld_mail_status) ).

    io_out->write( lt_status ).
    io_out->write( |Mail status: { ld_mail_status }| ).
  ENDMETHOD.
ENDCLASS.

 

Am Ende erhalten wir eine formatierte E-Mail im HTML Format. Bei der Formatierung der E-Mail sind dir damit zum Großteil keine Grenzen gesetzt.

 

Verfügbarkeit

Die E-Mail Klassen stehen ab S/4 HANA 2022 zur Verfügung und können wie beschrieben genutzt werden. Der asynchrone Versand von E-Mails (Methode SEND_ASYNC) steht allerdings erst mit S/4 HANA 2023 zur Verfügung, da die Methode auf das Framework bgPF setzt.

 

Fazit

Mit ABAP Cloud gibt es beim Mailversand auch einige Änderungen im System und der Konfiguration. Beim Thema Aufbereitung der Dokumente wird sich wahrscheinlich wenig ändern, wie Dokumente versandt werden allerdings schon.


Enthaltene Themen:
ABAP CloudABAPMail
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


ABAP Cloud - Relevante Objekte

Kategorie - ABAP

Welche Objekte sind in der ABAP Entwicklung eigentlich noch relevant und welche kannst du so langsam in die Mottenkiste packen? Hier erfährst du mehr.

19.11.2024

ABAP Cloud - Sperren

Kategorie - ABAP

Für was musst du Sperren setzen und wie kannst du das leicht in ABAP Cloud machen? In diesem Artikel schauen wir uns den Prozess im Detail an.

08.11.2024

ABAP Cloud - HTTP Client

Kategorie - ABAP

Wie sieht eigentlich der aktuelle HTTP Client in ABAP Cloud aus? Lasst uns einen Blick auf das neue Modell werfen.

01.11.2024

ABAP Cloud - Key User Apps

Kategorie - ABAP

Die Key User Extensibility ist ein Teil von ABAP Cloud, wenn es um die Erweiterung des Core geht, doch wie kannst du die Werkzeuge sinnvoll nutzen und wie ergänzen sie sich?

11.10.2024

ABAP Cloud - JSON Konvertierung

Kategorie - ABAP

Gibt es eine neue API zur Konvertierung von JSON und benötigst du diese für ABAP Cloud? Hier beleuchten wir einmal den Aufbau und die Konvertierung von JSON.

27.09.2024