BTP - Anbindung Office365 E-Mail
In diesem Artikel wollen wir uns anschauen, wie wir einen Office365 Mailserver an das ABAP Environment anschließen und konfigurieren.
Inhaltsverzeichnis
Das ABAP Environment hat normalerweise keinen eigenen Mailserver und braucht daher eine Konfiguration um E-Mails verschicken zu können. In diesem Artikel werden wir auf die Anbindung eines Cloud SMTP Servers eingehen und wie wir diesen an das ABAP Environment anschließen, um E-Mails zu versenden.
Einleitung
Für die Anbindung verwenden wir den Office365 Server, über diesen wickeln die meisten Unternehmen ihr E-Mails ab, wenn sie auf Microsoft Produkte setzen. Dabei arbeiten wir mit einem technischen User und der Basic Authentication (User und Passwort), um uns am Server anzumelden.
Verbindung
Um die Verbindung einzurichten, müssen wir die App "Communication Systems" im Launchpad des ABAP Environment aufrufen. Dort legen wir über "New" ein neues System an. Dabei ist die System ID und der Name egal, kann also frei vergeben werden.
Als Nächstes tragen wir im Abschnitt "Technical Data" Server und Port für Office365 ein, die Daten findest du leicht über die Suchmaschine deiner Wahl:
Nun muss im Abschnitt "Users for Outbound Communication" die Authentifizierung angelegt werden. Dazu wählen wir die Methode User/Passwort, um uns am Server anzumelden.
Für den letzten Schritt müssen wir in die App "Communiation Arrangements" wechseln, um dort das Szenario mit dem System zu verbinden. Über den Button "New" legen wir ein entsprechenden Arrangement an. Das Szenario findest du über die Suchhilfe, wenn du nach "Mail" suchst. Wir benötigen die ID SAP_COM_0548:
Nun muss im Abschnitt "Common Data" nur noch das Szenario mit dem Communication System verbunden werden, damit ist die Grundkonfiguration im System abgeschlossen:
Konfiguration
Nachdem die Verbindung zum Server hergestellt wurde, müssen wir noch das System konfigurieren. Dazu gehört es die Sender und Empfängerlisten zu pflegen, ohne diese Konfiguration kann aus dem System keine Mail verschickt werden. Die API gibt es aktuell nur in Form von ABAP Klassen und nicht als Fiori App, deshalb erfolgt die weitere Konfiguration über eine ausführbare ABAP Klasse.
Setzen
Im ersten Schritt setzen wir die wichtigsten Einstellungen, dazu benötigen wir im ersten Schritt ein Mail Konfigurationsobjekt, dieses erzeugen wir über die entsprechende API:
DATA(lo_config) = cl_bcs_mail_system_config=>create_instance( ).
Über dieses Objekt können wir nun die weiteren Einstellungen setzen, die Prüfung aktivieren, das Verfallsdatum setzen und den Default-Absender setzen:
lo_config->set_address_check_active( abap_true ).
lo_config->set_days_until_mail_expires( 7 ).
lo_config->modify_default_sender_address( iv_default_address = 'BTP-noreply@CONNECT.com'
iv_default_name = '' ).
Ist die Adressprüfung nun aktiviert, müssen wir im nächsten Schritt Absender und Empfänger setzen, sodass wir die E-Mails aus dem System setzen können.
" Set sender
DATA(lt_allowed_sender) = VALUE cl_bcs_mail_system_config=>tyt_sender_domains( ( '*@CONNECT.com' ) ).
lo_config->add_allowed_sender_domains( it_allowed_sender_domains = lt_allowed_sender ).
" Set receiver
DATA(lt_allowed_receiver) = VALUE cl_bcs_mail_system_config=>tyt_recipient_domains( ( '*@CONNECT.com' )
( '*@OTHERS.com' ) ).
lo_config->add_allowed_recipient_domains( it_allowed_rec_domains = lt_allowed_receiver ).
Hinweis: Für die Freischaltung der Domains können wir mit Wildcard arbeiten. Da in unserem Fall der Absender als Default Absender feststeht, reicht die eine Domain. Als Empfänger sollten alle relevanten Domains freigeschaltet werden.
Lesen
Die gesetzte Konfiguration kannst du auch entsprechend lesen, um die Einstellungen zu prüfen und später noch einmal anzupassen. Mit der API hast du so die Möglichkeit, auch eine Anwendung für die Pflege zur Verfügung zu stellen. Ein Beispielcoding für das Lesen der Daten findest du unten im vollständigen Beispiel.
Vollständiges Beispiel
Wie du es bereits aus unseren alten Artikeln gewohnt bist, hier noch einmal das vollständige Beispielcoding in Form der ausführbaren Klasse. Die Methoden in der Main Methode können entsprechend ein- und auskommentiert werden.
CLASS zcl_bs_demo_mail_config DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
PRIVATE SECTION.
METHODS get_configuration
IMPORTING io_out TYPE REF TO if_oo_adt_classrun_out.
METHODS set_configuration
IMPORTING io_out TYPE REF TO if_oo_adt_classrun_out.
ENDCLASS.
CLASS zcl_bs_demo_mail_config IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
get_configuration( out ).
* set_configuration( out ).
ENDMETHOD.
METHOD get_configuration.
DATA(lo_config) = cl_bcs_mail_system_config=>create_instance( ).
io_out->write( |Check active: { lo_config->get_address_check_active( ) }| ).
io_out->write( |Expires: { lo_config->get_days_until_mail_expires( ) }| ).
io_out->write( |Sender domains:| ).
DATA(lt_sender_domains) = lo_config->read_allowed_sender_domains( ).
io_out->write( lt_sender_domains ).
io_out->write( |Receiver domains:| ).
DATA(lt_rec_domains) = lo_config->read_allowed_recipient_domains( ).
io_out->write( lt_rec_domains ).
lo_config->read_default_sender_address( IMPORTING ev_default_sender_address = DATA(ld_address)
ev_default_sender_name = DATA(ld_name) ).
io_out->write( |Sender address: { ld_address }| ).
io_out->write( |Sender name: { ld_name }| ).
ENDMETHOD.
METHOD set_configuration.
DATA(lo_config) = cl_bcs_mail_system_config=>create_instance( ).
TRY.
lo_config->set_address_check_active( abap_true ).
io_out->write( `Check activated` ).
CATCH cx_bcs_mail_config.
io_out->write( `Error in activation` ).
RETURN.
ENDTRY.
TRY.
lo_config->set_days_until_mail_expires( 7 ).
io_out->write( `Expiry days set to 7` ).
CATCH cx_bcs_mail_config.
io_out->write( `Error while set the new days` ).
ENDTRY.
TRY.
DATA(lt_allowed_receiver) = VALUE cl_bcs_mail_system_config=>tyt_recipient_domains( ( '*@CONNECT.com' )
( '*@OTHERS.com' ) ).
lo_config->add_allowed_recipient_domains( it_allowed_rec_domains = lt_allowed_receiver ).
io_out->write( `Allowlist receiver added` ).
CATCH cx_bcs_mail_config.
io_out->write( `Error in allowlist receiver` ).
ENDTRY.
TRY.
DATA(lt_allowed_sender) = VALUE cl_bcs_mail_system_config=>tyt_sender_domains( ( '*@CONNECT.com' ) ).
lo_config->add_allowed_sender_domains( it_allowed_sender_domains = lt_allowed_sender ).
io_out->write( `Allowlist sender added` ).
CATCH cx_bcs_mail_config.
io_out->write( `Error in allowlist sender` ).
ENDTRY.
TRY.
lo_config->modify_default_sender_address( iv_default_address = 'BTP-noreply@CONNECT.com'
iv_default_name = '' ).
io_out->write( `Default sender set` ).
CATCH cx_bcs_mail_config.
io_out->write( `Error with default data` ).
ENDTRY.
ENDMETHOD.
ENDCLASS.
Fazit
Die Grundkonfiguration des Mailservers und des Systems ist nicht so kompliziert, erfordert aber einige Schritte der Vorbereitung und einige Daten, um die Konfiguration zu finalisieren. Du solltest auch die nötigen Apps und Berechtigungen haben, wenn du das System konfigurierst.