11-03-2008 10:54 AM
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 ."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.
11-03-2008 11:02 AM
HI chetan oswal
As ur requirement is not having the attachment to the mail use smtp_sendmail. This will be use full.
BYee.
11-03-2008 11:07 AM
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
11-03-2008 11:12 AM
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.
11-03-2008 11:22 AM
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