Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Email from ABAP program to outlook with attachment

Former Member
0 Kudos

Hi,

I need to send an email to outlook from my program with an attachment. I wrote my program without attchment feature and working fine. I really donot understand how to do attchment. Can anyone send me some piece of code.

I promise points will be rewarded for useful answers.

Thanks In Advance.

Rajesh.

6 REPLIES 6

Former Member
0 Kudos

hi Rajesh,

CHeck this out

Regards,

Santosh

Message was edited by: Santosh Kumar P

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

Here is a sample program how to attach a sapscript output to your email.



REPORT ZRICH_0003.


DATA: ITCPO LIKE ITCPO,
      TAB_LINES LIKE SY-TABIX.


* Variables for EMAIL functionality
DATA: MAILDATA   LIKE SODOCCHGI1.
DATA: MAILPACK   LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: MAILHEAD   LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: MAILBIN    LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: MAILTXT    LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: MAILREC    LIKE SOMLREC90 OCCURS 0  WITH HEADER LINE.
DATA: SOLISTI1   LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.


PERFORM SEND_FORM_VIA_EMAIL.


************************************************************************
*       FORM  SEND_FORM_VIA_EMAIL                                      *
************************************************************************
FORM  SEND_FORM_VIA_EMAIL.

  CLEAR:    MAILDATA, MAILTXT, MAILBIN, MAILPACK, MAILHEAD, MAILREC.
  REFRESH:  MAILTXT, MAILBIN, MAILPACK, MAILHEAD, MAILREC.

* Creation of the document to be sent File Name
  MAILDATA-OBJ_NAME = 'TEST'.
* Mail Subject
  MAILDATA-OBJ_DESCR = 'Subject'.

* Mail Contents
  MAILTXT-LINE = 'Here is your file'.
  APPEND MAILTXT.

* Prepare Packing List
  PERFORM PREPARE_PACKING_LIST.

* Set recipient - email address here!!!
  MAILREC-RECEIVER = 'itsme@whatever.com'.
  MAILREC-REC_TYPE  = 'U'.
  APPEND MAILREC.

* Sending the document
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
       EXPORTING
            DOCUMENT_DATA              = MAILDATA
            PUT_IN_OUTBOX              = ' '
       TABLES
            PACKING_LIST               = MAILPACK
            OBJECT_HEADER              = MAILHEAD
            CONTENTS_BIN               = MAILBIN
            CONTENTS_TXT               = MAILTXT
            RECEIVERS                  = MAILREC
       EXCEPTIONS
            TOO_MANY_RECEIVERS         = 1
            DOCUMENT_NOT_SENT          = 2
            OPERATION_NO_AUTHORIZATION = 4
            OTHERS                     = 99.

ENDFORM.

************************************************************************
*      Form  PREPARE_PACKING_LIST
************************************************************************
FORM PREPARE_PACKING_LIST.

  CLEAR:    MAILPACK, MAILBIN, MAILHEAD.
  REFRESH:  MAILPACK, MAILBIN, MAILHEAD.

  DESCRIBE TABLE MAILTXT LINES TAB_LINES.
  READ TABLE MAILTXT INDEX TAB_LINES.
  MAILDATA-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( MAILTXT ).

* Creation of the entry for the compressed document
  CLEAR MAILPACK-TRANSF_BIN.
  MAILPACK-HEAD_START = 1.
  MAILPACK-HEAD_NUM = 0.
  MAILPACK-BODY_START = 1.
  MAILPACK-BODY_NUM = TAB_LINES.
  MAILPACK-DOC_TYPE = 'RAW'.
  APPEND MAILPACK.

* Creation of the document attachment
* This form gets the OTF code from the SAPscript form.
* If you already have your OTF code, I believe that you may
* be able to skip this form.  just do the following code, looping thru
* your SOLISTI1 and updating MAILBIN.
  PERFORM GET_OTF_CODE.

  LOOP AT SOLISTI1.
    MOVE-CORRESPONDING SOLISTI1 TO MAILBIN.
    APPEND MAILBIN.
  ENDLOOP.

  DESCRIBE TABLE MAILBIN LINES TAB_LINES.
  MAILHEAD = 'TEST.OTF'.
  APPEND MAILHEAD.

** Creation of the entry for the compressed attachment
  MAILPACK-TRANSF_BIN = 'X'.
  MAILPACK-HEAD_START = 1.
  MAILPACK-HEAD_NUM = 1.
  MAILPACK-BODY_START = 1.
  MAILPACK-BODY_NUM = TAB_LINES.
  MAILPACK-DOC_TYPE = 'OTF'.
  MAILPACK-OBJ_NAME = 'TEST'.
  MAILPACK-OBJ_DESCR = 'Subject'.
  MAILPACK-DOC_SIZE = TAB_LINES * 255.
  APPEND MAILPACK.

ENDFORM.

************************************************************************
*      Form  GET_OTF_CODE
************************************************************************
FORM  GET_OTF_CODE.

  DATA: BEGIN OF OTF OCCURS 0.
          INCLUDE STRUCTURE ITCOO .
  DATA: END OF OTF.

  DATA: ITCPO LIKE ITCPO.
  DATA: ITCPP LIKE ITCPP.

  CLEAR ITCPO.
  ITCPO-TDGETOTF = 'X'.

* Start writing OTF code
  CALL FUNCTION 'OPEN_FORM'
       EXPORTING
            FORM     = 'ZTEST_FORM'
            LANGUAGE = SY-LANGU
            OPTIONS  = ITCPO
            DIALOG   = ' '
       EXCEPTIONS
            OTHERS   = 1.

  CALL FUNCTION 'START_FORM'
       EXCEPTIONS
            ERROR_MESSAGE = 01
            OTHERS        = 02.

  CALL FUNCTION 'WRITE_FORM'
       EXPORTING
            WINDOW        = 'MAIN'
       EXCEPTIONS
            ERROR_MESSAGE = 01
            OTHERS        = 02.

* Close up Form and get OTF code
  CALL FUNCTION 'END_FORM'
       EXCEPTIONS
            ERROR_MESSAGE = 01
            OTHERS        = 02.

  MOVE-CORRESPONDING ITCPO TO ITCPP.

  CALL FUNCTION 'CLOSE_FORM'
       IMPORTING
            RESULT  = ITCPP
       TABLES
            OTFDATA = OTF
       EXCEPTIONS
            OTHERS  = 1.

* Move OTF code to structure SOLI form email
  CLEAR SOLISTI1. REFRESH SOLISTI1.
  LOOP AT OTF.
    SOLISTI1-LINE = OTF.
    APPEND SOLISTI1.
  ENDLOOP.

ENDFORM.

Regards,

Rich Heilman

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

Here is an example of adding multiple text files as attachements.



report zrich_0003.


data: itcpo like itcpo,
      tab_lines like sy-tabix.


* Variables for EMAIL functionality
data: maildata   like sodocchgi1.
data: mailpack   like sopcklsti1 occurs 2 with header line.
data: mailhead   like solisti1 occurs 1 with header line.
data: mailbin    like solisti1 occurs 10 with header line.
data: mailtxt    like solisti1 occurs 10 with header line.
data: mailrec    like somlrec90 occurs 0  with header line.
data: solisti1   like solisti1 occurs 0 with header line.


perform send_form_via_email.


************************************************************************
*       FORM  SEND_FORM_VIA_EMAIL                                      *
************************************************************************
form  send_form_via_email.

  clear:    maildata, mailtxt, mailbin, mailpack, mailhead, mailrec.
  refresh:  mailtxt, mailbin, mailpack, mailhead, mailrec.

* Creation of the document to be sent File Name
  maildata-obj_name = 'TEST'.
* Mail Subject
  maildata-obj_descr = 'Subject'.

* Mail Contents
  mailtxt-line = 'Here is your file'.
  append mailtxt.

* Prepare Packing List
  perform prepare_packing_list.

* Set recipient - email address here!!!
  mailrec-receiver = 'rich.heilman@yorktwn.com'.
  mailrec-rec_type  = 'U'.
  append mailrec.

* Sending the document
  call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'
       exporting
            document_data              = maildata
            put_in_outbox              = ' '
       tables
            packing_list               = mailpack
            object_header              = mailhead
            contents_bin               = mailbin
            contents_txt               = mailtxt
            receivers                  = mailrec
       exceptions
            too_many_receivers         = 1
            document_not_sent          = 2
            operation_no_authorization = 4
            others                     = 99.

endform.

************************************************************************
*      Form  PREPARE_PACKING_LIST
************************************************************************
form prepare_packing_list.

  clear:    mailpack, mailbin, mailhead.
  refresh:  mailpack, mailbin, mailhead.

  describe table mailtxt lines tab_lines.
  read table mailtxt index tab_lines.
  maildata-doc_size = ( tab_lines - 1 ) * 255 + strlen( mailtxt ).

* Creation of the entry for the compressed document
  clear mailpack-transf_bin.
  mailpack-head_start = 1.
  mailpack-head_num = 0.
  mailpack-body_start = 1.
  mailpack-body_num = tab_lines.
  mailpack-doc_type = 'RAW'.
  append mailpack.

  mailhead = 'TEST.TXT'.
  append mailhead.



* File 1
  mailbin = 'This is file 1'.
  append mailbin.

  describe table mailbin lines tab_lines.

  mailpack-transf_bin = 'X'.
  mailpack-head_start = 1.
  mailpack-head_num = 1.
  mailpack-body_start = 1.
  mailpack-body_num = tab_lines.
  mailpack-doc_type = 'TXT'.
  mailpack-obj_name = 'TEST1'.
  mailpack-obj_descr = 'Subject'.
  mailpack-doc_size = tab_lines * 255.
  append mailpack.



*File 2
  mailbin = 'This is file 2'.
  append mailbin.

  data: start type i.
  data: end type i.

  start = tab_lines + 1.

  describe table mailbin lines end.

  mailpack-transf_bin = 'X'.
  mailpack-head_start = 1.
  mailpack-head_num = 1.
  mailpack-body_start = start.
  mailpack-body_num = end.
  mailpack-doc_type = 'TXT'.
  mailpack-obj_name = 'TEST2'.
  mailpack-obj_descr = 'Subject'.
  mailpack-doc_size = tab_lines * 255.
  append mailpack.


endform.

Regards,

Rich Heilman

0 Kudos

I am not sending any smart form or script form as an attachment, i have some data in an internal table and i need to send that data as an Excel file. Also the field names of the internal table should be there in the Excel file.

0 Kudos

0 Kudos

Hi Rich,

I am trying to send a Purchase Order to vendor thru transaction ME22N1/ME22N. I maintained two emails of vendor in vendor master XK02. The standard program is sending only one email which is working 100% fine. But I need to send email to two email address of the same vendor like vendor@yahoo.com and vendor@gmail. I am using output type ZU01, print program SAPFM06P and SAP Script ZMEDRUCK. I tried debugging SAP standard print program SAPFM06P and could find a point where exactly I need to add the code to send emails to vendor. I am kind of loss. I would really appreciate if you could suggest me the steps to do. sample code is really appreciated.

Thanks,

Nani.