Application Development and Automation 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: 
Read only

Send HTML attachment by email

Former Member
0 Likes
1,976

Hello everybody,

I made a program to send by email an HTML file as attachment. All works fine except that the HTML file is not attach to the mail, instead of that the HTML code is inserted in the email body.

The same code works fine for XLS, PDF format, attachment is created, but not for HTM or TXT format.

I'm in 4.6C. I think the problem is coming from the configuration of SAPConnect.

Here is the routine code :


*&---------------------------------------------------------------------*
*&      Form  send_mail
*&---------------------------------------------------------------------*
*       Send mail
*----------------------------------------------------------------------*
*      -->PT_HTML  Attachment file containing HTML code
*      -->PW_EMAIL Email address
*      <--PW_RCODE Return code
*----------------------------------------------------------------------*
FORM send_mail TABLES   pt_html STRUCTURE w3html
               USING    pw_email
                        pw_obj_descr
               CHANGING pw_rcode.


  DATA : lt_file_att TYPE TABLE OF solisti1,
         ls_file_att TYPE solisti1.

  DATA : ls_document_data TYPE sodocchgi1,
         l_cnt   TYPE i.

  DATA : lt_packing_list  TYPE TABLE OF sopcklsti1,
         ls_packing_list  TYPE sopcklsti1,
         lt_contents      TYPE TABLE OF solisti1,
         ls_contents      TYPE solisti1,
         lt_receivers     TYPE TABLE OF somlreci1,
         ls_receivers     TYPE somlreci1,
         lt_object_header TYPE TABLE OF solisti1,
         ls_object_header TYPE solisti1.

  DATA : lt_objtxt TYPE TABLE OF solisti1   WITH HEADER LINE,
         l_lines TYPE i,
         l_sender TYPE so_rec_ext.

  CLEAR pw_rcode.

  lt_file_att[] = pt_html[].


* Fill the document data and get size of attachment
  CLEAR ls_document_data.
  DESCRIBE TABLE lt_file_att LINES l_lines.
  READ TABLE lt_file_att INTO ls_file_att INDEX l_lines.
  ls_document_data-doc_size =
     ( l_lines - 1 ) * 255 + STRLEN( ls_file_att ).
  ls_document_data-obj_langu  = sy-langu.
  ls_document_data-obj_name   = 'Report to VMI'.
  ls_document_data-obj_descr  = pw_obj_descr.
  ls_document_data-sensitivty = 'F'.

* Describe and create the body of the message
  CLEAR ls_packing_list.
  REFRESH lt_packing_list.
  ls_packing_list-transf_bin = space.
  ls_packing_list-head_start = 1.
  ls_packing_list-head_num = 0.
  ls_packing_list-body_start = 1.
  ls_packing_list-body_num = 1.
  ls_packing_list-doc_type = 'RAW'.
  APPEND ls_packing_list TO lt_packing_list.

* Describe and create attachment
  CLEAR ls_packing_list.
  ls_packing_list-transf_bin = ' '.
  ls_packing_list-head_start = 1.
  ls_packing_list-head_num   = 0.
  ls_packing_list-body_start = 1.
  DESCRIBE TABLE lt_file_att LINES ls_packing_list-body_num.
  ls_packing_list-doc_type   =  'HTM'.
  ls_packing_list-obj_descr  =  'TEST1'.
  ls_packing_list-obj_name   =  'TEST1'.
  ls_packing_list-doc_size   =  ls_packing_list-body_num * 255.
  APPEND ls_packing_list TO lt_packing_list.

* Add the recipient(s) email address
  CLEAR ls_receivers.
  REFRESH lt_receivers.
  ls_receivers-receiver = pw_email.
  ls_receivers-rec_type = 'U'.
  ls_receivers-com_type = 'INT'.
  ls_receivers-notif_del = 'X'.
  ls_receivers-notif_ndel = 'X'.
  APPEND ls_receivers TO lt_receivers.



  CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
       EXPORTING
            document_data              = ls_document_data
            put_in_outbox              = 'X'
            sender_address             = l_sender
            sender_address_type        = 'INT'
       TABLES
            packing_list               = lt_packing_list
            contents_txt               = lt_file_att
*            contents_bin               = lt_file_att
            receivers                  = lt_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.

  pw_rcode = sy-subrc.

ENDFORM.                    " send_mail

Thank you in advance for your answer.

4 REPLIES 4
Read only

Former Member
0 Likes
800

Hi,

check out this link.it might help

Read only

Former Member
0 Likes
800

hi,

pls use this demo code and reward points if it works -

REPORT ZGILL_SENDMAIL_PDF .

INCLUDE ZGILL_INCMAIL. "SEE BELOW FOR INCLUDE PROGRAM CODE.

*----


  • DATA

*----


DATA : itab LIKE tline OCCURS 0 WITH HEADER LINE.

DATA : file_name TYPE string.

data : path like PCFILE-PATH.

data : extension(5) type c.

data : name(100) type c.

*----


  • SELECTION SCREEN

*----


PARAMETERS : receiver TYPE somlreci1-receiver lower case DEFAULT '[email protected]'.

PARAMETERS : p_file LIKE rlgrap-filename

OBLIGATORY DEFAULT 'C:\TEMP\SALARY_SLIP1.PDF'.

*----


  • AT SELECTION SCREEN

*----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CLEAR p_file.

CALL FUNCTION 'F4_FILENAME'

IMPORTING

file_name = p_file.

*----


  • START-OF-SELECTION

*----


START-OF-SELECTION.

PERFORM ml_customize USING 'Tst' 'Testing'.

PERFORM ml_addrecp USING receiver 'U'.

PERFORM upl.

PERFORM doconv TABLES itab objbin.

PERFORM ml_prepare USING 'X' extension name.

PERFORM ml_dosend.

*----


SUBMIT rsconn01

WITH mode EQ 'INT'

AND RETURN.

*----


  • FORM

*----


FORM upl.

file_name = p_file.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = file_name

filetype = 'BIN'

TABLES

data_tab = itab

EXCEPTIONS

file_open_error = 1

file_read_error = 2

no_batch = 3

gui_refuse_filetransfer = 4

invalid_type = 5

no_authority = 6

unknown_error = 7

bad_data_format = 8

header_not_allowed = 9

separator_not_allowed = 10

header_too_long = 11

unknown_dp_error = 12

access_denied = 13

dp_out_of_memory = 14

disk_full = 15

dp_timeout = 16

OTHERS = 17.

path = file_name.

CALL FUNCTION 'PC_SPLIT_COMPLETE_FILENAME'

EXPORTING

complete_filename = path

  • CHECK_DOS_FORMAT =

IMPORTING

  • DRIVE =

EXTENSION = extension

NAME = name

  • NAME_WITH_EXT =

  • PATH =

EXCEPTIONS

INVALID_DRIVE = 1

INVALID_EXTENSION = 2

INVALID_NAME = 3

INVALID_PATH = 4

OTHERS = 5

.

ENDFORM. "upl

*********************iNCLUDE pROGRAM********************************************

&----


*& Include ZGILL_INCMAIL *

&----


*----


  • Data

*----


DATA: docdata LIKE sodocchgi1,

objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,

objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE,

objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,

objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE,

objhex LIKE solix OCCURS 10 WITH HEADER LINE,

reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE.

DATA: tab_lines TYPE i,

doc_size TYPE i,

att_type LIKE soodk-objtp.

DATA: listobject LIKE abaplist OCCURS 1 WITH HEADER LINE.

*----


  • FORM

*----


FORM ml_customize USING objname objdesc.

*----


Clear Variables

CLEAR docdata.

REFRESH objpack.

CLEAR objpack.

REFRESH objhead.

REFRESH objtxt.

CLEAR objtxt.

REFRESH objbin.

CLEAR objbin.

REFRESH objhex.

CLEAR objhex.

REFRESH reclist.

CLEAR reclist.

REFRESH listobject.

CLEAR listobject.

CLEAR tab_lines.

CLEAR doc_size.

CLEAR att_type.

*----


Set Variables

docdata-obj_name = objname.

docdata-obj_descr = objdesc.

ENDFORM. "ml_customize

*----


  • FORM

*----


FORM ml_addrecp USING preceiver prec_type.

CLEAR reclist.

reclist-receiver = preceiver.

reclist-rec_type = prec_type.

APPEND reclist.

ENDFORM. "ml_customize

*----


  • FORM

*----


FORM ml_addtxt USING ptxt.

CLEAR objtxt.

objtxt = ptxt.

APPEND objtxt.

ENDFORM. "ml_customize

*----


  • FORM

*----


FORM ml_prepare USING bypassmemory whatatt_type whatname.

IF bypassmemory = ''.

*----


Fetch List From Memory

CALL FUNCTION 'LIST_FROM_MEMORY'

TABLES

listobject = listobject

EXCEPTIONS

OTHERS = 1.

IF sy-subrc <> 0.

MESSAGE ID '61' TYPE 'E' NUMBER '731'

WITH 'LIST_FROM_MEMORY'.

ENDIF.

CALL FUNCTION 'TABLE_COMPRESS'

  • IMPORTING

  • COMPRESSED_SIZE =

TABLES

in = listobject

out = objbin

EXCEPTIONS

OTHERS = 1

.

IF sy-subrc <> 0.

MESSAGE ID '61' TYPE 'E' NUMBER '731'

WITH 'TABLE_COMPRESS'.

ENDIF.

ENDIF.

  • -----------

  • Header Data

  • Already Done Thru FM

  • -----------

  • -----------

  • Main Text

  • Already Done Thru FM

  • -----------

  • -----------

  • Packing Info For Text Data

  • -----------

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 = 'TXT'.

APPEND objpack.

  • -----------

  • Packing Info Attachment

  • -----------

att_type = whatatt_type..

DESCRIBE TABLE objbin LINES tab_lines.

READ TABLE objbin INDEX tab_lines.

objpack-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objbin ).

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 0.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = att_type.

objpack-obj_name = 'ATTACHMENT'.

objpack-obj_descr = whatname.

APPEND objpack.

  • -----------

  • Receiver List

  • Already done thru fm

  • -----------

ENDFORM. "ml_prepare

*----


  • FORM

*----


FORM ml_dosend.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = docdata

put_in_outbox = 'X'

commit_work = 'X' "used from rel. 6.10

  • IMPORTING

  • SENT_TO_ALL =

  • NEW_OBJECT_ID =

TABLES

packing_list = objpack

object_header = objhead

contents_bin = objbin

contents_txt = objtxt

  • CONTENTS_HEX = objhex

  • OBJECT_PARA =

  • object_parb =

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

.

IF sy-subrc <> 0.

MESSAGE ID 'SO' TYPE 'S' NUMBER '023'

WITH docdata-obj_name.

ENDIF.

ENDFORM. "ml_customize

*----


  • FORM

*----


FORM ml_spooltopdf USING whatspoolid.

DATA : pdf LIKE tline OCCURS 0 WITH HEADER LINE.

*----


Call Function

CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = whatspoolid

TABLES

pdf = pdf

EXCEPTIONS

err_no_otf_spooljob = 1

OTHERS = 12.

*----


Convert

PERFORM doconv TABLES pdf objbin.

ENDFORM. "ml_spooltopdf

*----


  • FORM

*----


FORM doconv TABLES

mypdf STRUCTURE tline

outbin STRUCTURE solisti1.

*----


Data

DATA : pos TYPE i.

DATA : len TYPE i.

*----


Loop And Put Data

LOOP AT mypdf.

pos = 255 - len.

IF pos > 134. "length of pdf_table

pos = 134.

ENDIF.

outbin+len = mypdf(pos).

len = len + pos.

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

APPEND outbin.

CLEAR: outbin, len.

IF pos < 134.

outbin = mypdf+pos.

len = 134 - pos.

ENDIF.

ENDIF.

ENDLOOP.

IF len > 0.

APPEND outbin.

ENDIF.

ENDFORM. "doconv

**********************INCLUDE END********************************

Read only

Former Member
0 Likes
800

Thanks for your answers but I have already watch all this thread or try all this program.

As I said above, my program works fine when I specify that my attachment has an XLS or an PDF format, but not with html format, the email body contains the html code and no attachment.

Read only

Former Member
0 Likes
800

Compare your program with Rich's program in the following thread:

Regards,

Ravi