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: 

Problem with E-mail Attachment.

Former Member
0 Kudos

HI all

My requirement is to send a mails through E-mails to external mail addresses, with an attachment. That attachment contains a report which i am sending. After receiving it i am getting the report as a text file. But the output of the text file which i am getting it in a single line as shown below.


 0 0 0 0 0 0 0 1 P e d r o   P é r e z                                                                                0 0 0 0 0 0 0 3 M a r i a   L o p e z                                                                                0 0 0 0 0 0 0 4 M a r i a   L o p e z                                                                                0 0 0 0 0 0 0 5 M a n u e l   G a r c i a                                                                                0 0 0 0 0 0 0 6 V i c e n t e   L o p e z                                                                                0 0 0 0 0 0 0 7 I s r a e l   G a y o s o                                                                                0 0 0 0 0 0 0 8 D a n i e l   D a r r i b a                                                                                0 0 0 0 0 0 0 9 M a n u e l   P e r e z                                                                                0 0 0 0 0 0 1 0 L a u r a   P e n a                                                                                0 0 0 0 0 0 1 1 M i g u e l   M a r t i s                                                                                0 0 0 0 0 0 1 2 M a r i a   L o p e z                                                                                0 0 0 0 0 0 1 5 f i r s t 1   l a s t 1

I just want a proper text output. line by line as shown below.

0 0 0 0 0 0 0 1 P e d r o P é r e z

0 0 0 0 0 0 0 3 M a r i a L o p e z

0 0 0 0 0 0 0 4 M a r i a L o p e z

0 0 0 0 0 0 0 5 M a n u e l G a r c i a

0 0 0 0 0 0 0 6 V i c e n t e L o p e z

0 0 0 0 0 0 0 7 I s r a e l G a y o s o

0 0 0 0 0 0 0 8 D a n i e l D a r r i b a

0 0 0 0 0 0 0 9 M a n u e l P e r e z

0 0 0 0 0 0 1 0 L a u r a P e n a

0 0 0 0 0 0 1 1 M i g u e l M a r t i s

0 0 0 0 0 0 1 2 M a r i a L o p e z

0 0 0 0 0 0 1 5 f i r s t 1 l a s t 1

Please tell me, how do i get the output in a proper format?

and also, take a look at the code and suggest me some

changes needed in the code...

I have used the function Module 'SO_NEW_DOCUMENT_ATT_SEND_API1'

Below is the program which i have written for getting this output.

*******************************************************************************

*******************************Program************************************

*******************************************************************************


REPORT  zsha_test_mail_prog1.
 
DATA: objpack LIKE sopcklsti1 OCCURS  2 WITH HEADER LINE.
DATA: objhead LIKE solisti1   OCCURS  1 WITH HEADER LINE.
DATA: objbin  TYPE solisti1   OCCURS 10 WITH HEADER LINE.
DATA : objbin1(50) TYPE c OCCURS 10 WITH HEADER LINE.
DATA: objtxt  LIKE solisti1   OCCURS 10 WITH HEADER LINE.
DATA: reclist LIKE somlreci1  OCCURS  5 WITH HEADER LINE.
DATA: doc_chng LIKE sodocchgi1.
DATA: tab_lines1 LIKE sy-tabix,
      tab_lines2 LIKE sy-tabix,
      v_flag TYPE n.
 
*************************************************************
*Begin of Changes made on 30/10/2008
*************************************************************
DATA : prog TYPE sy-repid,
       vari1 LIKE raldb-variant.
DATA: itab1 LIKE abaplist OCCURS   0 WITH HEADER LINE.
 
DATA: BEGIN OF html_tab OCCURS 0.
        INCLUDE STRUCTURE w3html.
DATA: END OF html_tab,
      id(100)    TYPE c,
      text TYPE string.
 
DATA : BEGIN OF itab OCCURS 0,
pernr LIKE pa0001-pernr,
ename LIKE pa0001-ename,
END OF itab,
 
BEGIN OF itab2 OCCURS 0,
string TYPE string,
END OF itab2.
DATA : content_txt TYPE STANDARD TABLE OF soli,
       wa_content  TYPE LINE OF soli_tab.
 
START-OF-SELECTION.
 
  SELECT pernr ename
  INTO CORRESPONDING FIELDS OF TABLE itab
  FROM pa0001
  WHERE pernr < 50.
 
  LOOP AT itab.
    CONCATENATE itab-pernr itab-ename  INTO text .&quot;SEPARATED BY space RESPECTING BLANKS .
    SHIFT text LEFT DELETING LEADING space.
    SHIFT text RIGHT DELETING TRAILING space.
    WRITE :/02 sy-vline , itab-pernr, 15 sy-vline , itab-ename, 50 sy-vline.
    objbin1 = text.
    APPEND objbin1.
    objbin[] = objbin1[].
  ENDLOOP.
 
* Creating the document to be sent
 
  doc_chng-obj_name = 'SAPRPT'.
  doc_chng-obj_descr = 'List of Employees who have been resigned'.
  objtxt = 'List of Employees'.
  APPEND objtxt.
 
  objtxt = 'The list of Employees, who had got Resigned'.
  APPEND objtxt.
  objtxt = 'is enclosed as an attachment.'.
  APPEND objtxt.
 
  DESCRIBE TABLE objtxt LINES tab_lines1.
  READ TABLE objtxt INDEX tab_lines1.
  doc_chng-doc_size = ( tab_lines1 - 1 ) * 255 + STRLEN( objtxt ).
 
* Creating the entry <b>for</b> the compressed document
 
  CLEAR objpack-transf_bin.
  objpack-head_start = 0.
  objpack-head_num   = 1.
  objpack-body_start = 1.
  objpack-body_num   = tab_lines1.
  objpack-doc_type   = 'RAW'.
  APPEND objpack.
 
 
 
  DESCRIBE TABLE objbin LINES tab_lines2.
  objhead = 'LIST OF EMP.TXT'. APPEND objhead.
* Creating the entry <b>for</b> the compressed attachment
 
  objpack-transf_bin = 'X'.
  objpack-head_start = 0.
  objpack-head_num   = 0.
  objpack-body_start = 1.
  objpack-body_num   = tab_lines2.
  objpack-doc_type   = 'TXT'.
  objpack-obj_name   = 'ATTACHMENT'.
  objpack-obj_descr = 'List of Emp.'.
  objpack-doc_size   = tab_lines2 * 255.
  APPEND objpack.
 
* Entering names in the distribution list
 
  reclist-receiver = external mail id. 
  reclist-rec_type = 'U'.
  reclist-com_type = 'INT'.
  reclist-notif_del = 'X'.
  reclist-notif_ndel = 'X'.
  APPEND reclist.
 
 
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_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.
 
  CASE sy-subrc.
    WHEN 0.
      WRITE: / 'Result of the send process:'.
      LOOP AT reclist.
        WRITE: / reclist-receiver(48), ':'.
        IF reclist-retrn_code = 0.
          WRITE 'sent successfully'.
        ELSE.
          WRITE 'not sent'.
        ENDIF.
      ENDLOOP.
    WHEN 1.
      WRITE: / 'no authorization to send to the specified number of',              'recipients!'.
    WHEN 2.
      WRITE: / 'document could not be sent to any of the recipients!'.
    WHEN 4.
      WRITE: / 'no authorization to send !'.
    WHEN OTHERS.
      WRITE: / 'error occurred during sending !'.
  ENDCASE.

4 REPLIES 4

Former Member
0 Kudos

HI chetan oswal

As ur requirement is not having the attachment to the mail use smtp_sendmail. This will be use full.

BYee.

Former Member
0 Kudos

Hi Chetan,

Try this code.

At beginning of code, put following syntaks

CLASS cl_abap_char_utilities DEFINITION LOAD.

And at your code, modify your concatenation like below

...

LOOP AT itab.

CONCATENATE itab-pernr itab-ename

CL_ABAP_CHAR_UTILITIES=>CR_LF

INTO text

...

Regards,

Ari

Former Member
0 Kudos

2.----


  • Mail Subject

refresh objpack[].

CONCATENATE 'Pricol Dispatch - Invoice' invno '- Reg.' INTO sub SEPARATED BY space.

doc_chng-obj_descr = sub.

doc_chng-sensitivty = 'F'.

doc_chng-doc_size = v_lines_txt * 255.

objpack-transf_bin = ' '.

objpack-head_start = 1.

objpack-head_num = 0.

objpack-body_start = 1.

objpack-body_num = v_lines_txt.

objpack-doc_type = 'RAW'.

APPEND objpack.

*PDF Attachment

DESCRIBE TABLE so_ali[] LINES lineno.

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 1.

objpack-body_start = 1.

objpack-doc_size = lineno * 255 .

objpack-body_num = lineno.

objpack-doc_type = 'PDF'.

objpack-obj_name = 'INVOICE'.

objpack-obj_descr = 'Invoice'.

objpack-obj_langu = 'E'.

APPEND objpack.

Former Member
0 Kudos

Hi Chetan,

Refer this program i used this ,this is working fine

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

FORMAT = 'PDF'

MAX_LINEWIDTH = 132

  • ARCHIVE_INDEX = ' '

  • COPYNUMBER = 0

  • ASCII_BIDI_VIS2LOG = ' '

  • PDF_DELETE_OTFTAB = ' '

IMPORTING

BIN_FILESIZE = GV_BIN_FILESIZE "Store the file size

  • BIN_FILE =

TABLES

OTF = GT_OTF "OTF Structure

LINES = GT_PDF_TAB "SAPscript: Text Lines

EXCEPTIONS

ERR_MAX_LINEWIDTH = 1

ERR_FORMAT = 2

ERR_CONV_NOT_POSSIBLE = 3

ERR_BAD_OTF = 4

OTHERS = 5

.

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 : GT_RECLIST, GS_RECLIST.

GS_RECLIST-RECEIVER = p_mail_to. "p_mail_to.

GS_RECLIST-REC_TYPE = 'B'."'G' ."'O'. "'B'. "'U'.

APPEND GS_RECLIST TO GT_RECLIST.

PERFORM SEND_MAIL. " SEND MAIL

MESS = MESS_VAL.

ENDFUNCTION.

&----


*& Form SPLIT_FILE

&----


FORM SPLIT_FILE .

"Splits PC File Name into Drive,Path,File and Extension

CALL FUNCTION 'CH_SPLIT_FILENAME'

EXPORTING

COMPLETE_FILENAME = FNAME

  • CHECK_DOS_FORMAT =

IMPORTING

DRIVE = DRIVE

EXTENSION = EXTENSION

NAME = NAME

NAME_WITH_EXT = NAME_WITH_EXT

PATH = PATH1

EXCEPTIONS

INVALID_DRIVE = 1

INVALID_PATH = 2

OTHERS = 3

.

IF SY-SUBRC <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " SPLIT_FILE

&----


*& Form EPDEV_R3DEV

&----


FORM EPAPP_R3APP.

SET EXTENDED CHECK OFF.

SLEN = STRLEN( PWD ).

CALL FUNCTION 'HTTP_SCRAMBLE'

EXPORTING

SOURCE = PWD

SOURCELEN = SLEN

KEY = KEY

IMPORTING

DESTINATION = PWD.

"Connect to FTP server

CALL FUNCTION 'FTP_CONNECT'

EXPORTING

USER = USER

PASSWORD = PWD

HOST = HOST

RFC_DESTINATION = DEST

IMPORTING

HANDLE = HDL.

CONCATENATE '/usr/sap/APD/JC00/j2ee/cluster/server0/' NAME_WITH_EXT INTO E_FILE ."SEPARATED BY SPACE.

CONCATENATE '/tmp/' NAME_WITH_EXT INTO TO_FILE . "SEPARATED BY SPACE.

CMD1 = 'get'.

CONCATENATE CMD1 E_FILE TO_FILE INTO CMD1 SEPARATED BY SPACE.

IF CMD1 IS NOT INITIAL.

"Execute FTP Command

CALL FUNCTION 'FTP_COMMAND'

EXPORTING

HANDLE = HDL

COMMAND = CMD1

COMPRESS = COMPRESS

TABLES

DATA = RESULT

EXCEPTIONS

COMMAND_ERROR = 1

TCPIP_ERROR = 2.

SIGNAL = SY-SUBRC.

REFRESH RESULT.

ENDIF.

ENDFORM. " EPAPP_R3APP

&----


*& Form SEND_MAIL

&----


FORM SEND_MAIL .

  • **** mail body Ankur

concatenate fr_name '(' fr_emp_id ')' 'of' fr_emp_comp 'has reffered'

ref_name '.' into body separated by space.

I_OBJTXT = 'Dear Sir/Madam.'.

APPEND I_OBJTXT.

I_OBJTXT = ''.

APPEND I_OBJTXT.

I_OBJTXT = body.

APPEND I_OBJTXT.

I_OBJTXT = ''.

APPEND I_OBJTXT.

I_OBJTXT = 'Details are attached along with the mail.'.

APPEND I_OBJTXT.

I_OBJTXT = ''.

APPEND I_OBJTXT.

I_OBJTXT = 'Thanks.'.

APPEND I_OBJTXT.

I_OBJTXT = 'Best Regards,'.

APPEND I_OBJTXT.

I_OBJTXT = 'For Adani Group'.

APPEND I_OBJTXT.

DESCRIBE TABLE i_objtxt LINES gv_desc_lines.

CLEAR I_OBJTXT.

READ TABLE I_OBJTXT INDEX gv_desc_lines.

if sy-subrc = 0.

  • Document information.

concatenate 'Employee Referred by' fr_name into subject separated by space.

GS_DOCDATA-obj_name = 'Emp_Refer'.

GS_DOCDATA-expiry_dat = sy-datum + 10.

GS_DOCDATA-obj_descr = subject.

GS_DOCDATA-sensitivty = 'F'. "Functional object

GS_DOCDATA-doc_size = gv_desc_lines * 255.

cLEAR Gs_OBJPACK-transf_bin.

  • Start line of object header in transport packet

GS_OBJPACK-doc_size = gv_desc_lines * 255.

GS_OBJPACK-HEAD_START = 1.

GS_OBJPACK-HEAD_NUM = 0.

GS_OBJPACK-BODY_START = 1.

GS_OBJPACK-BODY_NUM = gv_desc_lines.

GS_OBJPACK-DOC_TYPE = 'RAW'.

APPEND GS_OBJPACK TO GT_OBJPACK.

ENDIF.

*u2022 Passing the Smartforms text lines to SAPoffice: Single List with Column Length 255 table

CLEAR : GS_OBJBIN, GS_PDF_TAB.

*

LOOP AT GT_PDF_TAB INTO GS_PDF_TAB.

GV_POS = 255 - GV_LEN.

IF GV_POS > 134. "length of pdf_table

GV_POS = 134.

ENDIF.

GS_OBJBIN+GV_LEN = GS_PDF_TAB(GV_POS).

GV_LEN = GV_LEN + GV_POS.

IF GV_LEN = 255. "length of out (contents_bin)

APPEND GS_OBJBIN TO GT_OBJBIN.

CLEAR: GS_OBJBIN, GV_LEN.

IF GV_POS < 134.

GS_OBJBIN = GS_PDF_TAB+GV_POS.

GV_LEN = 134 - GV_POS.

ENDIF.

ENDIF.

ENDLOOP.

IF GV_LEN > 0.

APPEND GS_OBJBIN TO GT_OBJBIN.

ENDIF.

***u2022 Filling the details in SAPoffice: Description of Imported Object Components table

DESCRIBE TABLE GT_OBJBIN LINES GV_TAB_LINES.

CLEAR GS_OBJBIN.

READ TABLE GT_OBJBIN INTO GS_OBJBIN INDEX GV_TAB_LINES.

IF SY-SUBRC = 0.

GS_OBJPACK-DOC_SIZE = ( GV_TAB_LINES - 1 ) * 255 + STRLEN( GS_OBJBIN ).

GS_OBJPACK-TRANSF_BIN = 'X'.

GS_OBJPACK-HEAD_START = 1.

GS_OBJPACK-HEAD_NUM = 0.

GS_OBJPACK-BODY_START = 1.

GS_OBJPACK-BODY_NUM = GV_TAB_LINES.

GS_OBJPACK-DOC_TYPE = 'PDF'.

GS_OBJPACK-OBJ_NAME = 'EMPLOYEE REFERAL FORM'.

GS_OBJPACK-OBJ_DESCR = 'Employee Referal Form'.

APPEND GS_OBJPACK TO GT_OBJPACK.

ENDIF.

CLEAR : GS_OBJBIN.

CLEAR WA_DATA_ALL.

  • Read File from Application Server.

data: start1 type i.

data: end1 type i.

start1 = GV_TAB_LINES + 1.

OPEN DATASET TO_FILE FOR INPUT IN BINARY MODE.

IF SY-SUBRC = 0.

DO .

READ DATASET to_file INTO GS_OBJBIN. "GS_PDF_TAB.

IF SY-SUBRC = 0.

APPEND GS_OBJBIN TO GT_OBJBIN . "GS_PDF_TAB TO GT_PDF_TAB.

ELSE.

EXIT.

ENDIF.

ENDDO.

CLOSE DATASET to_file.

else.

Message 'Error in Opening File' type'E'.

ENDIF.

clear gs_objbin.

DELETE DATASET TO_FILE.

DESCRIBE TABLE GT_OBJBIN LINES end1.

CLEAR GS_OBJBIN.

READ TABLE GT_OBJBIN INTO GS_OBJBIN INDEX end1.

IF SY-SUBRC = 0.

GS_OBJPACK-DOC_SIZE = ( end1 - 1 ) * 255 + STRLEN( GS_OBJBIN ).

GS_OBJPACK-TRANSF_BIN = 'X'.

GS_OBJPACK-HEAD_START = 1.

GS_OBJPACK-HEAD_NUM = 0.

GS_OBJPACK-BODY_START = start1.

GS_OBJPACK-BODY_NUM = end1.

GS_OBJPACK-DOC_TYPE = extension.

GS_OBJPACK-OBJ_NAME = 'Resume'.

GS_OBJPACK-OBJ_DESCR = 'Resume'.

APPEND GS_OBJPACK TO GT_OBJPACK.

ENDIF.

  • Sending Mail

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

DOCUMENT_DATA = Gs_DOCDATA "Data of an object which can be changed

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

  • IMPORTING

  • SENT_TO_ALL =

  • NEW_OBJECT_ID =

TABLES

PACKING_LIST = GT_OBJPACK "SAPoffice: Description of Imported Object Components

OBJECT_HEADER = I_OBJTXT

CONTENTS_BIN = GT_OBJBIN

CONTENTS_TXT = I_OBJTXT

  • CONTENTS_HEX =

  • OBJECT_PARA =

  • OBJECT_PARB =

RECEIVERS = GT_RECLIST "SAPoffice: Structure of the API Recipient List

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.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ELSE.

MESSAGE 'Sent Successfully' TYPE 'I'.

ENDIF.

"SAPconnect: Start Send Process

SUBMIT RSCONN01 WITH MODE EQ 'INT' AND RETURN.

ENDFORM. " SEND_MAIL