您的位置:首页 > 其它

ABAP 发送邮件的两种方式

2015-12-11 14:11 453 查看
第一种:Call the FM to post the message to SAPMAIL, CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

Code listing for: ZDDTEST003

Description: Send Mail TEST

*&---------------------------------------------------------------------*

*& Report ZDDTEST003

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

REPORT ZDDTEST003.

CONSTANTS:

GC_TAB TYPE C VALUE CL_BCS_CONVERT=>GC_TAB, "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB

GC_CRLF TYPE C VALUE CL_BCS_CONVERT=>GC_CRLF. "CL_ABAP_CHAR_UTILITIES=>CR_LF

DATA: I_PACKING_LIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,

I_RECEIVERS LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE, "receivers

I_CONTENTS_TXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, "ASCII contents of object and attachments

I_CONTENTS_HEX LIKE SOLIX OCCURS 0 WITH HEADER LINE, "Binary contents of object and attachments

I_CONTENTS_BIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

I_OBJECT_HEADER LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, "attachments name

W_DOC_DATA LIKE SODOCCHGI1.

DATA: C_MIMETYPE TYPE CHAR64 VALUE 'APPLICATION/MSEXCEL;charset=utf-16le'.

DATA: V_XATTACH TYPE XSTRING.

DATA: LV_STRING TYPE STRING.

DATA: TAB_LINES LIKE SY-TABIX,

W_SENT_ALL(1) TYPE C,

W_ERROR TYPE SY-SUBRC.

DATA: I_SPFLI LIKE STANDARD TABLE OF SPFLI WITH HEADER LINE.

***********************************************************************

START-OF-SELECTION.

PERFORM GET_SPFLI_DATA.

***define mail main context****

PERFORM DEFINE_MAIL_HEADER.

***dfine attachment*******************

PERFORM DEFINE_MAIL_ATTACHMENT.

***get mail receiver*****************

PERFORM GET_RECEIVERS.

*Send email message, although is not sent from SAP until mail send

*program has been executed(rsconn01)

PERFORM SEND_EMAIL_MESSAGE.

*&---------------------------------------------------------------------*

*& Form GET_SPFLI_DATA

*&---------------------------------------------------------------------*

FORM GET_SPFLI_DATA .

SELECT * FROM SPFLI

INTO CORRESPONDING FIELDS OF TABLE I_SPFLI.

ENDFORM. " GET_SPFLI_DATA

*&---------------------------------------------------------------------*

*& Form DEFINE_MAIL_HEADER

*&---------------------------------------------------------------------*

FORM DEFINE_MAIL_HEADER .

DATA: TMP_DATE LIKE SY-DATUM.

DATA: TMP_CHAR(30).

TMP_DATE = SY-DATUM.

CONCATENATE 'Overdue Batch ' SY-DATUM INTO TMP_CHAR.

********define subject and priority************

W_DOC_DATA-OBJ_DESCR = 'Hello'. "Email Subject.

W_DOC_DATA-PRIORITY = 1. "mail PRIORITY¡A 1 is highest

W_DOC_DATA-OBJ_LANGU = SY-LANGU.

W_DOC_DATA-OBJ_NAME = 'OFFER'. "Name of document..

W_DOC_DATA-SENSITIVTY = 'O'. "Document sensitivity.

********mail main context***********************

I_CONTENTS_TXT = 'Dear Mr and Miss:'.

APPEND I_CONTENTS_TXT.

I_CONTENTS_TXT = ' '.

APPEND I_CONTENTS_TXT.

I_CONTENTS_TXT = ' Please check attachment in time!'.

APPEND I_CONTENTS_TXT.

I_CONTENTS_TXT = ' This Email is sent by systme, Do not Return the Email.'.

APPEND I_CONTENTS_TXT.

I_CONTENTS_TXT =' If you have any problem, please contact with ERP.'.

APPEND I_CONTENTS_TXT.

I_CONTENTS_TXT = ' '.

APPEND I_CONTENTS_TXT.

I_CONTENTS_TXT = TMP_DATE.

APPEND I_CONTENTS_TXT.

DESCRIBE TABLE I_CONTENTS_TXT LINES TAB_LINES.

READ TABLE I_CONTENTS_TXT INDEX TAB_LINES.

W_DOC_DATA-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( I_CONTENTS_TXT ).

********count lines by man context*************

CLEAR I_PACKING_LIST-TRANSF_BIN.

I_PACKING_LIST-TRANSF_BIN = SPACE. "ASCII format/binary format

I_PACKING_LIST-HEAD_START = 1.

I_PACKING_LIST-HEAD_NUM = 0.

I_PACKING_LIST-BODY_START = 1.

I_PACKING_LIST-BODY_NUM = TAB_LINES.

I_PACKING_LIST-DOC_TYPE = 'RAW'.

APPEND I_PACKING_LIST.

ENDFORM. " DEFINE_MAIL_HEADER

*&---------------------------------------------------------------------*

*& Form DEFINE_MAIL_ATTACHMENT

*&---------------------------------------------------------------------*

FORM DEFINE_MAIL_ATTACHMENT .

LOOP AT I_SPFLI.

CONCATENATE LV_STRING

I_SPFLI-CARRID GC_TAB

I_SPFLI-CONNID GC_TAB

I_SPFLI-COUNTRYFR GC_TAB

I_SPFLI-CITYFROM GC_TAB

I_SPFLI-CITYFROM GC_TAB

I_SPFLI-COUNTRYTO GC_TAB

I_SPFLI-CITYTO GC_TAB

I_SPFLI-AIRPTO GC_CRLF

INTO LV_STRING.

ENDLOOP.

* Convert string to xstring type

* 'APPLICATION/MSEXCEL;charset=utf-16le'

CALL FUNCTION 'SCMS_STRING_TO_XSTRING'

EXPORTING

TEXT = LV_STRING

MIMETYPE = C_MIMETYPE

IMPORTING

BUFFER = V_XATTACH

EXCEPTIONS

FAILED = 1

OTHERS = 2.

* Add the file header for utf-16le. .

IF SY-SUBRC = 0.

CONCATENATE CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_LITTLE

V_XATTACH INTO V_XATTACH IN BYTE MODE.

ENDIF.

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'

EXPORTING

BUFFER = V_XATTACH

TABLES

BINARY_TAB = I_CONTENTS_HEX.

***set attachment name, count size*******************

DESCRIBE TABLE I_SPFLI LINES TAB_LINES.

TAB_LINES = TAB_LINES .

I_PACKING_LIST-TRANSF_BIN = 'X'.

I_PACKING_LIST-HEAD_START = 1.

I_PACKING_LIST-HEAD_NUM = 0.

I_PACKING_LIST-BODY_START = 1.

I_PACKING_LIST-BODY_NUM = TAB_LINES.

I_PACKING_LIST-DOC_TYPE = 'XLS'.

I_PACKING_LIST-OBJ_NAME = 'ATTACHMENT'.

I_PACKING_LIST-OBJ_DESCR = 'spfli'.

I_PACKING_LIST-DOC_SIZE = TAB_LINES * 255.

APPEND I_PACKING_LIST.

ENDFORM. " DEFINE_MAIL_ATTACHMENT

*&---------------------------------------------------------------------*

*& Form GET_RECEIVERS

*&---------------------------------------------------------------------*

FORM GET_RECEIVERS .

* Add the recipients email address

CLEAR I_RECEIVERS.

REFRESH I_RECEIVERS.

* SELECT * FROM zszmail.

I_RECEIVERS-RECEIVER = '461356592@qq.com'."Email Address

I_RECEIVERS-REC_TYPE = 'U'. "Internet address

I_RECEIVERS-NOTIF_READ = 'X'.

I_RECEIVERS-COM_TYPE = 'INT'.

I_RECEIVERS-NOTIF_DEL = 'X'.

I_RECEIVERS-NOTIF_NDEL = 'X'.

APPEND I_RECEIVERS.

* ENDSELECT.

ENDFORM. " GET_RECEIVERS

*&---------------------------------------------------------------------*

*& Form SEND_EMAIL_MESSAGE

*&---------------------------------------------------------------------*

FORM SEND_EMAIL_MESSAGE.

DATA: W_SUBRC LIKE SY-SUBRC.

* Call the FM to post the message to SAPMAIL

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

DOCUMENT_DATA = W_DOC_DATA "Attributes of new document

PUT_IN_OUTBOX = 'X' "Flag: Move document to outbox after send

COMMIT_WORK = 'X' "An explicit COMMIT WORK is to be set

IMPORTING

SENT_TO_ALL = W_SENT_ALL

TABLES

PACKING_LIST = I_PACKING_LIST "Information about structure of data tables

OBJECT_HEADER = I_OBJECT_HEADER

CONTENTS_HEX = I_CONTENTS_HEX

CONTENTS_TXT = I_CONTENTS_TXT "ASCII contents of object and attachments

RECEIVERS = I_RECEIVERS "Document recipients with send attributes

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.

W_SUBRC = SY-SUBRC.

WAIT UP TO 2 SECONDS.

IF W_SUBRC EQ 0.

SUBMIT RSCONN01 WITH MODE = 'INT'

WITH OUTPUT = 'X'

AND RETURN.

ENDIF.

ENDFORM. " SEND_EMAIL_MESSAGE

Extracted by Mass Download version 1.4.3 - E.G.Mellodew. 1998-2015. Sap Release 700
第二种:OO的方式

Code listing for: ZDDTEST005

Description: Send Mail TEST2

*&---------------------------------------------------------------------*

*& Report ZDDTEST005

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

REPORT ZDDTEST005.

DATA: WA_ZBCFILE TYPE ZBCFILE.

DATA: IT_ZBCFILE LIKE TABLE OF WA_ZBCFILE.

DATA: BEGIN OF IT_MAILCONTENT OCCURS 0,

PLANT LIKE ZBCFILE-PLANT,

LOCATION LIKE ZBCFILE-LOCATION,

END OF IT_MAILCONTENT.

DATA: WA_MAILCONTENT LIKE IT_MAILCONTENT.

DATA: SEND_REQUEST TYPE REF TO CL_BCS,

DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,

FAIL TYPE REF TO CX_BCS,

RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.

DATA: LS TYPE STRING,

L_INDEX TYPE I,

L_CONTENT TYPE STRING,

MAILTO TYPE AD_SMTPADR,

MAIN_TEXT TYPE BCSY_TEXT,

TITLE TYPE SO_OBJ_DES,

MAIL_SENDER_LR TYPE REF TO IF_SENDER_BCS,

P_SENDER LIKE ADR6-SMTP_ADDR.

SELECT * FROM ZBCFILE

INTO CORRESPONDING FIELDS OF TABLE IT_ZBCFILE.

LOOP AT IT_ZBCFILE INTO WA_ZBCFILE.

WA_MAILCONTENT-PLANT = WA_ZBCFILE-PLANT.

WA_MAILCONTENT-LOCATION = WA_ZBCFILE-LOCATION.

APPEND WA_MAILCONTENT TO IT_MAILCONTENT.

ENDLOOP.

IF NOT IT_MAILCONTENT[] IS INITIAL.

SORT IT_MAILCONTENT BY PLANT LOCATION.

DELETE ADJACENT DUPLICATES FROM IT_MAILCONTENT COMPARING PLANT LOCATION.

CLEAR: WA_MAILCONTENT.

L_CONTENT = 'please maintain area mapping at TCODE¡GZPPE91¡Asome B\C FILE failed.'.

APPEND L_CONTENT TO MAIN_TEXT.

L_CONTENT = 'Plant Location'.

APPEND L_CONTENT TO MAIN_TEXT.

LOOP AT IT_MAILCONTENT INTO WA_MAILCONTENT.

CLEAR L_CONTENT.

CONCATENATE WA_MAILCONTENT-PLANT WA_MAILCONTENT-LOCATION INTO L_CONTENT SEPARATED BY ' '.

APPEND L_CONTENT TO MAIN_TEXT.

ENDLOOP.

TITLE = 'B\C FILE failed.'.

CONCATENATE SY-SYSID SY-TCODE TITLE INTO TITLE SEPARATED BY ''.

MAILTO = '461356592@qq.com'.

P_SENDER = 'sapadmin@xxxx.com'.

TRY.

* step1: create request

SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

* step2: create mail content

DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(

I_TYPE = 'RAW'

I_TEXT = MAIN_TEXT

I_SUBJECT = TITLE ).

* step3: add mail content

SEND_REQUEST->SET_DOCUMENT( DOCUMENT ).

* step4: mail send receive address

MAIL_SENDER_LR = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( P_SENDER ).

SEND_REQUEST->SET_SENDER( I_SENDER = MAIL_SENDER_LR ).

RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).

* step5: add address to request

SEND_REQUEST->ADD_RECIPIENT( RECIPIENT ).

* step6: commit request

SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X' ).

COMMIT WORK AND WAIT.

CATCH CX_BCS INTO FAIL.

ENDTRY.

ENDIF.

Extracted by Mass Download version 1.4.3 - E.G.Mellodew. 1998-2015. Sap Release 700
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: