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: 

Mail content coming as Attachment too.

Former Member
0 Kudos

Hi -

While we are trying to send mails using SO_DOCUMENT_SEND_API1 ,

the mail content is coming as attachment .

Can you suggest whats worng ?

Thanks,

sandhya

10 REPLIES 10

Former Member
0 Kudos

Hi,

According to my understanding i guess you are appending the mail content to the internal table for atachment. since you havent pasted you code, i cant much comment whats wrong.

mebbe it would help if you go through my code snippet..


*     Objects to send mail.
  DATA: L_T_OBJPACK   LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE,        " SAPoffice: Description of Imported Object Components
        L_T_OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE,
        L_T_OBJTXT    LIKE SOLISTI1   OCCURS 10 WITH HEADER LINE,
        L_T_OBJBIN    LIKE SOLISTI1   OCCURS 10 WITH HEADER LINE,
        L_T_RECLIST   LIKE SOMLRECI1  OCCURS 5 WITH HEADER LINE,        " SAPoffice: Structure of the API Recipient List
        L_DATE LIKE SY-DATUM,
        V_DOCUMENT_DATA TYPE SODOCCHGI1.


  DATA:
*     Work Area declarations
        L_WA_OBJHEAD   TYPE SOLI_TAB,                                    " Work Area for Objcont and Objhead as Table Type
        L_WA_DOC_CHNG  TYPE SODOCCHGI1,                                  " Work Area - Data of an object which can be changed

*     Variables declarations
        L_LINES_TXT    TYPE I,
        L_LINES_BIN    TYPE I,
        L_OBJ_DESC(100),
        L_NAME(100).

  DATA : BEGIN OF L_T_EMAIL OCCURS 0,
  EMAIL_ID(100),
  END OF L_T_EMAIL.

* email -id
  SELECT LOW INTO TABLE L_T_EMAIL
  FROM TVARVC
  WHERE NAME EQ 'ZREUTERS_MAIL'.

  IF SY-SUBRC <> 0.
    L_T_EMAIL-EMAIL_ID = SY-UNAME.
    APPEND L_T_EMAIL.
    MESSAGE I999 WITH 'Email IDs not maintained in TVARVC'.
  ENDIF.

  
*Fill in the contents of the mail body
L_T_OBJBIN = ' Reuters File format'.
APPEND L_T_OBJBIN.


* Attachment
  REFRESH: L_T_RECLIST,
           L_T_OBJTXT,
           L_T_OBJPACK.

  CLEAR L_WA_OBJHEAD.

  
* Create Message Body Title and Description
  CONCATENATE 'Reuters File' Sy-datum INTO L_NAME SEPARATED BY SPACE.
  L_T_OBJTXT = L_NAME.
  APPEND L_T_OBJTXT.

  CONCATENATE 'Reuters File' Sy-datum INTO L_OBJ_DESC SEPARATED BY SPACE.

  DESCRIBE TABLE L_T_OBJTXT LINES L_LINES_TXT.
  READ TABLE L_T_OBJTXT INDEX L_LINES_TXT.
  L_WA_DOC_CHNG-OBJ_NAME = L_NAME.
  L_WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
  L_WA_DOC_CHNG-OBJ_DESCR = L_OBJ_DESC.
  L_WA_DOC_CHNG-SENSITIVTY = 'O'.
  L_WA_DOC_CHNG-DOC_SIZE = STRLEN( L_T_OBJTXT ).

* Main Text
  CLEAR L_T_OBJPACK-TRANSF_BIN.
  L_T_OBJPACK-HEAD_START = 1.
  L_T_OBJPACK-HEAD_NUM = 0.
  L_T_OBJPACK-BODY_START = 1.
  L_T_OBJPACK-BODY_NUM = 1.
  L_T_OBJPACK-DOC_TYPE = 'RAW'.
  L_T_OBJPACK-DOC_SIZE = STRLEN( L_T_OBJTXT ).
  APPEND L_T_OBJPACK.

* Attachment
  DESCRIBE TABLE L_T_OBJBIN LINES L_LINES_BIN.
  READ TABLE L_T_OBJBIN INDEX L_LINES_BIN.

  CLEAR L_T_OBJPACK.
  L_T_OBJPACK-TRANSF_BIN = 'X'.
  L_T_OBJPACK-HEAD_START = 1.
  L_T_OBJPACK-HEAD_NUM = 1.
  L_T_OBJPACK-BODY_START = 1.
  L_T_OBJPACK-BODY_NUM = L_LINES_BIN.
  L_T_OBJPACK-DOC_TYPE = 'RAW'.
  L_T_OBJPACK-OBJ_NAME = 'EMAIL'.
  L_T_OBJPACK-OBJ_DESCR = ' Exchange rate File'.
  L_T_OBJPACK-DOC_SIZE = ( 255 * ( L_LINES_BIN - 1 ) ) + STRLEN( L_T_OBJBIN-LINE ).
  APPEND L_T_OBJPACK.

  LOOP AT L_T_EMAIL.
* Maintain Recievers
    CLEAR L_T_RECLIST.
    L_T_RECLIST-RECEIVER = L_T_EMAIL-EMAIL_ID.
    L_T_RECLIST-REC_TYPE = 'U'.
    L_T_RECLIST-EXPRESS = 'X'.
    APPEND L_T_RECLIST.
  ENDLOOP.

  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA              = L_WA_DOC_CHNG
      PUT_IN_OUTBOX              = 'X'
      COMMIT_WORK                = 'X'
    TABLES
      PACKING_LIST               = L_T_OBJPACK
      OBJECT_HEADER              = L_WA_OBJHEAD
      CONTENTS_BIN               = L_T_OBJBIN
      CONTENTS_TXT               = L_T_OBJTXT
      RECEIVERS                  = L_T_RECLIST
    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 NE 0.
    MESSAGE S999(ZZ) WITH 'Mail Could not be sent'.
  ELSE.
    MESSAGE S999(ZZ) WITH 'Mail sent to group'.
  ENDIF.
ENDFORM.                    "F0005_ATTACH_AND_MAIL

Let me know if this is the case. For further issues write back.

Regards,

Mansi.

0 Kudos

Hi -

The attachment is not given anywhere. The email content which i fill comes. But, the same comes along with the mail as multiple attachments.

Thanks,

Sandhya

Former Member
0 Kudos

Hi,

Check the internal table and workarea same for the both attachment and workarea.

If so clear before using it for attachment.

use different internal tables.

Regards,

Nandha

0 Kudos

hi,

If your problem is not solved please do the bellow steps.

1.goto TCODE SCOT .

2. double click on INT, SMTP.

3.click on set push button of internet chechbox.

4.In RAW TEXT provide 'TXT'.

run your program.

regards,

padmaja.

Former Member
0 Kudos

Hi,

Try using the sample code below:



*&---------------------------------------------------------------------*
*& Report  ZBC_ITAB_TO_EXCEL_NEW                                       *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZBC_ITAB_TO_EXCEL_NEW                   .

CLASS: cl_abap_char_utilities DEFINITION LOAD.

DATA: docdata LIKE sodocchgi1,
      objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,
      objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
      objbin1 LIKE solisti1 OCCURS 10 WITH HEADER LINE,
      objbin2 LIKE solisti1 OCCURS 10 WITH HEADER LINE,
      objbin_final LIKE solisti1 OCCURS 10 WITH HEADER LINE,
      reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE,
      tab_lines TYPE sy-tabix.

DATA: gd_sender_type LIKE soextreci1-adr_typ.

DATA: c_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
      c_ret TYPE c VALUE cl_abap_char_utilities=>cr_lf.

DATA: c_dev TYPE sy-sysid.

DATA: BEGIN OF i_data OCCURS 0,
      a(20),
      b(20),
      END OF i_data.

DATA: BEGIN OF st,
      f1(2) TYPE c,
      f2(2) TYPE n,
      END OF st.

DATA: itab1 LIKE TABLE OF st WITH HEADER LINE,
      itab2 LIKE TABLE OF st WITH HEADER LINE.


DATA: n TYPE i.

PARAMETER: p_email1 LIKE somlreci1-receiver,
                       p_sender LIKE somlreci1-receiver.

START-OF-SELECTION.

  itab1-f1 = 'AA'. itab1-f2 = '01'. APPEND itab1.
  itab1-f1 = 'BB'. itab1-f2 = '02'. APPEND itab1.
  itab1-f1 = 'CC'. itab1-f2 = '03'. APPEND itab1.

  itab2-f1 = 'ZZ'. itab2-f2 = '26'. APPEND itab2.
  itab2-f1 = 'YY'. itab2-f2 = '25'. APPEND itab2.

  LOOP AT itab1.
    CONCATENATE itab1-f1 itab1-f2 INTO objbin1 separated BY c_tab.
    CONCATENATE c_ret objbin1 INTO objbin1.
    APPEND objbin1.
  ENDLOOP.

  LOOP AT itab2.
    CONCATENATE itab2-f1 itab2-f2 INTO objbin2 separated BY c_tab.
    CONCATENATE c_ret objbin2 INTO objbin2.
    APPEND objbin2.
  ENDLOOP.

  LOOP AT objbin1.
    MOVE objbin1-line TO objbin_final-line.
    APPEND objbin_final.
  ENDLOOP.

  LOOP AT objbin2.
    MOVE objbin2-line TO objbin_final-line.
    APPEND objbin_final.
  ENDLOOP.

  PERFORM process_email.
  c_dev = sy-sysid.

  IF sy-sysid = c_dev.
    wait up to 5 seconds.
    SUBMIT rsconn01 WITH mode = 'INT'
    WITH output = 'X'
    AND RETURN.
  ENDIF.

  IF sy-subrc = 0.
    WRITE: / 'Email succesfilly delivered'.
  ELSE.
    WRITE: / 'failure'.
  ENDIF.

*&--------------------------------------------------------------------*
*&      Form  process_email
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM process_email.

  IF p_sender EQ space.
    gd_sender_type = space.
  ELSE.
    gd_sender_type = 'INT'.
  ENDIF.

*Body
  docdata-obj_name = 'Mail_Excel_File'.
  docdata-obj_descr = 'Excel file attachment'.
  objtxt = 'Attached is the sample Excel file'.
  APPEND objtxt.
  DESCRIBE TABLE objtxt LINES tab_lines.
  READ TABLE objtxt INDEX tab_lines.
  docdata-doc_size = ( tab_lines - 1 ) * 255 + strlen( objtxt ).

  CLEAR objpack-transf_bin.
  objpack-head_start = 1.
  objpack-head_num = 0.
  objpack-body_start = 1.
  objpack-body_num = tab_lines.
  objpack-doc_type = 'RAW'.
  APPEND objpack.

*Attachment
  n = 1.

  DESCRIBE TABLE objbin1 LINES tab_lines.
  objpack-doc_size = tab_lines * 255.
  objpack-transf_bin = 'X'.
  objpack-head_start = 1.
  objpack-head_num = 1.
  objpack-body_start = n.
  objpack-body_num = tab_lines.
  objpack-doc_type = 'XLS'.
  docdata-obj_name = 'Excel_File_Attachment1'.
  objpack-obj_descr = 'Excel File Attachment1'.
  APPEND objpack.

  n = n + tab_lines.

  DESCRIBE TABLE objbin2 LINES tab_lines.
  objpack-doc_size = tab_lines * 255.
  objpack-transf_bin = 'X'.
  objpack-head_start = 1.
  objpack-head_num = 1.
  objpack-body_start = n.
  objpack-body_num = tab_lines.
  objpack-doc_type = 'XLS'.
  docdata-obj_name = 'Excel_File_Attachment2'.
  objpack-obj_descr = 'Excel File Attachment2'.
  APPEND objpack.


*Create the list of recipients
  reclist-receiver = p_email1.
  reclist-rec_type = 'U'.
  reclist-express = 'X'.
  APPEND reclist.


*Send the e-mail
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      document_data              = docdata
      put_in_outbox              = 'X'
      commit_work                = 'X'
    TABLES
      packing_list               = objpack
      contents_bin               = objbin_final
      contents_txt               = objtxt
      receivers                  = reclist
    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.

  COMMIT WORK.
ENDFORM.                    "process_email

Hope it helps

Regards

Mansi

I355602
Advisor
Advisor
0 Kudos

Hi,

Refer this wiki:

http://wiki.sdn.sap.com/wiki/display/Snippets/Sendingmailwith+attachment

Hope this helps you.

Regards,

Tarun

RahulKeshav
Active Contributor
0 Kudos

As both the internal table will be of same type SOLISTI1.

So just clear the workarea after filling the mail contents.

You might be using same workarea for filling the internal tables objtxt and objbin....

Edited by: Rahul Keshav on Oct 20, 2009 1:12 PM

0 Kudos

Hi Rahul,

I need some help regarding your Wiki article on Adding new check in Code Inspector. I couldn't find your mail address.

I also have posted a comment on your Wiki regarding my issue.

Please provide me your mailing address. Hope you can help me out.

P.S: Sorry for posting message on a wrong thread.

Thanks,

Nasir

mail: mohammedn"at"intelligroup.com or

find my mailing address in my business card.

0 Kudos

For function module SO_DOCUMENT_SEND_API1 to work you must set the parameter COMMIT_WORK = X. Importan: do not set document size

Thanks

Nikos

0 Kudos

Dear Sandhya,

you must break the full text you want to send as the body of your message, in lines of 255 chars. Below, I have included code for sending e-mails using FM SO_DOCUMENT_SEND_API1.

-


DATA: objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE.

DATA: objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.

DATA: objbin LIKE solisti1 OCCURS 1 WITH HEADER LINE.

DATA: objtxt LIKE solisti1 OCCURS 1 WITH HEADER LINE.

DATA: reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE.

DATA: doc_chng LIKE sodocchgi1.

DATA: tab_lines LIKE sy-tabix.

DATA: tab_start LIKE sy-tabix.

DATA: file_size LIKE sood-objlen.

DATA: l_vbeln LIKE vbak-vbeln.

FIELD-SYMBOLS: <vbeln> TYPE ANY.

DATA: tmp_bin LIKE solisti1 OCCURS 1 WITH HEADER LINE.

  • e-mail message content (raw text)

concatenate 'Webprices Log for job with filename' filenam

into objtxt separated by space.

APPEND objtxt.

  • Creation of the document to be sent

CLEAR doc_chng.

doc_chng-obj_name = 'HEADER'.

concatenate 'Webprices Log for job with filename' filenam

into doc_chng-obj_descr separated by space. "E-mail subject

DESCRIBE TABLE objtxt LINES tab_lines.

READ TABLE objtxt INDEX tab_lines.

doc_chng-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).

  • Creation of the entry for the compressed document

CLEAR objpack.

objpack-head_start = 1.

objpack-head_num = 0.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = 'RAW'.

APPEND objpack.

  • Creation of 1st document attachment

objhead = 'file_1'.

APPEND objhead.

LOOP AT itabx.

MOVE itabx-line TO objbin-line.

  • MOVE ITABX-LINE TO OBJTXT-LINE.

APPEND objbin.

  • APPEND OBJTXT.

ENDLOOP.

DESCRIBE TABLE objbin LINES tab_lines.

file_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).

CLEAR objpack.

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 1.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = 'RAW'.

objpack-obj_name = 'ATTACHMENT_1'.

objpack-obj_descr = doc_chng-obj_descr. "Attach descr

objpack-doc_size = file_size.

APPEND objpack.

tab_start = objpack-body_start + objpack-body_num.

  • Completing recipient list

  • External mail

CLEAR: reclist, reclist[].

  • reclist-receiver = 'nvoriz.at.yahoo.com'.

  • RECLIST-REC_TYPE = 'U'.

  • APPEND RECLIST.

reclist-receiver = 'NVORIZANAKIS'.

reclist-rec_type = 'B'.

APPEND reclist.

reclist-receiver = 'OtherAccount'.

reclist-rec_type = 'B'.

APPEND reclist.

reclist-receiver = 'info.at.advti.gr'.

reclist-rec_type = 'U'.

APPEND reclist.

  • Internal mail

  • CLEAR RECLIST.

  • RECLIST-RECEIVER = SY-UNAME.

  • RECLIST-REC_TYPE = 'B'.

  • APPEND RECLIST.

  • Sending the document

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

document_data = doc_chng

put_in_outbox = 'X'

commit_work = 'X'

TABLES

packing_list = objpack

object_header = objhead

contents_bin = objbin

contents_txt = objtxt

receivers = reclist

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

operation_no_authorization = 4

OTHERS = 99.