Send email with zip attachment

Step1:Resources used to send email with ZIP attachment Normal 

MOst of the time we may need to send email with attachment file using SAP ABAP, in the below tutorial you will be able to learn sending email with zip attachment in SAP ABAP.

Before going into the full details, please go through the tutorial  Send email with attachment in SAP ABAP.

Email is a concept of sending binary data to a mail server (SMTP), the mail server recieves the data and send it to the respective recipient.

To send attachment, we need to convert data into binary format.

To send data in an internal table (data) we need to convert internal table data into binary format.

Requirement: Send the list of materials with basic details to the specified email id as a ZIP attachment for a material type. Requirement analysis:  Get the list of materials for a material type(MTART) from MARA table and send the material details to the specified email id.

Resources used for sending email with attachment in SAP

CL_BCS (class) To send email using SAP ABAP
CL_ABAP_ZIP (class)ZIP a File in ABAP
HR_KR_STRING_TO_XSTRING (Function Module) Used to convert string to xstring
SCMS_XSTRING_TO_BINARY (Function Module)Used to convert xstring into binary data

Step2:Design selection-screen for email id and material type input Important 

Send email wil attachment in SAP ABAP

" class="redactor_content" style="width: 80%; height: 300px" required data-validation-required-message= "Please enter Step Text">

Go to SE38, provide a program name ZSAPN_SEND_EMAIL, create, provide short text and save it in a local object.

Design selection-screen for material type, email id, subject, send immediately flag inputs.

PARAMETERS P_MTART TYPE MARA-MTART. "material type input
PARAMETERS : P_EMAIL TYPE ADR6-SMTP_ADDR. "Email input
PARAMETERS: P_SUB TYPE CHAR50. "email subject
PARAMETERS : P_SEND AS CHECKBOX. "send immediately flag

Send email wil attachment in SAP ABAP

Step3:Set email document for CL_BCS Important 

Declare CL_BCS class and create object for the class Cl_BCS.

*Prepare Mail Object
DATA:  LO_SEND_REQUEST TYPE REF TO CL_BCS VALUE IS INITIAL.
CLASS CL_BCS DEFINITION LOAD.
LO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

Technically email is a binary document, we need to add document to the email object.Document contains parameters like email type (HTM, TXT etc), email subject, email body.

EMAIL BODY: We can send email body of 255 characters per line, email body might be more than 255 characters, so we need to pass it in the form of lines in an internal table (see example below).

Limitation: While using CL_BCS class to send email, we can set maximum 50 character subject only.
* Message body and subject
DATA: LO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS VALUE IS INITIAL. "document object
DATA : I_TEXT TYPE BCSY_TEXT. "Table for body
DATA : W_TEXT LIKE LINE OF I_TEXT. "work area for message body
*Set body
W_TEXT-LINE = 'This is the first tutorial of sending email using SAP ABAP programming by SAPNuts.com'.
APPEND W_TEXT TO I_TEXT.
CLEAR W_TEXT.
W_TEXT-LINE = 'SAPNuts.com is the best SAP ABAP learning portal'.
APPEND W_TEXT TO I_TEXT.
CLEAR W_TEXT.
*Create Email document
LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT( "create document
I_TYPE = 'TXT' "Type of document HTM, TXT etc
I_TEXT =  I_TEXT "email body internal table
I_SUBJECT = P_SUB ). "email subject here p_sub input parameter
Pass the email document with subject, body and type to send request.
* Pass the document to send request
  LO_SEND_REQUEST->SET_DOCUMENT( LO_DOCUMENT ).

Step4:Convert Data into binary and create ZIP attachment Important 

Declare internal table and work area for MARA, add logic to get data from MARA.

DATA : IT_MARA TYPE TABLE OF MARA, "internal table for MARA
       WA_MARA TYPE MARA. "work area for MARA
**Get data from MARA
  SELECT * FROM MARA INTO TABLE IT_MARA UP TO 50 ROWS
    WHERE MTART = P_MTART.

Declare strings, convert internal table data into string with horizantal tab (tab) and new line.

DATA : LV_STRING TYPE STRING, "declare string
       LV_DATA_STRING TYPE STRING, "declare string
LOOP AT IT_MARA INTO WA_MARA.
    CONCATENATE WA_MARA-MATNR WA_MARA-MTART WA_MARA-MEINS WA_MARA-MBRSH WA_MARA-MATKL INTO LV_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
    CONCATENATE LV_DATA_STRING LV_STRING INTO LV_DATA_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>NEWLINE.
    CLEAR: WA_MARA, LV_STRING.
  ENDLOOP.

Convert string data into xstring using function module HR_KR_STRING_TO_XSTRING.

DATA LV_XSTRING TYPE XSTRING .
**Convert string to xstring
  CALL FUNCTION 'HR_KR_STRING_TO_XSTRING'
    EXPORTING
*     codepage_to      = '8300'
      UNICODE_STRING   = LV_DATA_STRING
*     OUT_LEN          =
    IMPORTING
      XSTRING_STREAM   = LV_XSTRING
    EXCEPTIONS
      INVALID_CODEPAGE = 1
      INVALID_STRING   = 2
      OTHERS           = 3.
  IF SY-SUBRC <> 0.
    IF SY-SUBRC = 1 .

    ELSEIF SY-SUBRC = 2 .
      WRITE:/ 'invalid string ' .
    ENDIF.
  ENDIF.
Convert data into ZIP xstring using CL_ABAP_ZIP class by passing the xstring.
DATA: L_ZIPPER TYPE REF TO CL_ABAP_ZIP. " Zip class declerration
DATA : L_DATA TYPE STRING.
***Xstring to binary
  CREATE OBJECT L_ZIPPER.
  "add file to zip
  CALL METHOD L_ZIPPER->ADD
    EXPORTING
      NAME    = 'Material_master_report.xls'"filename
      CONTENT = LV_XSTRING.
  "save zip
  CALL METHOD L_ZIPPER->SAVE
    RECEIVING
      ZIP = LV_XSTRING.
Convert xstring to binary format using function module SCMS_XSTRING_TO_BINARY and ZIP attachment to send request.
* Convert Xstring into Binary
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      BUFFER     = LV_XSTRING
    TABLES
      BINARY_TAB = LIT_BINARY_CONTENT.
*        EXCEPTIONS
*          program_error                     = 1
*          OTHERS                            = 2.

  CLEAR: L_DATA.
  CONCATENATE 'Material_master_' SY-DATUM INTO L_DATA.
  L_ATTSUBJECT = L_DATA.
  CLEAR L_DATA.
* Create Attachment
  TRY.
    LO_DOCUMENT->ADD_ATTACHMENT( EXPORTING
                                    I_ATTACHMENT_TYPE = 'ZIP'
                                    I_ATTACHMENT_SUBJECT = L_ATTSUBJECT
                                    I_ATT_CONTENT_HEX = LIT_BINARY_CONTENT  ).
  ENDTRY.

Step5:Set Sender and Recipient to send request Important 

For every email, there is a sender and reciever (recipient), set sender and recipient for send request.

TRY...ENDTRY  is used for exception handleing in Object Oriented programming.
*Set Sender
DATA: LO_SENDER TYPE REF TO IF_SENDER_BCS VALUE IS INITIAL.
TRY.
  LO_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ). "sender is the logged in user
* Set sender to send request
  LO_SEND_REQUEST->SET_SENDER(
  EXPORTING
  I_SENDER = LO_SENDER ).
*    CATCH CX_ADDRESS_BCS.
****Catch exception here
ENDTRY.
Set recipient for the send request
**Set recipient
DATA: LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS VALUE IS INITIAL.
LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( P_EMAIL ). "Here Recipient is email input p_email
TRY.
  LO_SEND_REQUEST->ADD_RECIPIENT(
      EXPORTING
      I_RECIPIENT = LO_RECIPIENT
      I_EXPRESS = 'X' ).
*  CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
ENDTRY.

Step6:Set send email for send request Important 

In some servers network management team (BASIS) set mail sending frequency to reduce server load in SMTP(Simple Mail Transfer Protocol) configuration, in such cases the mails will be sent based on server load (may be some time later depends on server load)...In such cases we can set send immediately for the send request.

*Set immediate sending
TRY.
  CALL METHOD LO_SEND_REQUEST->SET_SEND_IMMEDIATELY
    EXPORTING
      I_SEND_IMMEDIATELY = 'X'.
*    CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
ENDTRY.
Finally send email using send request.
TRY.
** Send email
  LO_SEND_REQUEST->SEND(
  EXPORTING
  I_WITH_ERROR_SCREEN = 'X' ).
  COMMIT WORK.
  IF SY-SUBRC = 0.
    WRITE :/ 'Mail sent successfully'.
  ENDIF.
*    CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
*catch exception here
ENDTRY.

Step7:Example program for sending email with attachment in SAP ABAP Normal 

Example program for sending email with attachment in SAP ABAP programming.

Send email with attachment

send email with attachment

REPORT ZSAPN_SEND_EMAIL.
*Prepare Mail Object
DATA:  LO_SEND_REQUEST TYPE REF TO CL_BCS VALUE IS INITIAL.
CLASS CL_BCS DEFINITION LOAD.
DATA: LO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS VALUE IS INITIAL. "document object
DATA : I_TEXT TYPE BCSY_TEXT. "Table for body
DATA : W_TEXT LIKE LINE OF I_TEXT. "work area for message body
DATA: LO_SENDER TYPE REF TO IF_SENDER_BCS VALUE IS INITIAL. "sender
DATA: LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS VALUE IS INITIAL. "recipient
**Selection screen
PARAMETERS P_MTART TYPE MARA-MTART. "material type input
PARAMETERS : P_EMAIL TYPE ADR6-SMTP_ADDR. "Emai input
PARAMETERS: P_SUB TYPE CHAR50. "email subject
PARAMETERS : P_SEND AS CHECKBOX. "send immediatly flag
***Attachment data
DATA : IT_MARA TYPE TABLE OF MARA,
  WA_MARA TYPE MARA.
DATA : LV_STRING TYPE STRING,
  LV_DATA_STRING TYPE STRING,
  LV_XSTRING TYPE XSTRING.
DATA: LIT_BINARY_CONTENT TYPE SOLIX_TAB,
  L_ATTSUBJECT  TYPE SOOD-OBJDES.

START-OF-SELECTION.
  LO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
* Message body and subject
*Set body
  W_TEXT-LINE = 'This is the first tutorial of sending email using SAP ABAP programming by SAPNuts.com'.
  APPEND W_TEXT TO I_TEXT.
  CLEAR W_TEXT.
  W_TEXT-LINE = 'SAPNuts.com is the best SAP ABAP learning portal'.
  APPEND W_TEXT TO I_TEXT.
  CLEAR W_TEXT.
  LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT( "create document
  I_TYPE = 'TXT' "Type of document HTM, TXT etc
  I_TEXT =  I_TEXT "email body internal table
  I_SUBJECT = P_SUB ). "email subject here p_sub input parameter
* Pass the document to send request
  LO_SEND_REQUEST->SET_DOCUMENT( LO_DOCUMENT ).
***Set attachment
  SELECT * FROM MARA INTO TABLE IT_MARA UP TO 50 ROWS
  WHERE MTART = P_MTART.

  LOOP AT IT_MARA INTO WA_MARA.
  CONCATENATE WA_MARA-MATNR WA_MARA-MTART WA_MARA-MEINS WA_MARA-MBRSH WA_MARA-MATKL INTO LV_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
  CONCATENATE LV_DATA_STRING LV_STRING INTO LV_DATA_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>NEWLINE.
  ENDLOOP.
**Convert string to xstring
  CALL FUNCTION 'HR_KR_STRING_TO_XSTRING'
  EXPORTING
*  codepage_to  = '8300'
  UNICODE_STRING  = LV_DATA_STRING
*  OUT_LEN  =
  IMPORTING
  XSTRING_STREAM  = LV_XSTRING
  EXCEPTIONS
  INVALID_CODEPAGE = 1
  INVALID_STRING  = 2
  OTHERS  = 3.
  IF SY-SUBRC <> 0.
  IF SY-SUBRC = 1 .

  ELSEIF SY-SUBRC = 2 .
  WRITE:/ 'invalid string ' .
  ENDIF.
  ENDIF.
  DATA: L_ZIPPER TYPE REF TO CL_ABAP_ZIP. " Zip class declerration
  DATA : L_DATA TYPE STRING.
***Xstring to binary
  CREATE OBJECT L_ZIPPER.
  "add file to zip
  CALL METHOD L_ZIPPER->ADD
  EXPORTING
  NAME  = 'Material_master_report.xls'"filename
  CONTENT = LV_XSTRING.
  "save zip
  CALL METHOD L_ZIPPER->SAVE
  RECEIVING
  ZIP = LV_XSTRING.
* Convert Xstring into Binary
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
  BUFFER  = LV_XSTRING
  TABLES
  BINARY_TAB = LIT_BINARY_CONTENT.
*  EXCEPTIONS
*  program_error  = 1
*  OTHERS  = 2.
*  IF sy-subrc <> 0.
*  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*  ENDIF.
  CLEAR: L_DATA.
  CONCATENATE 'Material_master_' SY-DATUM INTO L_DATA.
  L_ATTSUBJECT = L_DATA.
  CLEAR L_DATA.
* Create Attachment
  TRY.
  LO_DOCUMENT->ADD_ATTACHMENT( EXPORTING
  I_ATTACHMENT_TYPE = 'ZIP'
  I_ATTACHMENT_SUBJECT = L_ATTSUBJECT
  I_ATT_CONTENT_HEX = LIT_BINARY_CONTENT  ).
  ENDTRY.
  TRY.
  LO_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ). "sender is the logged in user
* Set sender to send request
  LO_SEND_REQUEST->SET_SENDER(
  EXPORTING
  I_SENDER = LO_SENDER ).
*  CATCH CX_ADDRESS_BCS.
****Catch exception here
  ENDTRY.
**Set recipient
  LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( P_EMAIL ). "Here Recipient is email input p_email
  TRY.
  LO_SEND_REQUEST->ADD_RECIPIENT(
  EXPORTING
  I_RECIPIENT = LO_RECIPIENT
  I_EXPRESS = 'X' ).
*  CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
  ENDTRY.
  TRY.
  CALL METHOD LO_SEND_REQUEST->SET_SEND_IMMEDIATELY
  EXPORTING
  I_SEND_IMMEDIATELY = P_SEND. "here selection screen input p_send
*  CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
  ENDTRY.
  TRY.
** Send email
  LO_SEND_REQUEST->SEND(
  EXPORTING
  I_WITH_ERROR_SCREEN = 'X' ).
  COMMIT WORK.
  IF SY-SUBRC = 0. "mail sent successfully
  WRITE :/ 'Mail sent successfully'.
  ENDIF.
*  CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
*catch exception here
  ENDTRY.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
辽B代驾管理系统对代驾订单管理、用户咨询管理、代驾订单评价管理、代驾订单投诉管理、字典管理、论坛管理、公告管理、新闻信息管理、司机管理、用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行辽B代驾管理系统程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。辽B代驾管理系统的开发让用户查看代驾订单信息变得容易,让管理员高效管理代驾订单信息。 辽B代驾管理系统具有管理员角色,用户角色,这几个操作权限。 辽B代驾管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理代驾订单信息,管理公告信息等内容。 辽B代驾管理系统针对用户设置的功能有:查看并修改个人信息,查看代驾订单信息,查看公告信息等内容。 辽B代驾管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理代驾订单信息,管理公告信息等内容。 辽B代驾管理系统针对用户设置的功能有:查看并修改个人信息,查看代驾订单信息,查看公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看代驾订单,删除代驾订单操作,新增代驾订单操作,修改代驾订单操作。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。新闻管理页面,此页面提供给管理员的功能有:新增新闻,修改新闻,删除新闻。新闻类型管理页面,此页面提供给管理员的功能有:新增新闻类型,修改新闻类型,删除新闻类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值