SAP发送外网邮件
导语:SAP发送外网邮件需要basis进行相应的配置,具体是什么配置我不太请楚,可以通过SO00事务码先发一封邮件进行测试,选择类型为U Internet地址,测试一下是否可以发出,不行的话找basis配置,下面提供两种发送邮件的方式,第二种比较复杂,没有进行测试。
方案一:HTML
"变量定义
**Send Mail define
DATA send_request TYPE REF TO cl_bcs.
DATA text TYPE bcsy_text.
DATA document TYPE REF TO cl_document_bcs.
DATA recipient TYPE REF TO if_recipient_bcs.
DATA: bcs_exception TYPE REF TO cx_bcs.
DATA sent_to_all TYPE os_boolean.
DATA pdf_content TYPE solix_tab.
DATA lp_pdf_size TYPE so_obj_len.
DATA: bin_file TYPE xstring, "File with xstring format
l_len TYPE i. "Length of attachment
DATA: subject TYPE so_obj_des.
DATA: att_type TYPE so_obj_tp.
DATA: it_text TYPE bcsy_text.
DATA: wa_text LIKE soli.
DATA:object TYPE char255.
DATA:it_bin TYPE solix_tab WITH HEADER LINE.
DATA: sender TYPE REF TO if_sender_bcs,
conlengths TYPE so_obj_len,
html TYPE STANDARD TABLE OF w3html,
wa_html TYPE w3html,
result TYPE string.
"地址
DATA : BEGIN OF lw_adress,
adress TYPE char20,
END OF lw_adress.
DATA : lt_adress LIKE TABLE OF lw_adress.
DATA:BEGIN OF lw_rec ,
email TYPE adr6-smtp_addr,
END OF lw_rec .
DATA : lt_rec LIKE TABLE OF lw_rec.
"日期
DATA : BEGIN OF lw_date,
badat TYPE eban-badat,
END OF lw_date.
DATA : lt_date LIKE TABLE OF lw_date.
"准备好要写入邮件的数据,这里用lt_date来表示已经准备好的发送数据
LOOP AT gt_alv INTO gs_alv WHERE sel = 'X'.
CLEAR lw_date.
lw_date-badat = gs_alv-badat.
APPEND lw_date TO lt_date.
ENDLOOP.
"准备好邮件地址,这里用lt_adress表示已经准好的邮件地址,写给lt_rec
LOOP AT lt_adress INTO lw_adress.
CLEAR lw_rec.
lw_rec-email = lw_adress-adress.
APPEND lw_rec TO lt_rec.
ENDLOOP.
"发送邮件
"邮件标题
object = '邮件测试DEMO'.
TRY.
CLEAR send_request.
send_request = cl_bcs=>create_persistent( ).
* Build Mail Header Content
CLEAR: it_text[], wa_text, subject.
att_type = 'HTM'.
subject = '邮件测试DEMO'.
CLEAR:wa_html.
wa_html-line = '<html><body>'.
APPEND wa_html TO html.
*...
CLEAR:wa_html.
wa_html-line = '<p>'.
APPEND wa_html TO html.
"邮件内容
CLEAR:wa_html.
wa_html-line = '您好' .
APPEND wa_html TO html.
CLEAR:wa_html. "添加空行
APPEND wa_html TO html.
CLEAR:wa_html.
wa_html-line = '</p>'.
APPEND wa_html TO html.
CLEAR:wa_html.
wa_html-line = '</BR>'.
APPEND wa_html TO html.
CLEAR:wa_html.
wa_html-line = '以下日期的采购订单需要进行审批,请及时登录SAP进行审批'.
APPEND wa_html TO html.
"内表内容添加到html中
LOOP AT lt_date INTO lw_date.
CLEAR:wa_html.
wa_html-line = lw_date-badat.
APPEND wa_html TO html.
ENDLOOP.
CLEAR:wa_html.
wa_html-line = '</body></html>'.
APPEND wa_html TO html.
CLEAR document.
document = cl_document_bcs=>create_document(
i_type = att_type
i_text = html
i_length = conlengths
i_subject = subject ).
* Add document to send request
CALL METHOD send_request->set_document( document ).
* Construct sender and receiver
CLEAR: sender , recipient .
"根据地址发送
LOOP AT lt_rec INTO lw_rec.
TRANSLATE lw_rec-email TO LOWER CASE.
recipient = cl_cam_address_bcs=>create_internet_address(
lw_rec-email ).
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = 'X'.
ENDLOOP.
** build attachment
* att_type = 'XLS'.
* document->add_attachment(
* i_attachment_type = att_type
* i_att_content_hex = it_bin[]
** i_attachment_size = it_len
* i_attachment_subject = subject
** i_attachment_language = 'M'
* ).
* Set E-mail sending options
CALL METHOD send_request->set_status_attributes
EXPORTING
i_requested_status = 'E'
i_status_mail = 'E'.
* Set Send mail immediately
send_request->set_send_immediately( 'X' ).
* Send document
CALL METHOD send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = sent_to_all ).
IF sent_to_all = 'X'.
COMMIT WORK.
MESSAGE '邮件已成功发送!' TYPE 'I'.
ENDIF.
测试结果:邮件发送结果可以通过SOST查看,由于测试环境没有进行相应的配置,所以这里报错。
方案二:此方案适用于带PDF附件的邮件发送,由smartfroms画好附件格式,程序中将OTF转成PDF,再通过函数发送
**Smartform define
DATA:g_fm_name TYPE rs38l_fnam,
g_filename TYPE string,
g_padest LIKE tsp03d-padest,
gs_ctrlop TYPE ssfctrlop,
gs_compop TYPE ssfcompop,
gs_crescl TYPE ssfcrescl.
**Converting OTF to PDF define
DATA:lt_otf LIKE itcoo OCCURS 0 WITH HEADER LINE,
lt_content_txt TYPE soli_tab,
ls_content_txt TYPE soli,
lt_content_bin TYPE solix_tab,
l_transfer_bin TYPE sx_boolean,
l_len_in TYPE so_obj_len.
**Send Mail define
DATA:lt_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
lt_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,
lt_attach LIKE solix OCCURS 0 WITH HEADER LINE,
lt_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
lt_record LIKE solisti1 OCCURS 0 WITH HEADER LINE,
lt_objhead TYPE soli_tab ,
l_lines_txt TYPE i,
l_lines_bin TYPE i,
l_docchgi TYPE sodocchgi1,
l_lines_bin_all TYPE i ,
l_filelen TYPE i,
l_text(70).
**&1.Get Smartform Function module
CLEAR:g_fm_name.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = iw_ssf_h-tdsfname
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 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.
**&2.Run Smartform PO Print
**Get PO data:IT_HEAD and IT_ITEM
* PERFORM FRM_READDATA(ZMMFR001) USING GT_ITAB-EBELN.
**Run Smartform PO Print
CLEAR:gs_ctrlop,gs_compop,gs_crescl.
gs_ctrlop-getotf = 'X'.
gs_ctrlop-no_dialog = 'X'. "SU01 Default Print = 'LP01'
gs_ctrlop-langu = sy-langu.
**Print Output
* GS_COMPOP-TDDEST = C_RSPOLNAME.
SELECT SINGLE padest AS tddest patype AS tdprinter paprosname AS rqposname
INTO (gs_compop-tddest,gs_compop-tdprinter,gs_compop-rqposname)
FROM tsp03d
WHERE name = p_tddest.
**Call Smartform Print Function
CALL FUNCTION g_fm_name
EXPORTING
control_parameters = gs_ctrlop
output_options = gs_compop
user_settings = 'X'
iw_header = iw_ssf_h
IMPORTING
job_output_info = gs_crescl
TABLES
it_item = it_ssf_i
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 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.
**&3.Converting OTF to PDF
CLEAR:ls_content_txt, lt_content_txt[].
lt_otf[] = gs_crescl-otfdata[].
LOOP AT lt_otf.
CONCATENATE lt_otf-tdprintcom lt_otf-tdprintpar
INTO ls_content_txt.
APPEND ls_content_txt TO lt_content_txt.
ENDLOOP.
CLEAR:l_len_in.
REFRESH:lt_content_bin,lt_objhead.
CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'
EXPORTING
format_src = 'OTF'
format_dst = 'PDF'
CHANGING
transfer_bin = l_transfer_bin
content_txt = lt_content_txt
content_bin = lt_content_bin
objhead = lt_objhead
len = l_len_in
EXCEPTIONS
err_conv_failed = 1
OTHERS = 2.
**&4.Get Send Fax&eMail data
**4.1.Get Fax&eMail Head data: Attributes of new document(Title)
CLEAR:l_docchgi.
l_docchgi-expiry_dat = sy-datum .
l_docchgi-sensitivty = 'F'. "Functional object
l_docchgi-doc_size = l_len_in * 255.
* L_DOCCHGI-OBJ_DESCR = ZSMM001-OBJDES.
* CONCATENATE ZSMM001-OBJDES ':' GT_ITAB-EBELN INTO L_DOCCHGI-OBJ_DESCR.
l_docchgi-obj_descr = zsmm001-objdes.
**4.2.Get Body Information
CLEAR:lt_objtxt,lt_objtxt[].
IF gt_lines[] IS NOT INITIAL.
LOOP AT gt_lines.
lt_objtxt-line = gt_lines-tdline.
APPEND lt_objtxt.
CLEAR:lt_objtxt,gt_lines.
ENDLOOP.
ENDIF.
**4.3.Get Describe the body of the message
DESCRIBE TABLE lt_objtxt LINES l_lines_txt.
CLEAR:lt_objpack,lt_objpack[].
lt_objpack-transf_bin = ''.
lt_objpack-head_start = 1.
lt_objpack-head_num = 0.
lt_objpack-body_start = 1.
lt_objpack-body_num = l_lines_txt.
lt_objpack-doc_type = 'RAW'.
APPEND lt_objpack.
**4.4.Create attachment Attributes
CLEAR:lt_objpack.
lt_objpack-transf_bin = 'X'.
lt_objpack-head_start = 1.
lt_objpack-head_num = 1.
lt_objpack-body_start = 1.
lt_objpack-body_num = l_len_in.
lt_objpack-doc_type = 'PDF'.
* CONCATENATE iw_ssf_h-name '-' sy-datum '.PDF' INTO lt_objpack-obj_descr.
CONCATENATE iw_ssf_h-subject '.PDF' INTO lt_objpack-obj_descr.
lt_objpack-obj_name = lt_objpack-obj_descr.
lt_objpack-doc_size = l_len_in * 255.
APPEND lt_objpack.
**4.5.Get attechment contents
REFRESH:lt_attach.
lt_attach[] = lt_content_bin[].
**4.6.Add the recipients email address
CLEAR:lt_reclist,lt_reclist[].
LOOP AT gt_xtab.
CLEAR lt_reclist.
lt_reclist-receiver = gt_xtab-addr2.
lt_reclist-express = 'X'.
lt_reclist-rec_type = 'U'.
APPEND lt_reclist.
CLEAR:lt_reclist,gt_xtab.
ENDLOOP.
**4.7.Send mail status propmt
* CONCATENATE 'PO:' GT_ITAB-EBELN ' be sending mail,please wait...'
* INTO L_TEXT.
l_text = 'sending mail,please wait...'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = l_text.
**4.8.Call FM to send Fax&eMail
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = l_docchgi
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = lt_objpack
object_header = lt_objhead
contents_hex = lt_attach
contents_txt = lt_objtxt
receivers = lt_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.
WAIT UP TO 1 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
IF sy-subrc = 0.
MESSAGE '邮件发送成功!' TYPE 'S'.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
作者:小飞猪猪猪猪猪猪猪–CSDN
post SAP-Garson
原文链接:https://blog.csdn.net/JYH1999/article/details/117034913文章来自于网络,如果侵犯了您的权益,请联系站长删除!