1.查看生成的邮件
2.1 非面向对象的方式(demo直接copy即可)
REPORT Z12.
DATA: IT_DOCUMENT_DATA TYPE SODOCCHGI1,IT_CONTENT_TEXT TYPE STANDARD TABLE OF SOLISTI1 WITH HEADER LINE,IT_PACKING_LIST TYPE TABLE OF SOPCKLSTI1 WITH HEADER LINE,IT_RECEIVERS TYPE STANDARD TABLE OF SOMLRECI1 WITH HEADER LINE,LC_MAIL_ATTACH TYPE STRING,LT_CONTENT_HEX TYPE STANDARD TABLE OF SOLIX WITH HEADER LINE,LT_OBJECT_HEADER TYPE STANDARD TABLE OF SOLISTI1 WITH HEADER LINE,LC_MAIL_XATTACH TYPE XSTRING,LV_SEND_ALL TYPE C,IT_MAKT LIKE TABLE OF MAKT WITH HEADER LINE,FIR_DATE TYPE SY-DATUM,MIMETYPE TYPE CHAR64.
DATA: IT_ITAB TYPE TABLE OF ITAB WITH HEADER LINE,WA_ITAB TYPE ITAB.CONSTANTS:LC_TAB TYPE C VALUE CL_BCS_CONVERT=>GC_TAB, "excel换格符LC_CTRL TYPE C VALUE CL_BCS_CONVERT=>GC_CRLF. "excel换行符PERFORM SEND_EMAIL.*&---------------------------------------------------------------------*
*& Form SEND_EMAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM SEND_EMAIL.DATA SY_VLINE TYPE I.DATA:MBLNR TYPE STRING, "物料凭证MATNR TYPE STRING, "物料MJAHR TYPE STRING, "年度MAKTX TYPE STRING. "物料描述****邮件标题信息IT_DOCUMENT_DATA-OBJ_DESCR = '邮件主题1' . "内容的简短描述IT_DOCUMENT_DATA-PRIORITY = '1'. "优先次序 1~9 1:最高优先权IT_DOCUMENT_DATA-OBJ_NAME = 'OFFER'.IT_DOCUMENT_DATA-OBJ_LANGU = SY-LANGU.*****邮件正文信息IT_CONTENT_TEXT = '各位好:'.APPEND IT_CONTENT_TEXT.IT_CONTENT_TEXT = ' 此邮件为测试邮件!!!!!!!'.APPEND IT_CONTENT_TEXT.DESCRIBE TABLE IT_CONTENT_TEXT LINES SY_VLINE.IT_DOCUMENT_DATA-DOC_SIZE = 255 * ( SY_VLINE - 1 ) + STRLEN( IT_CONTENT_TEXT ). "SAPoffice 文档的大小(用于 API1)IT_PACKING_LIST-TRANSF_BIN = SPACE.IT_PACKING_LIST-HEAD_START = 1 .IT_PACKING_LIST-HEAD_NUM = 0 .IT_PACKING_LIST-BODY_START = 1. "控制从第几行开始读IT_PACKING_LIST-BODY_NUM = SY_VLINE."控制读到第几行IT_PACKING_LIST-DOC_TYPE = 'RAW'.APPEND IT_PACKING_LIST.***收件人信息IT_RECEIVERS-RECEIVER = 'MEIQIAN.LIANG@HAND-CHINA.COM'. "收件人地址IT_RECEIVERS-REC_TYPE = 'U'.IT_RECEIVERS-COM_TYPE = 'INT'.IT_RECEIVERS-NOTIF_DEL = 'X'.IT_RECEIVERS-NOTIF_NDEL = 'X'.APPEND IT_RECEIVERS.CONCATENATE '物料' LC_TAB'物料凭证' LC_TAB'物料描述' LC_TAB'年度' LC_CTRL INTO LC_MAIL_ATTACH. "lc_ctrl换行符CLEAR:MBLNR, MATNR, MJAHR, MAKTX.MBLNR = '7777777'.MATNR = '7777777'.MJAHR = '7777'.MAKTX = 'seven'."物料类型CONCATENATE LC_MAIL_ATTACHMATNR LC_TABMBLNR LC_TABMJAHR LC_TABMAKTX LC_CTRL INTO LC_MAIL_ATTACH. "lc_ctrl换行符CLEAR:MBLNR, MATNR, MJAHR, MAKTX.MBLNR = '8888888'.MATNR = '8888888'.MJAHR = '8888'.MAKTX = 'seven'."物料类型CONCATENATE LC_MAIL_ATTACHMATNR LC_TABMBLNR LC_TABMJAHR LC_TABMAKTX LC_CTRL INTO LC_MAIL_ATTACH. "lc_ctrl换行符MIMETYPE = 'APPLICATION/MSEXCEL;CHARSET=UTF-16LE'.CALL FUNCTION 'SCMS_STRING_TO_XSTRING'EXPORTINGTEXT = LC_MAIL_ATTACHMIMETYPE = MIMETYPEIMPORTINGBUFFER = LC_MAIL_XATTACHEXCEPTIONSFAILED = 1OTHERS = 2.IF SY-SUBRC = 0.CONCATENATE CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_LITTLE LC_MAIL_XATTACH INTO LC_MAIL_XATTACH IN BYTE MODE.ENDIF.CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' "将Xtring转化成二进制格式并保存到内表中EXPORTINGBUFFER = LC_MAIL_XATTACHTABLESBINARY_TAB = LT_CONTENT_HEX."不知道干啥用的LT_OBJECT_HEADER = 'Seven test'.APPEND LT_OBJECT_HEADER.DESCRIBE TABLE LT_CONTENT_HEX LINES SY_VLINE.IT_PACKING_LIST-TRANSF_BIN = 'X'.IT_PACKING_LIST-HEAD_START = 1 .IT_PACKING_LIST-HEAD_NUM = 0 .IT_PACKING_LIST-BODY_START = 1.IT_PACKING_LIST-BODY_NUM = SY_VLINE.IT_PACKING_LIST-DOC_TYPE = 'XLS'.IT_PACKING_LIST-DOC_SIZE = 255 * SY_VLINE.IT_PACKING_LIST-OBJ_NAME = '附件名'.IT_PACKING_LIST-OBJ_DESCR = IT_PACKING_LIST-OBJ_NAME."文档名字APPEND IT_PACKING_LIST."方法1 无法指定发送人邮箱CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'EXPORTINGDOCUMENT_DATA = IT_DOCUMENT_DATAPUT_IN_OUTBOX = 'X'COMMIT_WORK = 'X'IMPORTINGSENT_TO_ALL = LV_SEND_ALL
* NEW_OBJECT_ID =TABLESPACKING_LIST = IT_PACKING_LIST[]OBJECT_HEADER = LT_OBJECT_HEADER[]
* contents_bin =CONTENTS_TXT = IT_CONTENT_TEXT[]CONTENTS_HEX = LT_CONTENT_HEX[]
* object_para =
* object_parb =RECEIVERS = IT_RECEIVERS[]EXCEPTIONSTOO_MANY_RECEIVERS = 1DOCUMENT_NOT_SENT = 2DOCUMENT_TYPE_NOT_EXIST = 3OPERATION_NO_AUTHORIZATION = 4PARAMETER_ERROR = 5X_ERROR = 6ENQUEUE_ERROR = 7OTHERS = 8.* "方法2 可以指定发送人邮箱
* CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
* EXPORTING
* DOCUMENT_DATA = IT_DOCUMENT_DATA
* PUT_IN_OUTBOX = 'X'
* SENDER_ADDRESS = 'MEIQIAN.LIANG@HAND-CHINA.COM'
* SENDER_ADDRESS_TYPE = 'INT'
* COMMIT_WORK = 'X'
** IP_ENCRYPT =
** IP_SIGN =
** IV_VSI_PROFILE =
* IMPORTING
* SENT_TO_ALL = LV_SEND_ALL
** NEW_OBJECT_ID =
** SENDER_ID =
* TABLES
* PACKING_LIST = IT_PACKING_LIST[]
* OBJECT_HEADER = LT_OBJECT_HEADER[]
** CONTENTS_BIN =
* CONTENTS_TXT = IT_CONTENT_TEXT[]
* CONTENTS_HEX = LT_CONTENT_HEX[]
** OBJECT_PARA =
** OBJECT_PARB =
* RECEIVERS = IT_RECEIVERS[]
** ET_VSI_ERROR =
* 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.
** Implement suitable error handling here
* ELSE.
* BREAK-POINT.
* ENDIF.ENDFORM. "SEND_EMAIL
非面向对象运行效果图:
如果要抄送则增加以下属性:
2.2面向对象的方法
REPORT Z1234.TABLES:MSEG,SSCRFIELDS,MARA,ZOWMS_DAYSTOCK_R,ADR6.
TYPE-POOLS:ICON,SLIS.TYPES: BEGIN OF TYS_DETAIL,TOTAL(100),SEL(1),STATUS(4),ITEM_STATUS(4),CYMENG TYPE MSEG-MENGE, "差异数量XCHAR TYPE MARC-XCHAR, "批次管理标识MAKTX TYPE MAKT-MAKTX,LGOBE TYPE T001L-LGOBE,MEINS TYPE MARA-MEINS,LABST TYPE MARD-LABST. "SAP库存INCLUDE STRUCTURE ZOWMS_DAYSTOCK_R.
TYPES: END OF TYS_DETAIL.
DATA: GT_DETAIL TYPE STANDARD TABLE OF TYS_DETAIL,GT_DETAIL_TMP TYPE TABLE OF TYS_DETAIL,GT_DETAIL_KEY TYPE TABLE OF TYS_DETAIL.DATA FUNCTXT TYPE SMP_DYNTXT.DATA: I_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.*ALV定义
DATA: GT_FIELDCAT TYPE LVC_T_FCAT,GV_CODE LIKE SY-UCOMM,GW_LAYOUT TYPE LVC_S_LAYO,I_CELLCLR TYPE LVC_S_SCOL. "单元格颜色
TYPES: BEGIN OF SLIS_EXTAB,FCODE LIKE RSMPE-FUNC,END OF SLIS_EXTAB.
TYPES: SLIS_T_EXTAB TYPE SLIS_EXTAB OCCURS 1.
DATA:LS_CELLTAB TYPE LVC_S_STYL.
DATA LS_STABLE TYPE LVC_S_STBL.
DATA:GS_FIELDCAT TYPE LVC_S_FCAT.
DATA:GT_HEADER TYPE TABLE OF CHAR30,GV_CHAR30 TYPE CHAR30.
*子ALV调用
DATA:LT_FIELDCAT TYPE LVC_T_FCAT,LS_FCAT TYPE LVC_S_FCAT,LS_SELFIELD TYPE SLIS_SELFIELD.SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-T02.
SELECT-OPTIONS: S_RECEP FOR ADR6-SMTP_ADDR NO INTERVALSMODIF ID MAL,"收件人S_SCR FOR ADR6-SMTP_ADDR NO INTERVALS "抄送人MODIF ID MAL.
SELECTION-SCREEN END OF BLOCK BLK2 .END-OF-SELECTION.PERFORM FRM_SEND_MAIL.FORM FRM_SEND_MAIL .DATA: BCS_EXCEPTION TYPE REF TO CX_BCS,ERRORTEXT TYPE STRING,LCL_SEND_REQUEST TYPE REF TO CL_BCS,LCL_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,LCL_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,LCL_SENDER TYPE REF TO CL_CAM_ADDRESS_BCS,T_ATTACHMENT_HEADER TYPE SOLI_TAB,WA_ATTACHMENT_HEADER LIKE LINE OF T_ATTACHMENT_HEADER,ATTACHMENT_SUBJECT TYPE SOOD-OBJDES,SOOD_BYTECOUNT TYPE SOOD-OBJLEN,MAIL_TITLE TYPE SO_OBJ_DES,T_MAILTEXT TYPE SOLI_TAB,WA_MAILTEXT LIKE LINE OF T_MAILTEXT,SEND_TO TYPE ADR6-SMTP_ADDR,SENT TYPE OS_BOOLEAN,LV_MAILNAME TYPE SOOD-OBJDES,BINARY_CONTENT TYPE SOLIX_TAB.DATA:LV_SMTP_ADDR TYPE ADR6-SMTP_ADDR." Set mail subjectMAIL_TITLE = '菜鸟&SAP库存比对邮件推送'.LV_MAILNAME = '菜鸟&SAP库存比对报表'." Set mail contextDATA(LV_STRING) = |您好,附件是菜鸟&SAP库存比对报表,请查阅,谢谢|.WA_MAILTEXT = LV_STRING.APPEND WA_MAILTEXT TO T_MAILTEXT.CONCATENATE '事务码为:ZM390 程序为:ZMM390。' 'Job时间:' SY-DATUM '' SY-UZEIT INTO WA_MAILTEXT.APPEND WA_MAILTEXT TO T_MAILTEXT.TRY.
* Create send requestLCL_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
* Create new document with mailtitle and mailtextgLCL_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT( I_TYPE = 'RAW' "#EC NOTEXTI_TEXT = T_MAILTEXTI_LANGUAGE = SY-LANGUI_SUBJECT = MAIL_TITLE ).* add document to send requestLCL_SEND_REQUEST->SET_DOCUMENT( LCL_DOCUMENT ).*收件人LOOP AT S_RECEP.LV_SMTP_ADDR = S_RECEP-LOW.LCL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LV_SMTP_ADDR ).LCL_SEND_REQUEST->ADD_RECIPIENT( LCL_RECIPIENT ).ENDLOOP.* 抄送人LOOP AT S_SCR.LV_SMTP_ADDR = S_SCR-LOW.LCL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LV_SMTP_ADDR ).LCL_SEND_REQUEST->ADD_RECIPIENT(I_RECIPIENT = LCL_RECIPIENTI_EXPRESS = 'X'I_COPY = 'X'I_BLIND_COPY = ' 'I_NO_FORWARD = ' ' ).ENDLOOP.
* 添加抄送人*lcl_document->CLEAR LV_STRING.PERFORM FRM_SET_DOCUMENT_BODY CHANGING BINARY_CONTENT.LCL_DOCUMENT->ADD_ATTACHMENT(I_ATTACHMENT_TYPE = 'XLS' " 附件格式I_ATTACHMENT_SUBJECT = LV_MAILNAME " 附件名称
* i_attachment_size = size "附件大小I_ATTACHMENT_LANGUAGE = SY-LANGU
* I_ATTACHMENT_HEADER =I_ATT_CONTENT_HEX = BINARY_CONTENT). "附件内容LCL_SEND_REQUEST->SET_DOCUMENT( LCL_DOCUMENT ).SENT = LCL_SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X' ).CATCH CX_BCS INTO BCS_EXCEPTION.ERRORTEXT = BCS_EXCEPTION->IF_MESSAGE~GET_TEXT( ).MESSAGE ERRORTEXT TYPE 'S' DISPLAY LIKE 'E'.ENDTRY.COMMIT WORK.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_DOCUMENT_BODY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_BINARY_CONTENT text
*----------------------------------------------------------------------*
FORM FRM_SET_DOCUMENT_BODY CHANGING PT_BODY TYPE SOLIX_TAB.TYPES: BEGIN OF TY_DATA,WERKS TYPE ZOWMS_DAYSTOCK_R-WERKS, "工厂MATNR TYPE ZOWMS_DAYSTOCK_R-MATNR, "物料MAKTX TYPE MAKT-MAKTX, "物料描述LGORT TYPE ZOWMS_DAYSTOCK_R-LGORT, "库存地点LGOBE TYPE T001L-LGOBE, "库存地点描述CHARG TYPE ZOWMS_DAYSTOCK_R-CHARG, "批次LABST TYPE MARD-LABST, "SAP库存数量OMENGE TYPE ZOWMS_DAYSTOCK_R-OMENGE, "未结库存WMENGE TYPE ZOWMS_DAYSTOCK_R-WMENGE, "OFS未传明细TMENGE TYPE ZOWMS_DAYSTOCK_R-TMENGE, "SAP库存数量(含未结)SMENGE TYPE ZOWMS_DAYSTOCK_R-SMENGE, "WMS库存数量CYMENG TYPE MSEG-MENGE. "差异数量TYPES: END OF TY_DATA.DATA:LV_STRING TYPE STRING,LC_MIMETYPE TYPE CHAR64 VALUE 'APPLICATION/MSEXCEL;charset=utf-16le',LV_XATTACH TYPE XSTRING,LV_VALUE TYPE STRING,LV_FLAG TYPE C.DATA:LT_MAIL TYPE TABLE OF TY_DATA,LS_MAIL TYPE TY_DATA.CLEAR:GT_HEADER.APPEND '工厂' TO GT_HEADER.APPEND '物料' TO GT_HEADER.APPEND '物料描述' TO GT_HEADER.APPEND '库存地点' TO GT_HEADER.APPEND '库存地点描述' TO GT_HEADER.APPEND 'SAP库存数量' TO GT_HEADER.APPEND '未结库存' TO GT_HEADER.APPEND 'OFS未传SAP数量' TO GT_HEADER.APPEND 'SAP库存数量(含未结未传)' TO GT_HEADER.APPEND 'WMS库存数量' TO GT_HEADER.APPEND '差异' TO GT_HEADER.LOOP AT GT_HEADER INTO GV_CHAR30.CONDENSE GV_CHAR30.LV_STRING = |{ LV_STRING }{ GV_CHAR30 }{ CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB }|.ENDLOOP.LV_STRING = LV_STRING && CL_ABAP_CHAR_UTILITIES=>CR_LF."发送有差异的邮件数据MOVE-CORRESPONDING GT_DETAIL[] TO LT_MAIL[].DELETE LT_MAIL[] WHERE CYMENG EQ '0.000'."判断是否发送批次字段的数据DATA(LV_LINES1) = LINES( GT_HEADER ).IF LV_LINES1 = '11'.LV_FLAG = 'X'.ENDIF.DATA(LV_LINES) = LINES( GT_FIELDCAT ).LOOP AT LT_MAIL ASSIGNING FIELD-SYMBOL(<FS_STURC>).DO LV_LINES TIMES.IF SY-INDEX = 6 AND LV_FLAG = 'X'.CONTINUE.ENDIF.ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_STURC> TO FIELD-SYMBOL(<FS_VALUE>).IF SY-SUBRC = 0.LV_VALUE = <FS_VALUE>.CONDENSE LV_VALUE.DATA(LV_LEN) = STRLEN( LV_VALUE ) - 1.IF LV_LEN > 0.IF LV_VALUE+LV_LEN = '-'.LV_VALUE = '-' && LV_VALUE(LV_LEN).CONDENSE LV_VALUE NO-GAPS.CLEAR LV_LEN.ENDIF.ENDIF.ELSE.LV_VALUE = ''.ENDIF.IF LV_LINES <> SY-INDEX.LV_STRING = |{ LV_STRING }{ LV_VALUE }{ CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB }|.ELSE.LV_STRING = |{ LV_STRING }{ LV_VALUE }{ CL_ABAP_CHAR_UTILITIES=>CR_LF }|.ENDIF.ENDDO.ENDLOOP.CALL FUNCTION 'SCMS_STRING_TO_XSTRING'EXPORTINGTEXT = LV_STRINGMIMETYPE = LC_MIMETYPEIMPORTINGBUFFER = LV_XATTACHEXCEPTIONSFAILED = 1OTHERS = 2.
* Add the file header for utf-16le. .IF SY-SUBRC = 0.CONCATENATE CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_LITTLELV_XATTACH INTO LV_XATTACH IN BYTE MODE.ENDIF.CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'EXPORTINGBUFFER = LV_XATTACHTABLESBINARY_TAB = PT_BODY.
ENDFORM.
面向对象效果如下: