‎2009 Apr 16 9:37 AM
hi all,
i am using SO_NEW_DOCUMENT_ATT_SEND_API1 function module to send PDF file to mail.
i am facing the problem "Document_not sent" , sy-subrc is 2 , what could be the problem.
REPORT ZSANDYTEST.
DATA: number TYPE tbtcjob-jobcount,
name TYPE tbtcjob-jobname VALUE 'JOB_SANDY',
print_parameters TYPE pri_params,
l_spoolid TYPE RSPOID,
l_rqcretime TYPE RSPOCRTIME,
t_pdf like tline occurs 0 with header line,
i_objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,
i_reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE,
s_doc_data TYPE sodocchgi1,
gd_buffer TYPE string,
it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
i_objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
g_tablines TYPE sy-tabix,
l_name type CHAR40,
l_email type char40.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = name
IMPORTING
jobcount = number
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc = 0.
data: Zscreen type table of RSPARAMS with header line.
Zscreen-selname = 'PM_AENNR'.
Zscreen-kind = 'P'.
ZSCREEN-LOW = '500000000125'.
APPEND ZSCREEN.
SUBMIT RCC00130 WITH selection-table Zscreen TO SAP-SPOOL
SPOOL PARAMETERS print_parameters
WITHOUT SPOOL DYNPRO
VIA JOB name NUMBER number
AND RETURN.
IF sy-subrc = 0.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = number
jobname = name
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
IF sy-subrc <> 0.
...
ENDIF.
ENDIF.
ENDIF.
WAIT UP TO 5 SECONDS.
SELECT rqident rqcretime INTO (l_spoolid,
l_rqcretime)
FROM tsp01 UP TO 1 rows
WHERE rqclient = sy-mandt
AND RQ0NAME = 'LIST1S'
AND rqowner = sy-uname
*AND RQDOCTYPE = 'OTF'
*AND RQCRETIME = SY-UZEIT
ORDER BY rqcretime
DESCENDING.
ENDSELECT.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = L_SPOOLID
TABLES
PDF = t_pdf
EXCEPTIONS
ERR_NO_ABAP_SPOOLJOB = 1
ERR_NO_SPOOLJOB = 2
ERR_NO_PERMISSION = 3
ERR_CONV_NOT_POSSIBLE = 4
ERR_BAD_DESTDEVICE = 5
USER_CANCELLED = 6
ERR_SPOOLERROR = 7
ERR_TEMSEERROR = 8
ERR_BTCJOB_OPEN_FAILED = 9
ERR_BTCJOB_SUBMIT_FAILED = 10
ERR_BTCJOB_CLOSE_FAILED = 11
OTHERS = 12.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Transfer the 132-long strings to 255-long strings
LOOP AT t_pdf.
TRANSLATE t_pdf USING ' ~'.
CONCATENATE gd_buffer t_pdf INTO gd_buffer.
ENDLOOP.
TRANSLATE gd_buffer USING '~ '.
DO.
it_mess_att = gd_buffer.
APPEND it_mess_att.
SHIFT gd_buffer LEFT BY 255 PLACES.
IF gd_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
DESCRIBE TABLE it_mess_att LINES g_tablines.
READ TABLE it_mess_att INDEX g_tablines.
s_doc_data-doc_size = ( g_tablines - 1 ) * 255 + STRLEN( it_mess_att ).
s_doc_data-obj_name = 'ECM NOTIFICATIONS'.
CONCATENATE '<br> ECM #:' '500000000125' INTO i_objtxt SEPARATED BY space.
APPEND i_objtxt.
i_reclist-receiver = 'email id'.
append i_reclist.
i_objpack-transf_bin = 'X'.
i_objpack-head_start = 1.
i_objpack-head_num = 0.
i_objpack-body_start = 1.
i_objpack-body_num = g_tablines.
i_objpack-doc_type = 'PDF'.
APPEND i_objpack.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = s_doc_data
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
tables
packing_list = i_objpack
OBJECT_HEADER =
CONTENTS_BIN = it_mess_att
CONTENTS_TXT = i_objtxt
CONTENTS_HEX =
OBJECT_PARA =
OBJECT_PARB =
receivers = i_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 SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
thanks
sandeep
‎2009 Apr 16 9:41 AM
Your code is not readable.
Check my code, you will get poiinters.
* 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
‎2009 Apr 16 10:32 AM
Hi,
check the below link
https://www.sdn.sap.com/irj/scn/wiki?path=/display/abap/smartformSendvia+Email
Regards,
Madhu
‎2009 Apr 16 11:07 AM
/people/thomas.jung3/blog/2004/09/09/receiving-e-mail-and-processing-it-with-abap--version-610-and-higher
‎2009 Apr 16 11:08 AM
Example of sending external email via SAPCONNECT *
REPORT zsendemail .
PARAMETERS: psubject(40) type c default 'Hello',
p_email(40) type c default 'EMAIL ADDRESS' .
data: it_packing_list like sopcklsti1 occurs 0 with header line,
it_contents like solisti1 occurs 0 with header line,
it_receivers like somlreci1 occurs 0 with header line,
it_attachment like solisti1 occurs 0 with header line,
gd_cnt type i,
gd_sent_all(1) type c,
gd_doc_data like sodocchgi1,
gd_error type sy-subrc.
data: it_message type standard table of SOLISTI1 initial size 0
with header line.
***********************************************************************
*START-OF-SELECTION.
START-OF-SELECTION.
Perform populate_message_table.
*Send email message, although is not sent from SAP until mail send
*program has been executed(rsconn01)
PERFORM send_email_message.
*Instructs mail send program for SAPCONNECT to send email(rsconn01)
perform initiate_mail_execute_program.
&----
*& Form POPULATE_MESSAGE_TABLE
&----
Adds text to email text table
----
form populate_message_table.
Append 'Email line 1' to it_message.
Append 'Email line 2' to it_message.
Append 'Email line 3' to it_message.
Append 'Email line 4' to it_message.
endform. " POPULATE_MESSAGE_TABLE
&----
*& Form SEND_EMAIL_MESSAGE
&----
Send email message
----
form send_email_message.
Fill the document data.
gd_doc_data-doc_size = 1.
Populate the subject/generic message attributes
gd_doc_data-obj_langu = sy-langu.
gd_doc_data-obj_name = 'SAPRPT'.
gd_doc_data-obj_descr = psubject.
gd_doc_data-sensitivty = 'F'.
Describe the body of the message
clear it_packing_list.
refresh it_packing_list.
it_packing_list-transf_bin = space.
it_packing_list-head_start = 1.
it_packing_list-head_num = 0.
it_packing_list-body_start = 1.
describe table it_message lines it_packing_list-body_num.
it_packing_list-doc_type = 'RAW'.
append it_packing_list.
Add the recipients email address
clear it_receivers.
refresh it_receivers.
it_receivers-receiver = p_email.
it_receivers-rec_type = 'U'.
it_receivers-com_type = 'INT'.
it_receivers-notif_del = 'X'.
it_receivers-notif_ndel = 'X'.
append it_receivers.
Call the FM to post the message to SAPMAIL
call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'
exporting
document_data = gd_doc_data
put_in_outbox = 'X'
importing
sent_to_all = gd_sent_all
tables
packing_list = it_packing_list
contents_txt = it_message
receivers = it_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.
Store function module return code
gd_error = sy-subrc.
Get it_receivers return code
loop at it_receivers.
endloop.
endform. " SEND_EMAIL_MESSAGE
&----
*& Form INITIATE_MAIL_EXECUTE_PROGRAM
&----
Instructs mail send program for SAPCONNECT to send email.
----
form initiate_mail_execute_program.
wait up to 2 seconds.
if gd_error eq 0.
submit rsconn01 with mode = 'INT'
with output = 'X'
and return.
endif.
endform. " INITIATE_MAIL_EXECUTE_PROGRAM