2007 Jan 04 11:18 AM
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_mailThank you in advance for your answer.
2007 Jan 04 11:48 AM
2007 Jan 04 12:18 PM
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********************************
2007 Jan 04 2:58 PM
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.
2007 Jan 04 3:02 PM
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |