Skip to Content
0
Former Member
Dec 04, 2006 at 11:33 AM

Problem in sending CSV as attachment in email

119 Views

Hi All,

I'm working on ECC 5.0. I have an internal table with the data. I have to send this data as an attachment in an email. I sending a sample code which i used. When i try to open the attachment it is giving as warning popup 'File type is not recognized' and also the entire record in coming in the first column only.

&----


*& Report ZTEST_EMAIL_SEND_ATTACH_PDF

*&

&----


*&

*&

&----


REPORT ZTEST_EMAIL_SEND_ATTACH_PDF.

class CL_ABAP_CHAR_UTILITIES definition load.

constants:v_nl type ABAP_CHAR1 value CL_ABAP_CHAR_UTILITIES=>newline,

v_ht type ABAP_CHAR1 value CL_ABAP_CHAR_UTILITIES=>horizontal_TAB,

v_bs type ABAP_CHAR1 value CL_ABAP_CHAR_UTILITIES=>CR_LF.

data: begin of i_records occurs 0,

data(30) type c,

reason(225) type c,

end of i_records.

DATA: v_dest LIKE tsp01-rqdest,

v_handle LIKE sy-tabix,

v_spool_id LIKE tsp01-rqident,

v_rc TYPE c,

v_errmessage(100) TYPE c,

v_text(200) TYPE c,

i_pdf type standard table of tline.

DATA: OBJBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.

START-OF-SELECTION.

i_records-data = '1002'.

i_records-reason = 'date is empty'.

append i_records.

clear i_records.

i_records-data = '1005'.

i_records-reason = 'time is empty'.

append i_records.

clear i_records.

loop at i_records.

concatenate i_records-data i_records-reason into objbin-line separated by ','.

concatenate v_nl objbin-line into objbin-line.

append objbin.

clear: i_records, objbin.

endloop.

perform f_mail_send.

&----


*& Form f_mail_send

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form f_mail_send .

DATA: i_email TYPE TABLE OF somlreci1 WITH HEADER LINE,

i_mess TYPE TABLE OF solisti1 WITH HEADER LINE,

w_subject TYPE so_obj_des,

  • w_name TYPE so_obj_nam.

w_name TYPE char30.

i_email-receiver = 'userid@domain.com'.

APPEND i_email.

i_mess-line = 'This is a test message. Customer Statements'.

APPEND i_mess.

w_name = 'Statements_345594_344455_conv'.

w_subject = 'Your Customer Statement for'.

PERFORM send_mail_out_raw TABLES i_email

i_mess

USING w_subject

w_name.

endform. " f_mail_send

&----


*& Form send_mail_out_raw

&----


  • text

----


  • -->PI_EMAIL text

  • -->PI_MESS text

  • -->PI_PDF text

  • -->PV_SUBJECT text

  • -->PV_NAME text

----


FORM send_mail_out_raw TABLES pi_email STRUCTURE somlreci1

pi_mess STRUCTURE solisti1 "Message

USING pv_subject TYPE so_obj_des

pv_name TYPE char30.

DATA :

li_receivers TYPE STANDARD TABLE OF somlreci1,

li_head TYPE STANDARD TABLE OF solisti1,

li_packing_list TYPE STANDARD TABLE OF sopcklsti1,

li_pdf TYPE STANDARD TABLE OF solisti1.

DATA : lst_doc_data TYPE sodocchgi1,

lw_lines TYPE i,

lw_name(34) TYPE c,

lw_subject TYPE sodocchgi1-obj_descr.

DATA : lst_pemail TYPE somlreci1,

lst_pmess TYPE solisti1,

lst_receivers TYPE somlreci1,

lst_head TYPE solisti1,

lst_packing_list TYPE sopcklsti1,

lst_mess TYPE solisti1.

lw_subject = pv_subject.

lw_name = pv_name.

CONCATENATE lw_name '.csv' INTO lw_name.

CONDENSE lw_name NO-GAPS.

  • Fill the email content

DESCRIBE TABLE pi_mess LINES lw_lines.

  • Populate the subject/generic message attributes

lst_doc_data-obj_langu = sy-langu.

lst_doc_data-obj_name = lw_name.

lst_doc_data-obj_descr = lw_subject.

READ TABLE pi_mess INTO lst_mess INDEX lw_lines.

lst_doc_data-doc_size = ( lw_lines - 1 ) * 255 +

STRLEN( lst_mess ).

  • Describe the body of the message

REFRESH li_packing_list.

lst_packing_list-transf_bin = space.

lst_packing_list-head_start = 1.

lst_packing_list-head_num = 0.

lst_packing_list-body_start = 1.

lst_packing_list-body_num = lw_lines.

lst_packing_list-doc_type = 'RAW'.

lst_packing_list-doc_size = ( lw_lines - 1 ) * 255 +

STRLEN( lst_mess ).

APPEND lst_packing_list TO li_packing_list.

CLEAR lst_packing_list.

  • Create attachment

CLEAR lw_lines.

DESCRIBE TABLE objbin LINES lw_lines.

lst_packing_list-transf_bin = 'X'.

lst_packing_list-head_start = 1.

lst_packing_list-head_num = 1.

lst_packing_list-body_start = 1.

lst_packing_list-body_num = lw_lines.

lst_packing_list-doc_type = 'CSV'.

lst_packing_list-obj_descr = lw_subject.

lst_packing_list-obj_name = lw_name.

lst_packing_list-doc_size = ( lw_lines ) * 255.

APPEND lst_packing_list TO li_packing_list.

  • Header

REFRESH li_head.

CLEAR lst_head. REFRESH li_head.

lst_head-line = lw_name. APPEND lst_head TO li_head.

  • Add the recipients email address

REFRESH li_receivers.

LOOP AT pi_email INTO lst_pemail.

lst_receivers-receiver = lst_pemail-receiver.

lst_receivers-rec_type = 'U'.

lst_receivers-com_type = 'INT'.

APPEND lst_receivers TO li_receivers.

CLEAR lst_receivers.

ENDLOOP.

*Send mail to external address

  • CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

  • EXPORTING

  • document_data = lst_doc_data

  • put_in_outbox = 'X'

  • commit_work = 'X'

  • TABLES

  • packing_list = li_packing_list

  • object_header = li_head

  • contents_bin = objbin

  • contents_txt = pi_mess

  • receivers = li_receivers

  • 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.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = lst_doc_data

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

  • IMPORTING

  • SENT_TO_ALL =

  • NEW_OBJECT_ID =

tables

packing_list = li_packing_list

OBJECT_HEADER = li_head

CONTENTS_BIN = objbin

CONTENTS_TXT = pi_mess

  • CONTENTS_HEX =

  • OBJECT_PARA =

  • OBJECT_PARB =

receivers = li_receivers

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.

ENDIF.

ENDFORM. "Send_mail

Sai