zl程序教程

您现在的位置是:首页 >  其他

当前栏目

ABAP 发送邮件详解编程语言

编程语言 详解 发送 邮件 ABAP
2023-06-13 09:11:48 时间
1、发送邮件(带附件xls)

ABAP 发送邮件详解编程语言

ABAP 发送邮件详解编程语言

* ---------------------------------------------------------------------* 

* Report YWX_TEST11 

* ---------------------------------------------------------------------* 

* ---------------------------------------------------------------------* 

REPORT ywx_test11. 

START-OF-SELECTION. 

 PERFORM frm_send_email. 

FORM frm_send_email . 

 CONSTANTS: lc_objtp TYPE so_obj_tp VALUE xls. 

 DATA: lt_return TYPE bapiret2_t, 

 lv_string TYPE string, 

 lv_string1 TYPE string, 

 lv_sender TYPE ad_smtpadr, 

 lt_mail_body TYPE bcsy_text, 

 ls_mail_body TYPE soli, 

 lv_psubject TYPE so_obj_des, 

 lt_receivers TYPE STANDARD TABLE OF uiys_iusr, 

 ls_receivers LIKE LINE OF lt_receivers, 

 lv_name TYPE char20, 

 lv_age TYPE char20, 

 lv_sex TYPE char20, 

 lv_weight TYPE char20. 

 DATA: lt_attachment TYPE rmps_t_post_content, 

 ls_attachment TYPE rmps_post_content. 

 DATA: lt_solix TYPE solix_tab, 

 lv_size TYPE so_obj_len. 

 DATA: lv_date TYPE c LENGTH 20, 

 lv_time TYPE c LENGTH 20. 

****ADD BEGIN BY 29.03.2021 08:39:41 

 "发送MAIL的定义 

 DATA: lo_send_request TYPE REF TO cl_bcs VALUE IS INITIAL, 

 lo_recipient TYPE REF TO if_recipient_bcs VALUE IS INITIAL, 

 lo_document TYPE REF TO cl_document_bcs VALUE IS INITIAL, 

 lx_document_bcs TYPE REF TO cx_document_bcs VALUE IS INITIAL, 

 lo_sender TYPE REF TO if_sender_bcs VALUE IS INITIAL. 

 DATA: l_send TYPE adr6-smtp_addr, 

 l_rec TYPE adr6-smtp_addr, 

 lv_recipient_uid TYPE uname, 

 lv_recipient_mail TYPE adr6-smtp_addr, 

 attachment_subject TYPE so_obj_des, 

 recipient_mail TYPE adr6-smtp_addr, 

 lv_result TYPE boolean. 

****ADD END BY 29.03.2021 08:39:41 

 "获取发信地址 

 lv_sender = [email protected]. 

 "获取收件人 

 ls_receivers-email = [email protected]. 

 APPEND ls_receivers TO lt_receivers. 

 ls_receivers-email = [email protected]. 

 APPEND ls_receivers TO lt_receivers. 

 "将数据转成string 

 CONCATENATE 

 姓名 

 年龄 

 性别 

 体重 

 INTO lv_string SEPARATED BY cl_bcs_convert= gc_tab. 

 DO 5 TIMES. 

 lv_name = 张三 sy-index. 

 lv_age = 18 * sy-index. 

 IF sy-index MOD 2 EQ 0. 

 lv_sex = 男. 

 ELSE. 

 lv_sex = 女. 

 ENDIF. 

 lv_weight = 70KG. 

 CONCATENATE 

 lv_name 

 lv_age 

 lv_sex 

 lv_weight 

 INTO lv_string1 SEPARATED BY cl_bcs_convert= gc_tab. 

 CONCATENATE lv_string cl_bcs_convert= gc_crlf lv_string1 INTO lv_string. 

 ENDDO. 

 "将string转换成xls放入附件 

 REFRESH lt_attachment. 

 TRY. 

 cl_bcs_convert= string_to_solix( 

 EXPORTING 

 iv_string = lv_string 

 iv_codepage = 4103 "suitable for MS Excel, leave empty 

 iv_add_bom = X "for other doc types 

 IMPORTING 

 et_solix = lt_solix 

 ev_size = lv_size ). 

 CATCH cx_bcs. 

 MESSAGE e445(so). 

 ENDTRY. 

 ls_attachment-subject = 附件主题名. 

 ls_attachment-objtp = lc_objtp. 

 ls_attachment-cont_hex = lt_solix. 

 APPEND ls_attachment TO lt_attachment. 

 "邮件正文 

 CLEAR ls_mail_body. 

 ls_mail_body-line = TEST SEND EMAIL(详细请查看附件). 

 APPEND ls_mail_body TO lt_mail_body. 

 ls_mail_body-line = SAP自动发送,请勿回复. 

 APPEND ls_mail_body TO lt_mail_body. 

 WRITE: sy-datum TO lv_date USING EDIT MASK ____-__-__. 

 WRITE: sy-uzeit TO lv_time USING EDIT MASK __:__:__. 

 CONCATENATE 发送时间: lv_date lv_time INTO ls_mail_body-line RESPECTING BLANKS. 

 APPEND ls_mail_body TO lt_mail_body. 

 "邮件主题 

 lv_psubject = EMAIL SUBJECT _ sy-datum. 

* 初始化邮件发送请求 

 CLASS cl_bcs DEFINITION LOAD. 

 TRY. 

 lo_send_request = cl_bcs= create_persistent( ). 

 CATCH cx_send_req_bcs . 

 ENDTRY. 

* 设置邮件主内容 

 TRY. 

 lo_document = cl_document_bcs= create_document( 

 i_type = RAW 

 i_text = lt_mail_body 

 i_subject = lv_psubject ). 

 CATCH cx_document_bcs . 

 ENDTRY. 

* 设置附件 

 LOOP AT lt_attachment INTO ls_attachment. 

 "获取附件主题 

 attachment_subject = ls_attachment-subject. 

 TRY. 

 lo_document- add_attachment( 

 EXPORTING 

 i_attachment_type = ls_attachment-objtp 

 i_attachment_subject = attachment_subject 

 i_att_content_hex = ls_attachment-cont_hex ). 

 CATCH cx_document_bcs INTO lx_document_bcs. 

 ENDTRY. 

 ENDLOOP. 

* 设置附件文档到发送请求 

 TRY. 

 lo_send_request- set_document( lo_document ). 

 CATCH cx_send_req_bcs. 

 ENDTRY. 

 " 设置发件人 

 TRY. 

 "根据参数设置发件人的邮箱 需要在后台basis配置 

 IF lv_sender IS NOT INITIAL. 

 lo_sender = cl_cam_address_bcs= create_internet_address( lv_sender ). 

 ELSE. 

 "将当前GUI 登录的用户邮箱作为发送邮箱 需要在SU01里配置 

 lo_sender = cl_sapuser_bcs= create( sy-uname ). 

 ENDIF. 

 TRY. 

 lo_send_request- set_sender( 

 EXPORTING 

 i_sender = lo_sender ). 

 CATCH cx_send_req_bcs. 

 ENDTRY. 

 CATCH cx_address_bcs. 

 RETURN. 

 ENDTRY. 

* 设置收件人 

 IF lt_receivers[] IS INITIAL. 

 "设置指定的单个人 或者 根据用户名发送 

 IF recipient_mail IS NOT INITIAL. 

 TRY. 

 lo_recipient = cl_cam_address_bcs= create_internet_address( recipient_mail ). "#EC .. 

 CATCH cx_address_bcs. 

 ENDTRY. 

 ELSE. 

 TRY. 

 lo_recipient = cl_sapuser_bcs= create( sy-uname ). "#EC .. 

 CATCH cx_address_bcs. 

 ENDTRY. 

 ENDIF. 

 TRY. 

 lo_send_request- add_recipient( 

 EXPORTING 

 i_recipient = lo_recipient 

 i_express = X ). "#EC .. 

 CATCH cx_send_req_bcs. 

 ENDTRY. 

 ELSE. 

 LOOP AT lt_receivers INTO ls_receivers. 

 IF ls_receivers-iusrid IS NOT INITIAL. 

 lv_recipient_uid = ls_receivers-iusrid. 

 TRY. 

 lo_recipient = cl_sapuser_bcs= create( lv_recipient_uid ). "#EC .. 

 CATCH cx_address_bcs. 

 ENDTRY. 

 ELSEIF ls_receivers-email IS NOT INITIAL. 

 lv_recipient_mail = ls_receivers-email . 

 TRY. 

 lo_recipient = cl_cam_address_bcs= create_internet_address( lv_recipient_mail ). 

 CATCH cx_address_bcs. 

 ENDTRY. 

 ENDIF. 

 TRY. 

 "如果copy是X 则是抄送 

 lo_send_request- add_recipient( 

 EXPORTING 

 i_recipient = lo_recipient 

 i_express = space 

 i_copy = space 

 i_blind_copy = abap_true ). 

 CATCH cx_send_req_bcs. 

 ENDTRY. 

 ENDLOOP. 

 ENDIF. 

** Send email 

 TRY. 

 "立即发送 

 "lo_send_request- set_send_immediately( X ). 

 lo_send_request- send( 

 EXPORTING 

 i_with_error_screen = X 

 RECEIVING 

 result = lv_result ). 

 COMMIT WORK. 

 WAIT UP TO 1 SECONDS. 

 CATCH cx_send_req_bcs. 

 lv_result = . 

 ENDTRY. 

 IF lv_result = X. 

 MESSAGE 发送成功 TYPE S. 

* SUBMIT rsconn01 WITH mode = INT 

* WITH output =  

* AND RETURN. 

 ENDIF. 

ENDFORM.
2、发送邮件(带附件pdf) 2.1 第一种(弹出打印框后进行发送)

ABAP 发送邮件详解编程语言

ABAP 发送邮件详解编程语言

REPORT ywx_test12. 


recipient TYPE REF TO if_recipient_bcs, lx_document_bcs TYPE REF TO cx_document_bcs VALUE IS INITIAL, sent_to_all TYPE os_boolean, g_mailto TYPE ad_smtpadr VALUE [email protected], bcs_exception TYPE REF TO cx_bcs. DATA: pdf_xstring TYPE xstring, pdf_content TYPE solix_tab, pdf_size TYPE so_obj_len. DATA: lt_mail_body TYPE bcsy_text, ls_mail_body TYPE soli, attachment_subject TYPE so_obj_des. DATA: lv_date TYPE c LENGTH 20, lv_time TYPE c LENGTH 20. CALL FUNCTION SSF_FUNCTION_MODULE_NAME EXPORTING formname = ZMMF025_SH IMPORTING fm_name = gs_name EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. "gs_control_parameters-no_dialog = X. gs_control_parameters-langu = sy-langu. gs_output_options-tdnewid = X. gs_output_options-tdimmed = . gs_output_options-tddelete = .
LOOP AT gt_spoolids INTO gs_spoolids. * ---------------------------------------------------------------------* * Create PDF * ---------------------------------------------------------------------* * Create PDF Content * 1) get attributes of spool request * 2) convert spool request to PDF dependent on document type *----------------------------------------------------------------------* * ------------ get attributes of spool request --------------------- CALL FUNCTION RSPO_GET_ATTRIBUTES_SPOOLJOB EXPORTING rqident = gs_spoolids IMPORTING rq = rq TABLES attributes = dummy EXCEPTIONS no_such_job = 1 OTHERS = 2. IF sy-subrc 0. CONTINUE. ENDIF. * --- convert spool request into PDF, dependent on document type --- IF rq-rqdoctype = OTF OR rq-rqdoctype = SMART. CALL FUNCTION CONVERT_OTFSPOOLJOB_2_PDF EXPORTING src_spoolid = gs_spoolids no_dialog = X pdf_destination = X no_background = X IMPORTING pdf_bytecount = bin_size bin_file = pdf_xstring EXCEPTIONS err_no_otf_spooljob = 1 err_no_spooljob = 2 err_no_permission = 3 err_conv_not_possible = 4 err_bad_dstdevice = 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. * error handling CONTINUE. ENDIF. ELSEIF rq-rqdoctype = LIST. CALL FUNCTION CONVERT_ABAPSPOOLJOB_2_PDF EXPORTING src_spoolid = gs_spoolids no_dialog = X pdf_destination = X no_background = X IMPORTING pdf_bytecount = bin_size bin_file = pdf_xstring 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. CONTINUE. ENDIF. ELSE. CONTINUE. ENDIF. pdf_size = bin_size. * ---------------------------------------------------------------------* * Send mail * ---------------------------------------------------------------------* TRY. * -------- create persistent send request ------------------------ send_request = cl_bcs= create_persistent( ). * -------- create and set document ------------------------------- pdf_content = cl_document_bcs= xstring_to_solix( pdf_xstring ). * document = cl_document_bcs= create_document( * i_type = PDF * i_hex = pdf_content * i_length = pdf_size * i_subject = 邮件题目 ). "邮件正文 CLEAR ls_mail_body. ls_mail_body-line = TEST SEND EMAIL(详细请查看附件). APPEND ls_mail_body TO lt_mail_body. ls_mail_body-line = SAP自动发送,请勿回复. APPEND ls_mail_body TO lt_mail_body. WRITE: sy-datum TO lv_date USING EDIT MASK ____-__-__. WRITE: sy-uzeit TO lv_time USING EDIT MASK __:__:__. CONCATENATE 发送时间: lv_date lv_time INTO ls_mail_body-line RESPECTING BLANKS. APPEND ls_mail_body TO lt_mail_body. TRY. document = cl_document_bcs= create_document( i_type = RAW i_text = lt_mail_body i_subject = EMAIL SUBJECT ). CATCH cx_document_bcs . ENDTRY. attachment_subject = TEST PDF. TRY. document- add_attachment( EXPORTING i_attachment_type = PDF i_attachment_subject = attachment_subject i_att_content_hex = pdf_content ). CATCH cx_document_bcs INTO lx_document_bcs. ENDTRY.
* create recipient object recipient = cl_cam_address_bcs= create_internet_address( g_mailto ). * add recipient object to send request send_request- add_recipient( recipient ). * ---------- send document --------------------------------------- sent_to_all = send_request- send( i_with_error_screen = X ). COMMIT WORK. IF sent_to_all IS INITIAL. * error handling CONTINUE. ELSE. MESSAGE send mail successfully TYPE S. ENDIF. * ------------ exception handling ---------------------------------- * replace this rudimentary exception handling with your own one !!! CATCH cx_bcs INTO bcs_exception. ENDTRY. ENDLOOP.
2.2 第二种(不弹出打印框,直接发送)
"主要将getotf = X打开 

CALL FUNCTION SSF_FUNCTION_MODULE_NAME 

 EXPORTING 

 formname = ZMMF025_SH 

 IMPORTING 

 fm_name = gs_name 

 EXCEPTIONS 

 no_form = 1 

 no_function_module = 2 

 OTHERS = 3. 

gs_control_parameters-no_dialog = X. 

gs_control_parameters-langu = sy-langu. 

gs_control_parameters-getotf = X. 

gs_output_options-tdnoprev = X. 

CALL FUNCTION gs_name 

 EXPORTING 

 control_parameters = gs_control_parameters 

 output_options = gs_output_options 

 wa_ekko = gs_ekko 

 IMPORTING 

 job_output_info = gs_job_output_info 

 TABLES 

 it_ekpo = gt_ekpo 

 EXCEPTIONS 

 formatting_error = 1 

 internal_error = 2 

 send_error = 3 

 user_canceled = 4 

 OTHERS = 5. 

DATA: lt_tline TYPE STANDARD TABLE OF tline. 

CALL FUNCTION CONVERT_OTF 

 EXPORTING 

 format = PDF 

* MAX_LINEWIDTH = 255 

* ARCHIVE_INDEX =   

* COPYNUMBER = 0 

* ASCII_BIDI_VIS2LOG =   

* PDF_DELETE_OTFTAB =   

 IMPORTING 

 bin_filesize = bin_size 

 bin_file = pdf_xstring 

 TABLES 

 "otf = gs_job_output_info-otfdata 

 lines = lt_tline 

 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.

邮件主体内容也可以写HTML

17987.html

cjava