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.
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.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Bright4.5
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.Bright4.5 hat geschrieben:Nun bekomm ich aber immer die Fehlermeldung das die Funktion "Z_EMAIL_INIT" nicht in der Funktionsbibliothek ist.
Das wird nicht viel bringen, wenn er den Fuba noch gar nicht angelegt hat.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.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Bright4.5
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.DeathAndPain hat geschrieben:Das wird nicht viel bringen, wenn er den Fuba noch gar nicht angelegt hat.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.
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( ).
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:
Dazu findet man auch Guides online, wie z.B. hier: http://www.cadaxo.com/high-class-develo ... -aus-abap/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.