CSV-Datei als E-mail versenden


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

CSV-Datei als E-mail versenden

Beitragvon Bright4.5 » 11.10.2018, 10:19

Hallo ich habe nun eine interne Tabelle mit dem Funktionsbaustein 'SAP_CONVERT_TO_CSV_FORMAT' in eine CSV-Datei umgewandelt. Nun möchte ich gerne diese Datei als E-Mail versenden. Ich habe nun "SO_NEW_DOCUMENT_ATT_SEND_API" öfters gelesen, aber ich finde das sehr kompliziert. Gibt es eine einfache Möglichkeit, einfach die interne Tabelle als CSV-Datei an E-Mails zu versenden?

vielen Dank im Voraus.
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: CSV-Datei als E-mail versenden

Beitragvon DeathAndPain » 11.10.2018, 11:52

Rufe einfach die Funktionsbausteine Z_EMAIL_INIT, Z_EMAIL_ANHANG_XLS und Z_EMAIL_SEND nacheinander auf.

Code: Alles auswählen
FUNCTION Z_EMAIL_INIT.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(ABSENDER) LIKE  PA0105-USRID_LONG OPTIONAL
*"     VALUE(BETREFF) LIKE  SODOCCHGI1-OBJ_DESCR
*"  TABLES
*"      MAILTEXT STRUCTURE  SOLISTI1
*"      RECIPIENTS STRUCTURE  ZHR_EMAILEMPFAENGER
*"----------------------------------------------------------------------

* Attributes of new doc
*
  IT_MESSAGE[] = MAILTEXT[].
  DESCRIBE TABLE IT_MESSAGE LINES MESSAGE_SIZE.
  IT_DOC_ATT-OBJ_DESCR = BETREFF.
  IT_DOC_ATT-OBJ_NAME = 'SAPRPT'.
  IT_DOC_ATT-SENSITIVTY = 'F'.
  IT_DOC_ATT-DOC_SIZE = MESSAGE_SIZE * 255.

* Create pack to text in mail body
  REFRESH IT_MAILPACK.
  CLEAR IT_MAILPACK.
  IT_MAILPACK-HEAD_START = 0.
  IT_MAILPACK-HEAD_NUM = 0.
  IT_MAILPACK-BODY_START = 0.
  IT_MAILPACK-BODY_NUM = MESSAGE_SIZE.
  IT_MAILPACK-DOC_TYPE = 'RAW'.
  APPEND IT_MAILPACK.

* Absender in globaler Variable SENDER festhalten
  SENDER = ABSENDER.

* Empfänger eintragen
  REFRESH IT_RECEIVERS.
  IT_RECEIVERS-EXPRESS = SPACE.
  IT_RECEIVERS-REC_TYPE = 'U'.
  IT_RECEIVERS-COM_TYPE = 'INT'.
  IT_RECEIVERS-NOTIF_DEL = SPACE.
  IT_RECEIVERS-NOTIF_NDEL = SPACE.
  LOOP AT RECIPIENTS.
    IT_RECEIVERS-RECEIVER = RECIPIENTS.
    APPEND IT_RECEIVERS.
  ENDLOOP.

* Anhänge initialisieren
  CLEAR IT_MAILPACK. " Kopfzeile initialisieren. Tabelle selbst enthält bereits die Zeile mit dem Mailtext
  IT_MAILPACK-TRANSF_BIN = 'X'.
  IT_MAILPACK-HEAD_START = 1.
  IT_MAILPACK-HEAD_NUM = 1.
  IT_MAILPACK-BODY_START = 1.
  IT_MAILPACK-DOC_TYPE = 'PDF'.
  REFRESH I_CONTENT_BIN.

ENDFUNCTION.

FUNCTION Z_EMAIL_ANHANG_XLS.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(DATEINAME_OHNE_ERWEITERUNG) LIKE  SOPCKLSTI1-OBJ_DESCR
*"  TABLES
*"      DOKUMENT_IM_XLS_FORMAT
*"----------------------------------------------------------------------

  DATA: EXCEL_IN_BINAERFORMAT TYPE SOLIX_TAB,
        OUTPUT_LENGTH TYPE I.

  CALL FUNCTION 'SCMS_TEXT_TO_BINARY'
    EXPORTING ENCODING = '1100' " ISO 8859-1 für vernünftige Umlautdarstellung in der Email
    IMPORTING OUTPUT_LENGTH = OUTPUT_LENGTH
    TABLES TEXT_TAB = DOKUMENT_IM_XLS_FORMAT
           BINARY_TAB = EXCEL_IN_BINAERFORMAT.
  APPEND LINES OF EXCEL_IN_BINAERFORMAT TO I_CONTENT_BIN.

  IT_MAILPACK-BODY_START = IT_MAILPACK-BODY_START + IT_MAILPACK-BODY_NUM. " Dieser Anhang beginnt eine Tabellenzeile hinter dem Ende des vorhergehenden
  DESCRIBE TABLE EXCEL_IN_BINAERFORMAT LINES IT_MAILPACK-BODY_NUM. " und umfasst selber so viele Tabellenzeilen
  IT_MAILPACK-OBJ_NAME = DATEINAME_OHNE_ERWEITERUNG.
  IT_MAILPACK-OBJ_DESCR = DATEINAME_OHNE_ERWEITERUNG.
  IT_MAILPACK-DOC_SIZE = OUTPUT_LENGTH.
  IT_MAILPACK-DOC_TYPE = 'XLS'.
  APPEND IT_MAILPACK.

ENDFUNCTION.

FUNCTION Z_EMAIL_SEND.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  EXCEPTIONS
*"      HAT_NICHT_GEKLAPPT
*"      ZU_VIELE_EMPFAENGER
*"      KEINE_BERECHTIGUNG
*"      FEHLERHAFTE_EMPFAENGERADRESSE
*"----------------------------------------------------------------------
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING TEXT = 'Versende Email...'.
  DATA SENDER_TYPE LIKE SOEXTRECI1-ADR_TYP.
* Absendertyp einstellen: Wenn kein expliziter Absender angegeben, leer lassen. Dann wird der angemeldete Benutzer gezogen.
  IF SENDER = SPACE.
    CLEAR SENDER_TYPE.
  ELSE.
    SENDER_TYPE = 'INT'. " Internet-Email-Adresse
  ENDIF.

* Call FM to send email
  CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
    EXPORTING DOCUMENT_DATA = IT_DOC_ATT
              PUT_IN_OUTBOX = SPACE
              COMMIT_WORK = 'X'
              SENDER_ADDRESS = SENDER
              SENDER_ADDRESS_TYPE = SENDER_TYPE
    TABLES    PACKING_LIST = IT_MAILPACK
              CONTENTS_TXT = IT_MESSAGE
              CONTENTS_HEX = I_CONTENT_BIN
              RECEIVERS = IT_RECEIVERS
    EXCEPTIONS TOO_MANY_RECEIVERS = 1
               DOCUMENT_NOT_SENT = 2
               DOCUMENT_TYPE_NOT_EXIST = 3
               OPERATION_NO_AUTHORIZATION = 4
               PARAMETER_ERROR = 5
               X_ERROR = 6
               ENQUEUE_ERROR = 7
               OTHERS = 8.
  IF SY-SUBRC <> 0.
    IF SY-CALLD = SPACE.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    CASE SY-SUBRC.
      WHEN 1.      RAISE ZU_VIELE_EMPFAENGER.
      WHEN 4.      RAISE KEINE_BERECHTIGUNG.
      WHEN 6.      RAISE FEHLERHAFTE_EMPFAENGERADRESSE.
      WHEN OTHERS. RAISE HAT_NICHT_GEKLAPPT.
    ENDCASE.
  ENDIF.
ENDFUNCTION.


Die drei Funktionsbausteine müssen zwingend in dieselbe Funktionsgruppe gepackt werden. Diese Funktionsgruppe braucht folgendes TOP-Include:
Code: Alles auswählen
FUNCTION-POOL Z_MAIL.                     "MESSAGE-ID ..

DATA: MESSAGE_SIZE TYPE I, " Text in mail size
      IT_MAILPACK LIKE STANDARD TABLE OF SOPCKLSTI1 WITH HEADER LINE,
      IT_RECEIVERS LIKE STANDARD TABLE OF SOMLRECI1 WITH HEADER LINE,
      IT_DOC_ATT LIKE SODOCCHGI1, " Attrib of new doc
      BIN_FILESIZE TYPE I,
      DOKUMENT_IM_OTF_FORMAT TYPE STANDARD TABLE OF ITCOO WITH HEADER LINE,
      BIN_DATEI TYPE SOLIX_TAB,
      SENDER LIKE SOEXTRECI1-RECEIVER,

      MAILBETREFF(40),

      IT_MESSAGE TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0 WITH HEADER LINE,
      I_CONTENT_BIN TYPE SOLIX_TAB,
      I_CONTENT_XLS LIKE STANDARD TABLE OF SOLISTI1 WITH HEADER LINE.


Damit haste ein komfortables Framework, mit dem Du in Deinen Programmen mit wenig Aufwand Emails mit und ohne Anhang verschicken kannst.

Der Baustein Z_EMAIL_ANHANG_XLS deutet zwar an, dass er XLS-Dateien verschickt, tatsächlich sind es aber CSV-Dateien, an die er fälschlich die Endung XLS dranhängt. Das ist Absicht, denn wenn Du mit Excel solch einen Anhang öffnest, dann bekommst Du zwar erst ein blödes Popup, das Du wegklicken musst, aber anschließend geht die Datei korrekt auf. Nutzt Du als Endung hingegen CSV (den Funktionsbaustein entsprechend anzupassen ist trivial möglich), dann trennt Excel die Spalten nicht und importiert alles in die erste Spalte.

Ursache sind jahrzehntealte Unzulänglichkeiten im Excel-Importdialog. LibreOffice ist da bedeutend weiter.

Für diese Nachricht hat DeathAndPain einen Dank bekommen :
Bright4.5
DeathAndPain
Expert
 
Beiträge: 740
Registriert: 05.05.2006, 10:14
Dank erhalten: 170 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon Bright4.5 » 11.10.2018, 12:12

vielen Dank schon mal.

Nun bekomm ich aber immer die Fehlermeldung das die Funktion "Z_EMAIL_INIT" nicht in der Funktionsbibliothek ist.

:/
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon A6272 » 11.10.2018, 13:10

Hallo,

geh mal in den FuBa Z_EMAIL_INIT rein und ändere was, z.b. einen Kommentar einfügen und generiere den nochmal.

Viele Grüße
Alex
A6272
ForumUser
 
Beiträge: 82
Registriert: 27.02.2007, 09:30
Dank erhalten: 4 mal
Ich bin: Berater/in

Re: CSV-Datei als E-mail versenden

Beitragvon DeathAndPain » 11.10.2018, 13:17

Bright4.5 hat geschrieben:Nun bekomm ich aber immer die Fehlermeldung das die Funktion "Z_EMAIL_INIT" nicht in der Funktionsbibliothek ist.


Deswegen habe ich ja gesagt, dass Du eine Funktionsgruppe anlegen und darin alle drei genannten Funktionsbausteine anlegen sollst und habe obenstehend das komplette Coding aller drei Funktionsbausteine geboten, das Du Dir für jeden einzelnen der Bausteine entsprechend rauskopieren kannst. Wie das Z am Anfang des Namens schon andeutet, ist das Custom Coding und nichts, was schon im SAP-Standard drin wäre.

Die Bausteine habe ich vor langer Zeit mal entwickelt, weil mir der Emailversand aus ABAP im Standard zu umständlich war und ich das auf wenige, übersichtliche Befehle reduzieren wollte. Der Ablauf ist immer so, dass Du zuerst den Z_EMAIL_INIT aufrufst (um eine neue Email zu eröffnen). Dann kannst Du beliebig oft den Z_EMAIL_ANHANG_XLS rufen und hängst damit bei jedem Aufruf einen weiteren Tabellenanhang an die Email. Zum Schluss rufst Du den Z_EMAIL_SEND und schickt die fertige Email damit ab.

Was ich aber noch vergessen habe zu erwähnen, ist, dass Du in der SE11 auch noch die Struktur ZHR_EMAILEMPFAENGER anlegen musst mit nur einer Zeile:

EMAILEMPFAENGER 1 Type COMM_ID_LONG CHAR 241 0 Kommunikation lange Identifikation/Nummer

A6272 hat geschrieben:geh mal in den FuBa Z_EMAIL_INIT rein und ändere was, z.b. einen Kommentar einfügen und generiere den nochmal.

Das wird nicht viel bringen, wenn er den Fuba noch gar nicht angelegt hat.
DeathAndPain
Expert
 
Beiträge: 740
Registriert: 05.05.2006, 10:14
Dank erhalten: 170 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon black_adept » 11.10.2018, 13:52

@D&P: Warum die SO_...API -FuBas anstatt der mächtigeren cl_bcs-Klasse welche im SAP -Standard ist?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
Bright4.5
black_adept
Top Expert
 
Beiträge: 3030
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 512 mal
Ich bin: Freiberufler/in

Re: CSV-Datei als E-mail versenden

Beitragvon Bright4.5 » 11.10.2018, 14:20

Die cl_bcs-Klasse habe ich auch schon gesehen. Bloß versteh ich leider nicht ganz wie die Sache funktioniert. Ich mach das leider zum ersten Mal und irgendwie blick ich es nicht.

Ich hab mir meine Interne Tabelle mit dem Funktionsbaustein 'SAP_CONVERT_TO_CSV_FORMAT' in eine CSV-Datei umgewandelt und wie funktioniert das Ganze nun mit dieser Klasse ( Bin noch ziemlicher Anfänger und gerade dabei mich durch die ganze Themen von ABAP zu kämpfen - sehr mühselig ).

Vielen Dank.
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon Bright4.5 » 11.10.2018, 14:26

Über ein Beispiel mit der Klasse wäre ich sehr dankbar. :)
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon A6272 » 11.10.2018, 14:58

DeathAndPain hat geschrieben:
A6272 hat geschrieben:geh mal in den FuBa Z_EMAIL_INIT rein und ändere was, z.b. einen Kommentar einfügen und generiere den nochmal.

Das wird nicht viel bringen, wenn er den Fuba noch gar nicht angelegt hat.


Wenn, was beim Anlegen schiefging wird es ggf. geheilt, wenn er den nicht angelegt hat, fällt es ihm vielleicht auf, das was fehlen könnte. ;-)
A6272
ForumUser
 
Beiträge: 82
Registriert: 27.02.2007, 09:30
Dank erhalten: 4 mal
Ich bin: Berater/in

Re: CSV-Datei als E-mail versenden

Beitragvon Bright4.5 » 11.10.2018, 15:18

oder vielleicht kann mir hier doch jemand den Funktionsbaustein erklären:

wo und wie soll denn die interne Tabelle rein, die ich am Schluß versenden möchte?

Wie und wo muss ich die Empfänger angeben, an die die E-Mail soll?

Ich steh hier gerade leider völlig aufm Schlauch.

Vielen Dank.

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = doc_chng
put_in_outbox = 'X'
TABLES
packing_list = objpack
object_header = objhead
contents_bin = gt_csv
contents_txt = objtxt
receivers = pt_reciever
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
operation_no_authorization = 4
OTHERS = 99.
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon deejey » 11.10.2018, 19:59

Habe jetzt kein System zur Hand, glaube aber der FB ist veraltet, da muss irgendwie sowas mit *NEW* sein. Ausserdem ist eine CSV-Datei keine Binär- sondern eine Textdatei
deejey
ForumUser
 
Beiträge: 73
Registriert: 31.07.2016, 11:20
Dank erhalten: 6 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon SaskuAc » 12.10.2018, 05:53

Zum Mail Versenden, kann man gut und gerne die Klasse CL_BCS_MESSAGE verwenden. Die ist super einfach, zwar nicht ganz so mächtig wie die CL_BCS, aber man kann hier einfach die Methode "add_attachment" aufrufen und dann funktioniert das. Jetzt mal kurz ein kleines Beispielcoding ( da ich gerade kein system da habe, kann es sein dass hier vielleicht ein zwei syntax fehler da sind:

Code: Alles auswählen
data(mail) = new cl_bcs_message( ).
mail->add_recipient( 'MaxMustermann@Mustermann.de' ).
mail->set_sender( 'UschiMustermann@Mustermann.de' ).
mail->set_document( )." puh hier weiß ich die Parameter nicht auswendig .. aber hier kann man einen HTML Code ( als XSTRING - also einen Binär Parameter verwenden ) und als Type kann man 'HTM' angeben )
mail->add_attachment( type = 'CSV' i_hex = csv_xstring )." ja ich weiß wieder nicht genau wie die parameter heißen
mail->send( ).
 
SaskuAc
Specialist
 
Beiträge: 176
Registriert: 01.06.2015, 10:16
Dank erhalten: 15 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon Bright4.5 » 12.10.2018, 07:27

hmm okay vielen Dank schon mal. Also hier erkenn ich jetzt wenigstens wo ich den Empfänger und Sender reinpacken muss, nämlich bei add_recipient und set_sender. Habe ich bei den anderen Optionen irgendwie nicht verstanden. Bloß wo übergebe ich jetzt noch meine interne Tabelle die ich ja gerne als Mail versenden möchte?
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon Bright4.5 » 12.10.2018, 08:12

So ich hab jetzt endlich einen Code gefunden, mit dem es funktioniert.

Bloß wo pack ich hier nun meine interne Tabelle rein, die ich gerne versenden möchte??


DATA: lv_recipient TYPE adr6-smtp_addr.
DATA: lv_subject TYPE string.

lv_recipient = 'email@email.com'.
lv_subject = 'Testemail'.

DATA(lv_html_text) = VALUE string( ).

lv_html_text = |<BODY> | &&
|<P><B>Test</B></BR>| &&
|</BODY>|.

DATA(it_body_txt) = cl_document_bcs=>string_to_soli( ip_string = lv_html_text ).

TRY.
* it_body_txt beinhaltet die Zeilen des Body-Textes
* die Zeilen sind jeweils char255 Zeichen lang
* eine Zeile (line) ist vom Typ SOLI

* Document (Mail) erzeugen
* Email-Subject (i_subject) darf hier max. 50 Zeichen lang sein (Subject-Darstellung in der SOST)
* die "richtige" Übergabe des Email-Subjects erfolgt weiter unten in der Funktion set_message_subject( )
DATA(o_document) = cl_document_bcs=>create_document( i_type = 'HTM'
i_text = it_body_txt
i_subject = CONV so_obj_des( lv_subject ) ).

* Sendrequest erzeugen
DATA(o_send_request) = cl_bcs=>create_persistent( ).
* Email-Subject festlegen, ip_subject ist vom Typ String
o_send_request->set_message_subject( ip_subject = lv_subject ).
* Die Mail an den Sendrequest hängen
o_send_request->set_document( o_document ).

* SAP-User als Sender
DATA(o_sender) = cl_sapuser_bcs=>create( sy-uname ).
* Email-Adresse als Sender
* DATA(o_sender) = cl_cam_address_bcs=>create_internet_address( i_address_string = 'email@email.com' ).
o_send_request->set_sender( o_sender ).

* Empfänger -> beachte: u.U. sind Email-Adressen mit Umlauten nicht zulässig -> Exception
DATA(o_recipient) = cl_cam_address_bcs=>create_internet_address( lv_recipient ).
o_send_request->add_recipient( i_recipient = o_recipient
i_express = abap_true
" i_copy = abap_true " CC
" i_blind_copy = abap_true " BCC
).

* Sofort senden
o_send_request->set_send_immediately( abap_true ).

* Dokument senden
IF o_send_request->send( i_with_error_screen = abap_true ) = abap_true.
WRITE: / 'Email gesendet.'.
ELSE.
WRITE: / 'Fehler beim Email-Versand.'.
ENDIF.

* Persistenzdienste des Objektes starten, sonst wird ggf. die Mail nicht gesendet
COMMIT WORK.

CATCH cx_root INTO DATA(e_text).
WRITE: / e_text->get_text( ).
ENDTRY.
Bright4.5
ForumUser
 
Beiträge: 75
Registriert: 17.08.2018, 18:23
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: CSV-Datei als E-mail versenden

Beitragvon Legxis » 12.10.2018, 10:14

Vom anderen Thread rüberkopiert:

Legxis hat geschrieben:Das könntest du z.B. mit dem Fuba SO_NEW_DOCUMENT_ATT_SEND_API1 oder der Klasse BCS machen. Meiner Meinung nach ist BCS übersichtlicher. Sieht dann so oder so ähnlich aus:

Code: Alles auswählen
DATA: gc_subject       TYPE so_obj_des  VALUE 'E-Mail Versand mit der Klasse CL_BCS',
      gc_raw           TYPE char03      VALUE 'RAW',
      gv_sent_to_all   TYPE os_boolean,
      gv_email         TYPE adr6-smtp_addr,
      gv_text          TYPE bcsy_text,
      binary_content   TYPE solix_tab,
      size             TYPE so_obj_len,
      gr_send_request  TYPE REF TO cl_bcs,
      gr_bcs_exception TYPE REF TO cx_bcs,
      gr_recipient     TYPE REF TO if_recipient_bcs,
      gr_sender        TYPE REF TO cl_sapuser_bcs,
      gr_document      TYPE REF TO cl_document_bcs.

DATA: i_tab_converted_data TYPE c length 255,
      gv_string TYPE string.

* CSV in String umformen
i_tab_converted_data = 'Irgendein;Text;steht;hier;in;CSV'.
gv_string = i_tab_converted_data.

TRY.

*   Send Request erstellen
    gr_send_request = cl_bcs=>create_persistent( ).

*   Sender:
    gr_sender = cl_sapuser_bcs=>create( sy-uname ).
   
*   Sender zum Request hinzufügen
    CALL METHOD gr_send_request->set_sender
      EXPORTING
        i_sender = gr_sender.

*   Empfänger
    gv_email = 'test@test.de'.
    gr_recipient = cl_cam_address_bcs=>create_internet_address( gv_email ).
   
*   Empfänger zum Request hinzufügen
    CALL METHOD gr_send_request->add_recipient
      EXPORTING
        i_recipient = gr_recipient
        i_express   = 'X'.

*   E-Mail Body
    APPEND 'Mailversand-Beispiel' TO gv_text.
    gr_document = cl_document_bcs=>create_document(
    i_type    = gc_raw
    i_text    = gv_text
    i_length  = '12'
    i_subject = gc_subject ).

*   Body anhängen
    CALL METHOD gr_send_request->set_document( gr_document ).

*   String (CSV Inhalt) umformen, um es als Anhang zu versenden
    cl_bcs_convert=>string_to_solix(
          EXPORTING
            iv_string   = gv_string
            iv_codepage = '4103'
            iv_add_bom  = 'X'
          IMPORTING
            et_solix  = binary_content
            ev_size   = size ).

*   E-Mail Anhang
    CALL METHOD gr_document->add_attachment
      EXPORTING
        i_attachment_type    = 'CSV'  " oder XLS
        i_attachment_subject = 'TEST.CSV'
        i_attachment_size    = size
        i_att_content_hex    = binary_content.

*   E-Mail senden
    CALL METHOD gr_send_request->send(
    EXPORTING
      i_with_error_screen = 'X'
      RECEIVING
      result              = gv_sent_to_all ).

    IF gv_sent_to_all = 'X'.
      WRITE 'E-Mail erfolgreich versendet!'.
    ENDIF.

*   wird benötigt, um Mail zu versenden
    COMMIT WORK.

* Ausnahmebehandlung
  CATCH cx_bcs INTO gr_bcs_exception.
    WRITE:
    'Error vom Typ: ',
    gr_bcs_exception->error_type.

ENDTRY.

Dazu findet man auch Guides online, wie z.B. hier: http://www.cadaxo.com/high-class-development/abap-klasse-cl_bcs-mailversand-aus-abap/
Ich bin Neuling und für jede Hilfe, Kritik, diverse Programmverbesserungen/-optimierung und schöne Codebeispiele dankbar^^
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )
Legxis
Specialist
 
Beiträge: 109
Registriert: 12.01.2018, 08:59
Wohnort: Köln
Dank erhalten: 17 mal
Ich bin: Student/in

Nächste

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Sachkonto für FI Rechnung in idoc übermittel
vor 15 Stunden von uibig 0 Antw.
Anlagenmigration Export
Gestern von verzweifelt 1 Antw.
SFP - PDF Datenbindung
Gestern von a-dead-trousers 2 Antw.
Protected Attribut füttern
vor 4 Tagen von Tommy Nightmare 3 Antw.
gelöst Problem bei der Tree-Darstellu ng einer Hierarchie
Gestern von khb 3 Antw.

  Ähnliche Beiträge beta
Mail mit Anhang versenden
17.07.2014, 22:44 von a-dead-trousers 3 Antw.
Anfrage per Mail versenden + CC
25.01.2017, 13:45 von Thanatos82 4 Antw.
Mail versenden mit Hinweis 328124
19.10.2006, 07:09 von Ifrit 0 Antw.
E-Mail versenden ohne COMMIT?
07.05.2008, 10:54 von Thomas R. 8 Antw.
HTML Code per Mail versenden
25.10.2012, 12:03 von a-dead-trousers 5 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron