前言
发送邮件功能在SAP 中比较常见的了,比如报表,生产上的数据记录等,都需要用到邮件功能。现展示一个简单的邮件功能给大家,望采纳。
语法
千篇一律,实用最要紧,直接贴代码。
DATA: GT_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.
DATA:M_REMARK TYPE SO_TEXT255,STITLE1(50) TYPE C,MAILTO TYPE AD_SMTPADR.
DATA:OREF TYPE REF TO CX_ROOT,TXT TYPE STRING, LV_STRING TYPE STRING.
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.
DATA BINARY_CONTENT TYPE SOLIX_TAB.
DATA SIZE TYPE SO_OBJ_LEN.
DATA SEND_REQUEST TYPE REF TO CL_BCS.
DATA DOCUMENT TYPE REF TO CL_DOCUMENT_BCS.
DATA RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.
DATA RECIPSEND TYPE REF TO IF_SENDER_BCS.
DATA BCS_EXCEPTION TYPE REF TO CX_BCS.
DATA BINARY_CONTENT_FORECAST TYPE SOLIX_TAB.
DATA MAIN_TEXT TYPE BCSY_TEXT.
DATA SENT_TO_ALL TYPE OS_BOOLEAN.
DATA:BEGIN OF T_EXCEL OCCURS 0,
CARRID TYPE SPFLI-CARRID,
CITYFROM TYPE SPFLI-CITYFROM,
END OF T_EXCEL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_SPFLI FROM SPFLI.
CLEAR :T_EXCEL,MAIN_TEXT,STITLE1,LV_STRING.
REFRESH:T_EXCEL,MAIN_TEXT.
"标题---------------------------------------------
CONCATENATE '测试数据(' SY-DATUM+0(4) '-' SY-DATUM+4(2) '-' SY-DATUM+6(2) ')' INTO STITLE1.
"说明-------------------------------------
M_REMARK = 'Dear ALL:'.
APPEND M_REMARK TO MAIN_TEXT.
M_REMARK = ''.
APPEND M_REMARK TO MAIN_TEXT.
M_REMARK = '请查看附件!'.
APPEND M_REMARK TO MAIN_TEXT.
M_REMARK = ''.
APPEND M_REMARK TO MAIN_TEXT.
M_REMARK = '谢谢!'.
APPEND M_REMARK TO MAIN_TEXT.
M_REMARK = ''.
APPEND M_REMARK TO MAIN_TEXT.
"附件数据---------------------------------------
T_EXCEL-CARRID = ''.
T_EXCEL-CITYFROM = 'Depart.city'.
INSERT T_EXCEL INDEX 1.
LOOP AT GT_SPFLI.
T_EXCEL-CARRID = GT_SPFLI-CARRID.
T_EXCEL-CITYFROM = GT_SPFLI-CITYFROM .
APPEND T_EXCEL.
CLEAR T_EXCEL.
ENDLOOP.
LOOP AT T_EXCEL.
CONCATENATE LV_STRING
T_EXCEL-CARRID GC_TAB
T_EXCEL-CITYFROM GC_CRLF
INTO LV_STRING.
ENDLOOP.
"---------------------------------------------------
TRY.
CL_BCS_CONVERT=>STRING_TO_SOLIX(
EXPORTING
IV_STRING = LV_STRING
IV_CODEPAGE = '4103' "suitable for MS Excel, leave empty
IV_ADD_BOM = 'X' "for other doc types
IMPORTING
ET_SOLIX = BINARY_CONTENT
EV_SIZE = SIZE ).
CATCH CX_BCS.
MESSAGE E445(SO).
ENDTRY.
TRY.
SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'RAW'
I_TEXT = MAIN_TEXT
I_SUBJECT = STITLE1 ). " 邮件主题名
DOCUMENT->ADD_ATTACHMENT(
I_ATTACHMENT_TYPE = 'XLS' " 附件格式
I_ATTACHMENT_SUBJECT = 'Attachment' " attachment name
I_ATTACHMENT_SIZE = SIZE "附件大小
I_ATT_CONTENT_HEX = BINARY_CONTENT ). "附件内容
SEND_REQUEST->SET_DOCUMENT( DOCUMENT ).
"寄件人若为空,则默认SAP 邮件,SU01 维护默认邮件----------------
* RECIPSEND = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
* SEND_REQUEST->SET_SENDER( RECIPSEND ).
"收件人--------------------------------------------------------
MAILTO = 'AA<XXXX.ORG>'."需维护收件人,
RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
SEND_REQUEST->ADD_RECIPIENT( RECIPIENT ).
SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ). "设置立即发送
* SEND_REQUEST->SEND_REQUEST->SET_LINK_TO_OUTBOX( 'X' ). "与outbox关联
CALL METHOD SEND_REQUEST->SEND(
EXPORTING
I_WITH_ERROR_SCREEN = 'X'
RECEIVING
RESULT = SENT_TO_ALL ).
IF SENT_TO_ALL = 'X'.
COMMIT WORK AND WAIT.
MESSAGE '发送成功' TYPE 'S'.
ELSE.
ROLLBACK WORK.
MESSAGE '发送失败' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
CATCH CX_BCS INTO BCS_EXCEPTION.
MESSAGE I865(SO) WITH BCS_EXCEPTION->ERROR_TYPE.
ENDTRY.
结果
总结
本次介绍了ABAP 发邮件的功能,后期还会继续更新其他功能。若有疑问或错误,请到评论区留言,谢谢!