03-05-2009 11:27 AM
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
03-05-2009 11:31 AM
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.
03-05-2009 11:35 AM
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
03-05-2009 11:37 AM
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
10-20-2009 4:56 AM
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.
10-20-2009 5:25 AM
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
10-20-2009 6:12 AM
Hi,
Refer this wiki:
http://wiki.sdn.sap.com/wiki/display/Snippets/Sendingmailwith+attachment
Hope this helps you.
Regards,
Tarun
10-20-2009 8:41 AM
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
10-20-2009 11:28 AM
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.
10-20-2009 8:50 AM
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
10-20-2009 11:45 AM
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.