Mailversand „Klassischer“ Weg (BCS) vs. ABAP Cloud

Der Versand von E‑Mails in SAP-Systemen ist seit langem Standard, sei es für Bestellbestätigungen, interne Benachrichtigungen oder Systemmeldungen. Mit dem Wechsel zur ABAP Cloud hat sich die Technologie für Mailversand jedoch verändert. Im folgenden Beitrag vergleichen wir den modernen ABAP Cloud Ansatz mit der „klassischen“ Variante des Mailversands.
Dies ist eine „Neuauflage“ des Blogs „ABAP-Klasse CL_BCS – Mailversand aus ABAP“ von Domi.

„Klassischer“ Mailversand (BCS)

Übersicht der benötigten Klassen/Methoden

Klasse/MethodeNutzung
CL_BCS=>CREATE_PERSISTENT( )Erzeugung des Sendeauftrags
CL_DOCUMENT_BCS=>CREATE_DOCUMENT( )Erzeugung des Office-Dokuments
CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADRESSErzeugung der Mail-Adressen

CL_BCS=>CREATE_PERSISTENT – Erzeugung des Sendeauftrags

Zuerst erzeugen wir unseren Sendeauftrag:

CL_DOCUMENT_BCS – Erzeugung des Office-Documents

Als nächstes benötigen wir das „Office Document“, also den Inhalt, Empfänger, Betreff und ggf. den Anhang der Mail.
Dafür nutzen wir die Klasse cl_document_bcs und erzeugen mit der statischen Methode create_document( ) unser Office Document.

  • i_type: Bestimmt den Typ der übergebenen Datei, zB. ‚HTM‘ für eine HTML Datei, ‚TXT‘ für eine Text Datei, ‚BIN‘ für binäre Dateien (wie zB. PDFs)
  • i_subject: Hier setzen wir den Inhalt für die Betreff-Zeile
  • i_text/i_hex: ist als Tabelle mit dem eigentlichen Text bzw. den Binärdaten zu übergeben

Mit weiteren optionalen Parametern wie zB. i_importance oder i_sensitivity lassen sich Priorität bzw. Vertraulichkeit einstellen.

Wie erwähnt muss i_text/i_hex der Inhalt als Tabelle des Typs soli_tab übergeben werden:

E-Mail Anhang hinzufügen

Um einen Anhang hinzuzufügen müssen wir auch diesen in eine Tabelle des Typs soli_tab konvertieren. Wir gehen in diesem Beispiel davon aus, dass wir die PDF-Datei bereits als xstring zur Verfügung haben und nutzen die static Methode xstring_to_solix( ) der Klasse CL_BCS_CONVERT:

Das Hinzufügen als Anhang setzen wir mit der Instanzmethode add_attachment der Klasse CL_DOCUMENT_BCS um:

  • i_attachment_type bestimmt den Typ der übergebenen Datei ähnlich wie i_type bei Aufruf von create_document.
  • i_attachment_subject bestimmt den Namen der angehängten Datei
  • i_attachment_size (optional) gibt die Dateigröße an

i_att_content_hex verlangt den Anhang als Binärdaten im Format solix_tab.

Nachdem wir unseren Mail Body und den Anhang vorbereitet haben müssen wir unser „Office Document“ im Sendeauftrag mit set_document( ) setzen:

CL_CAM_ADDRESS_BCS – Vorbereiten der Sender-Empfängeradressen

Ebenso müssen wir noch Sender und Empfänger setzen. Dazu benötigen wir zuerst die statische Methode CREATE_INTERNET_ADDRESS der Klasse CL_CAM_ADDRESS_BCS um die E-Mail-Adressen korrekt zu erzeugen (Die Methode erwartet ein Objekt, welches das Interface IF_RECIPIENT_BCS implementiert) und setzen dann Sender/Empfänger in unserem Sendeauftrag:

Man kann auch direkt mit dem SAP Benutzer arbeiten, so wie im Beispiel verwendet man dann CL_SAPUSER_BCS=>create ( ).

Über folgende optionale Parameter lassen sich noch weitere Einstellungen treffen:

  • i_express: Ist der Empfänger ein SAP Benutzer erhält er bei der nächsten Prozessierung des PBO-Events eine Popup-Benachrichtigung mit dem Hinweis auf eine neue Nachricht
  • i_copy: Empfänger erhält die Nachricht als Kopie
  • i_blind_copy: Empfänger erhält die Nachricht als Blindkopie
  • i_no_forward: Ist der Empänger SAP Benutzer kann die Nachricht nicht weitergeleitet werden

Senden der E-Mail

Nachdem wir den Sende-Auftrag und den Mail-Body erstellt haben, ggf. Anhänge hinzugefügt haben, die Adressen gesetzt haben und sonstige Einstellungen getroffen haben, können wir nun endlich die Methode send( ) aufrufen:

Wichtig: Am Ende muss ein COMMIT WORK folgen, damit die E-Mail dem Sendeprozess übergeben wird.

ABAP Cloud Mailversand

Prerequisites

Dadurch, dass die ABAP Environment normalerweise keinen eigenen Mailserver hat, muss man eine Konfiguration vornehmen, um einen Cloud SMTP Server anschließen zu können.
Wie man das zum Beispiel mit einem Office365 Server macht haben die großartigen software-heroes.com in diesem Blog erklärt: BTP Anbindung Office365

Übersicht der benötigten Klassen:

KlasseNutzung
CL_BCS_MAIL_MESSAGE=>
CREATE_INSTANCE( )
Erzeugung der Mail-Instanz
CL_BCS_MAIL_TEXTPART=>CREATE_INSTANCE( )Erzeugung des Mail-Bodys
CL_BCS_MAIL_BINARYPART=>CREATE_INSTANCE( )Erzeugung eines Mail-Anhangs aus Binärdaten

Nun schauen wir uns die moderne Versand-Methode über ABAP Cloud an.

CL_BCS_MAIL_MESSAGE – Erzeugung des Mail Objekts

Die Hauptklasse die wir verwenden ist CL_BCS_MAIL_MESSAGE, sie ist tatsächlich auch (fast) die einzige die wir benötigen. Zu Beginn erstellen wir eine Instanz der Klasse:

Über die Methoden set_sender( ), set_subject( ) und add_recipient( ) können wir ohne große Umwege direkt Betreff, Empfänger und Sender setzen:

Die Enums TO, CC oder BCC ermöglichen ein einfaches einstellen von Kopien bzw. Blindkopien.

iv_address benötigt ein Objekt des Typs cl_bcs_mail_message=>ty_address

CL_BCS_MAIL_TEXTPART – Erzeugen des Mail-Bodys

Um den Mail-Body zu setzen, erzeugen wir zuerst eine Instanz der Klasse mittels CL_BCS_MAIL_TEXTPART=>create_instance( ).
Hier können wir einfach einen String übergeben und müssen nicht vorher in eine Tabelle konvertieren.
Mit set_main( ) setzen wir den Mail-Body in unserer Mail Instanz:

iv_content_type erlaubt es hier direkt den MIME-Type (Multipurpose Internet Mail Extensions) anzugeben (zB. ‚text/html‘, ‚application/pdf‘, etc.).

Der Betreff wird über set_subject( ) gesetzt:

CL_BCS_MAIL_BINARYPART – Erzeugen eines Anhangs

Um einen Anhang hinzuzufügen nutzen wir die Methode add_attachment( ) unserer Mail Instanz.
Auch hier erzeugen wir zuerst eine Instanz unseres Anhangs mit CL_BCS_MAIL_BINARYPART:

  • iv_content: Nimmt bereits einen XString entgegen, keine Konvertierung notwendig
  • iv_content_type: Verhält sich gleich wie schon bei CL_BCS_MAIL_TEXTPART=>create_instance( )
  • iv_filename: setzt den Dateinamen

Senden der E-Mail

Damit haben wir bereits alles erledigt und können über den Aufruf von send( ) unsere Mail abschicken:

  • et_status: liefert eine Status Tabelle für jeden einzelnen Empfänger
  • ev_mail_status: gibt den Status der gesamten Mail zurück

Was vielleicht auffällt ist, dass wir in der modernen Variante über ABAP Cloud weder die Möglichkeit haben die Priorität der E-Mail, noch das Sensitivitätslevel einzustellen.
Ebenso fehlt die Möglichkeit direkt mit dem SAP Benutzer zu arbeiten, dementsprechend fehlen auch die Optionen der Popup-Benachrichtigung (i_express bei add_recipient( ) ) und des Untersagens einer Weiterleitung (i_no_forward bei add_recipient( ) ).

Zusammenfassung/Gegenüberstellung

AspektKlassischer Mailversand (BCS)ABAP Cloud Mailversand
HauptklasseCL_BCSCL_BCS_MAIL_MESSAGE
ErstellungCL_BCS=>
CREATE_PERSISTENT( ) erzeugt Sendeauftrag
CL_BCS_MAIL_MESSAGE=>
CREATE_INSTANCE( ) erzeugt Mailobjekt
Mail-BodyCL_DOCUMENT_BCS=>
CREATE_DOCUMENT( ) – Inhalt als soli_tab übergeben
CL_BCS_MAIL_TEXTPART=>CREATE_INSTANCE( ) – Inhalt direkt als string übergeben
AnhängeADD_ATTACHMENT( ) mit Konvertierung z. B. CL_BCS_CONVERT=>
XSTRING_TO_SOLIX notwendig
ADD_ATTACHMENT( ) mit CL_BCS_MAIL_BINARYPART=>CREATE_INSTANCE( ) – nimmt direkt xstring
Sender setzenSET_SENDER( )
Erzeugung einer „Internet Address“ CREATE_INTERNET_ADDRESS( ) oder SAP Benutzer CL_SAPUSER_BCS=>
CREATE( sy-uname )
notwendig
SET_SENDER( )
E-Mail Adresse als Type CL_BCS_MAIL_MESSAGE=>
TY_ADDRESS
Empfänger setzen
ADD_RECIPIENT( )
ADD_RECIPIENT(
iv_address = …
iv_copy = TO/CC/BCC ) – nur E-Mail-Adresse möglich
Priorität / SensitivitätÜber Parameter i_importance (Priorität) und i_sensitivity (Vertraulichkeit) im CREATE_DOCUMENT( ) möglichNicht verfügbar
Weitere Optioneni_express, i_no_forward (nur bei SAP-Benutzern wirksam)Keine vergleichbaren Optionen
Formatunterstützungi_type für Dokumenttyp (HTM, TXT, BIN)
iv_content_type für MIME-Type (text/html, application/pdf, etc.)
EinsatzgebietKlassisches ABAP (On-Premise, Suite, S/4HANA On-Prem)ABAP Cloud / Steampunk / S/4HANA Cloud

Fazit

Der klassische BCS-Mailversand in ABAP bietet nach wie vor Flexibilität, inklusive Funktionen wie Prioritäts- und Sensitivitätseinstellungen, direkter SAP-Benutzeradressierung und steuerbare Optionen für den Nachrichtentransport.
Mit dem Umstieg auf ABAP Cloud vereinfacht sich jedoch der Prozess. Weniger Klassen, kein umständliches Konvertieren von Inhalten, und eine klar strukturierte API machen den Code kürzer und leichter verständlich.
Allerdings verzichtet die moderne Variante bewusst auf bestimmte Features wie Priorität, Sensitivität oder den direkten Versand an SAP-Benutzer, um Sicherheit und Standardisierung zu gewährleisten.
Wer komplexe Mailfunktionen benötigt, muss daher in ABAP Cloud auf ergänzende Services oder APIs zurückgreifen.
Für den Großteil der Anwendungsfälle reicht jedoch die integrierte CL_BCS_MAIL_MESSAGE aus.

Weitere spannende Themen der SAP-Community

Veröffentlicht in Nicht kategorisiert.