05-17-2006 8:02 AM
Hi i am modifing a standard sap script wherein sap has used FM SO_OBJECT_SEND to send the mails.
I am getting the subrc = 0 but mail is not going.
I have used following parameters
X_RECEIVERS-RECESC = 'U'.
X_RECEIVERS-SNDART = 'MAIL'
Can any one suggest?
05-17-2006 8:09 AM
Hi,
Check this code it will work.
DATA: T_DOC TYPE TYPE_T_SODOCCHGI1, "#EC NEEDED
T_CONTENT TYPE TYPE_T_SOLISTI1,
T_PACK TYPE TYPE_T_SOPCKLSTI1,
T_REC TYPE TYPE_T_SOMLRECI1.
CONSTANTS :C_SEN TYPE SO_OBJ_SNS VALUE 'F',
C_REC TYPE SO_ESCAPE VALUE 'U',
C_TYPE TYPE SO_OBJ_TP VALUE 'RAW',
C_COMTYPE TYPE SO_RECNAME VALUE 'INT'.
DATA: S_DOC TYPE SODOCCHGI1,
S_REC TYPE SOMLRECI1,
S_CONTENT TYPE SOLISTI1,
S_PACK TYPE SOPCKLSTI1,
S_FILE TYPE STRING.
DATA : V_STRING TYPE STRING.
IF RB_PRES = 'X'.
MOVE RP_PERFILE TO S_FILE.
ELSE.
MOVE RP_AERFILE TO S_FILE.
ENDIF.
*Get the Object name and Subject Description of the Mail
Fill the document data and get size of attachment
CLEAR S_DOC.
S_DOC-OBJ_LANGU = SY-LANGU.
S_DOC-OBJ_NAME = 'PTS_INT306'(022).
CONCATENATE SY-SYSID'List of error rec.'(021)
INTO S_DOC-OBJ_DESCR SEPARATED BY SPACE.
S_DOC-SENSITIVTY = C_SEN.
APPEND S_DOC TO T_DOC.
CLEAR S_DOC.
*Build the Receivers List
S_REC-REC_TYPE = C_REC.
S_REC-RECEIVER = RP_DLIST.
S_REC-COM_TYPE = C_COMTYPE.
APPEND S_REC TO T_REC.
CLEAR S_REC.
*Build Contents of the mail (Body)
CONCATENATE 'File'(019) S_FILE 'downloaded with error records:'(018)
INTO V_STRING.
S_CONTENT-LINE = V_STRING.
APPEND S_CONTENT TO T_CONTENT.
CLEAR S_CONTENT.
S_CONTENT-LINE = V_ERROR_REC.
APPEND S_CONTENT TO T_CONTENT.
CLEAR S_CONTENT.
*Send contents as BODY
S_PACK-HEAD_START = 1.
S_PACK-HEAD_NUM = 1.
S_PACK-BODY_START = 1.
DESCRIBE TABLE T_CONTENT LINES S_PACK-BODY_NUM.
S_PACK-DOC_SIZE = S_PACK-BODY_NUM * 255.
S_PACK-DOC_TYPE = C_TYPE.
APPEND S_PACK TO T_PACK.
CLEAR S_PACK.
*FM for sending mail to the External E-Mail Address
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = S_DOC
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = T_PACK
CONTENTS_TXT = T_CONTENT
RECEIVERS = T_REC
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.
WRITE: /'Email Failed .'(020).
ELSE.
SKIP 2.
WRITE : 'Error List Send to'(026),RP_DLIST.
ENDIF.
Reward points if it works.
Regards,
Suresh
05-17-2006 8:15 AM
Hi,
is sap connect is configured if not ask your basis to do that, for config check this link..
http://www.sapgenie.com/interfaces/sapconnect.htm
if already configured then..
and also check that might be in queue , go to transaction SCOT and try to send it manually via Start Send Process (Ctrl+F7).
Regards
vijay
05-17-2006 8:17 AM
05-17-2006 8:18 AM
05-17-2006 8:25 AM
Check <b>SCOT</b> transaction.
If there is pennding mail . Excute transaction.
This is accessed via transaction 'SCOT' and allows various functionality in-order to manage the
transmitting of external email messages.
Manage suported file formats
Execute transaction SCOT. Expand INT node and select client node i.e. 'DEV500'
Check the internet check box and click the SET button
To allow all file types to be sent, insert a '*' in the first line of address area
regards
vinod
05-17-2006 9:27 AM
Hai Osk Osk
Try with the following Links
http://www.sapgenie.com/abap/code/abap25.htm
http://www.sapgenie.com/abap/code/abap15.htm
Try with the following Code
REPORT ZRICH_0003.
DATA: ITCPO LIKE ITCPO,
TAB_LINES LIKE SY-TABIX.
Variables for EMAIL functionality
DATA: MAILDATA LIKE SODOCCHGI1.
DATA: MAILPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: MAILHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: MAILBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: MAILTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: MAILREC LIKE SOMLREC90 OCCURS 0 WITH HEADER LINE.
DATA: SOLISTI1 LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
PERFORM SEND_FORM_VIA_EMAIL.
************************************************************************
FORM SEND_FORM_VIA_EMAIL *
************************************************************************
FORM SEND_FORM_VIA_EMAIL.
CLEAR: MAILDATA, MAILTXT, MAILBIN, MAILPACK, MAILHEAD, MAILREC.
REFRESH: MAILTXT, MAILBIN, MAILPACK, MAILHEAD, MAILREC.
Creation of the document to be sent File Name
MAILDATA-OBJ_NAME = 'TEST'.
Mail Subject
MAILDATA-OBJ_DESCR = 'Subject'.
Mail Contents
MAILTXT-LINE = 'Here is your file'.
APPEND MAILTXT.
Prepare Packing List
PERFORM PREPARE_PACKING_LIST.
Set recipient - email address here!!!
MAILREC-RECEIVER = 'itsme@whatever.com'.
MAILREC-REC_TYPE = 'U'.
APPEND MAILREC.
Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = MAILDATA
PUT_IN_OUTBOX = ' '
TABLES
PACKING_LIST = MAILPACK
OBJECT_HEADER = MAILHEAD
CONTENTS_BIN = MAILBIN
CONTENTS_TXT = MAILTXT
RECEIVERS = MAILREC
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
ENDFORM.
************************************************************************
Form PREPARE_PACKING_LIST
************************************************************************
FORM PREPARE_PACKING_LIST.
CLEAR: MAILPACK, MAILBIN, MAILHEAD.
REFRESH: MAILPACK, MAILBIN, MAILHEAD.
DESCRIBE TABLE MAILTXT LINES TAB_LINES.
READ TABLE MAILTXT INDEX TAB_LINES.
MAILDATA-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( MAILTXT ).
Creation of the entry for the compressed document
CLEAR MAILPACK-TRANSF_BIN.
MAILPACK-HEAD_START = 1.
MAILPACK-HEAD_NUM = 0.
MAILPACK-BODY_START = 1.
MAILPACK-BODY_NUM = TAB_LINES.
MAILPACK-DOC_TYPE = 'RAW'.
APPEND MAILPACK.
Creation of the document attachment
This form gets the OTF code from the SAPscript form.
If you already have your OTF code, I believe that you may
be able to skip this form. just do the following code, looping thru
your SOLISTI1 and updating MAILBIN.
PERFORM GET_OTF_CODE.
LOOP AT SOLISTI1.
MOVE-CORRESPONDING SOLISTI1 TO MAILBIN.
APPEND MAILBIN.
ENDLOOP.
DESCRIBE TABLE MAILBIN LINES TAB_LINES.
MAILHEAD = 'TEST.OTF'.
APPEND MAILHEAD.
Creation of the entry for the compressed attachment
MAILPACK-TRANSF_BIN = 'X'.
MAILPACK-HEAD_START = 1.
MAILPACK-HEAD_NUM = 1.
MAILPACK-BODY_START = 1.
MAILPACK-BODY_NUM = TAB_LINES.
MAILPACK-DOC_TYPE = 'OTF'.
MAILPACK-OBJ_NAME = 'TEST'.
MAILPACK-OBJ_DESCR = 'Subject'.
MAILPACK-DOC_SIZE = TAB_LINES * 255.
APPEND MAILPACK.
ENDFORM.
************************************************************************
Form GET_OTF_CODE
************************************************************************
FORM GET_OTF_CODE.
DATA: BEGIN OF OTF OCCURS 0.
INCLUDE STRUCTURE ITCOO .
DATA: END OF OTF.
DATA: ITCPO LIKE ITCPO.
DATA: ITCPP LIKE ITCPP.
CLEAR ITCPO.
ITCPO-TDGETOTF = 'X'.
Start writing OTF code
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = 'ZTEST_FORM'
LANGUAGE = SY-LANGU
OPTIONS = ITCPO
DIALOG = ' '
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'START_FORM'
EXCEPTIONS
ERROR_MESSAGE = 01
OTHERS = 02.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'MAIN'
EXCEPTIONS
ERROR_MESSAGE = 01
OTHERS = 02.
Close up Form and get OTF code
CALL FUNCTION 'END_FORM'
EXCEPTIONS
ERROR_MESSAGE = 01
OTHERS = 02.
MOVE-CORRESPONDING ITCPO TO ITCPP.
CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT = ITCPP
TABLES
OTFDATA = OTF
EXCEPTIONS
OTHERS = 1.
Move OTF code to structure SOLI form email
CLEAR SOLISTI1. REFRESH SOLISTI1.
LOOP AT OTF.
SOLISTI1-LINE = OTF.
APPEND SOLISTI1.
ENDLOOP.
ENDFORM.
Thanks & regards
Sreenivasulu P
05-17-2006 9:42 AM
HI Osk,
What version are you on ? You will have to put an explicit COMMIT WORK immediately after the function call.
Regards,
Suresh Datti
05-17-2006 10:25 AM
Hai Osk Osk
Try with the following Links
http://www.sapgenie.com/abap/code/abap25.htm
http://www.sapgenie.com/abap/code/abap15.htm
Thanks & regards
Sreenivasulu P
05-17-2006 10:58 AM
Hi osk,
the problem might me 1 of these as under:-
1. In the exporting parameters of..FM use
commit_work = 'X'.
2. Check for Sy-subrc of FM..
if sy-subrc = 0.
SUBMIT rsconn01
WITH mode EQ 'INT'
AND RETURN.
this report program is used to automatically send the e-mails that are pending in the job queue.
ELSE
3. U may have some SMTP Config. problem.
If so u can ask me for details.
Else send ur code what u r using.
Regards
-
Sachin Dhingra
05-17-2006 12:22 PM
Hi Sachin.
This is the code I am using.Please suggest
FORM EMAIL.
IF NOT ITCPO-TDPREVIEW IS INITIAL.
ITCPP-TDNOPRINT = 'X'.
CALL FUNCTION 'DISPLAY_OTF'
EXPORTING
CONTROL = ITCPP
IMPORTING
RESULT = ITCPP
TABLES
OTF = HOTFDATA
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'CORRESPONDENCE_POPUP_EMAIL'
EXPORTING
I_INTAD = FINAA-INTAD
IMPORTING
E_ANSWER = HANSWER
E_INTAD = FINAA-INTAD
EXCEPTIONS
OTHERS = 1.
ENDIF.
IF HANSWER = SPACE
OR HANSWER = 'J'.
HFORMAT = FINAA-TEXTF.
IF HFORMAT IS INITIAL.
HFORMAT = 'PDF'. "PDF als Default
ENDIF.
CLEAR HTLINE.
REFRESH HTLINE.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = HFORMAT
MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = DOC_SIZE
TABLES
OTF = HOTFDATA
LINES = HTLINE
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
OTHERS = 4.
IF HFORMAT = 'PDF'.
PERFORM TABLE_SHIFT.
ELSE.
CLEAR X_OBJCONT.
REFRESH X_OBJCONT.
LOOP AT HTLINE.
X_OBJCONT = HTLINE.
APPEND X_OBJCONT.
ENDLOOP.
ENDIF.
CLEAR X_OBJECT_HD_CHANGE.
X_OBJECT_HD_CHANGE-OBJNAM = 'EMAIL'.
HKORA = TEXT-204.
X_OBJECT_HD_CHANGE-OBJDES = HKORA.
X_OBJECT_HD_CHANGE-OBJLA = LANGUAGE.
X_OBJECT_HD_CHANGE-OBJSNS = 'O'.
X_OBJECT_HD_CHANGE-OBJLEN = DOC_SIZE.
IF HFORMAT = 'PDF'.
X_OBJECT_HD_CHANGE-FILE_EXT = 'PDF'. "<-
ENDIF.
CLEAR X_RECEIVERS.
REFRESH X_RECEIVERS.
X_RECEIVERS-RECNAM = FINAA-INTAD. "<-
X_RECEIVERS-RECEXTNAM = FINAA-INTAD. "<-
X_RECEIVERS-RECESC = 'U'. "<-
X_RECEIVERS-RECESC = 'E'. "<-
X_RECEIVERS-SNDART = 'INT'. "<-
APPEND X_RECEIVERS.
DESCRIBE TABLE X_OBJCONT LINES LINECNT.
CLEAR X_OBJHEAD.
REFRESH X_OBJHEAD.
IF HFORMAT = 'PDF'.
DOCUMENT_TYPE = 'EXT'. "<-
ELSE.
DOCUMENT_TYPE = 'RAW'.
X_OBJHEAD = LINECNT.
APPEND X_OBJHEAD.
ENDIF.
CALL FUNCTION 'SO_OBJECT_SEND'
EXPORTING
EXTERN_ADDRESS = ' '
FOLDER_ID = ' '
FORWARDER = ' '
OBJECT_FL_CHANGE = ' '
OBJECT_HD_CHANGE = X_OBJECT_HD_CHANGE
OBJECT_ID = ' '
OBJECT_TYPE = DOCUMENT_TYPE
OUTBOX_FLAG = ' '
OWNER = FSABE-USRNAM
STORE_FLAG = ' '
DELETE_FLAG = ' '
SENDER = FSABE-USRNAM
CHECK_ALREADY_SENT = ' '
IMPORTING
OBJECT_ID_NEW =
SENT_TO_ALL = X_SENT_TO_ALL
TABLES
OBJCONT = X_OBJCONT
OBJHEAD = X_OBJHEAD
OBJPARA =
OBJPARB =
RECEIVERS = X_RECEIVERS
PACKING_LIST =
ATT_CONT =
ATT_HEAD =
NOTE_TEXT =
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 1
COMMUNICATION_FAILURE = 2
COMPONENT_NOT_AVAILABLE = 3
FOLDER_NOT_EXIST = 4
FOLDER_NO_AUTHORIZATION = 5
FORWARDER_NOT_EXIST = 6
NOTE_NOT_EXIST = 7
OBJECT_NOT_EXIST = 8
OBJECT_NOT_SENT = 9
OBJECT_NO_AUTHORIZATION = 10
OBJECT_TYPE_NOT_EXIST = 11
OPERATION_NO_AUTHORIZATION = 12
OWNER_NOT_EXIST = 13
PARAMETER_ERROR = 14
SUBSTITUTE_NOT_ACTIVE = 15
SUBSTITUTE_NOT_DEFINED = 16
SYSTEM_FAILURE = 17
TOO_MUCH_RECEIVERS = 18
USER_NOT_EXIST = 19
X_ERROR = 20
OTHERS = 21.
IF sy-subrc = 0.
SUBMIT rsconn01
WITH mode EQ 'INT'
AND RETURN.
ENDIF.
IF SY-SUBRC = 0
AND NOT FINAA-INTAD IS INITIAL.
CLEAR PROT_AUSGABE.
PROT_AUSGABE-BUKRS = SAVE_BUKRS.
PROT_AUSGABE-EVENT = SAVE_EVENT.
PROT_AUSGABE-REPID = SAVE_REPID.
PROT_AUSGABE-INTAD = FINAA-INTAD.
PROT_AUSGABE-COUNTP = COUNTP.
COLLECT PROT_AUSGABE.
-Hilfskonstrukt damit BKORM fortgeschrieben wird----
ITCPP-TDSPOOLID = '1'.
ENDIF.
ENDIF.
ENDFORM.