ABAP 发送邮件详解编程语言
编程语言 详解 发送 邮件 ABAP
2023-06-13 09:11:48 时间
1、发送邮件(带附件xls)
* ---------------------------------------------------------------------* * 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 第一种(弹出打印框后进行发送)
REPORT ywx_test12.2.2 第二种(不弹出打印框,直接发送)
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.
"主要将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相关文章
- Python实现简单的HTTP请求发送详解编程语言
- python实现发送邮件详解编程语言
- 一段简单的python邮件客户端发送代码详解编程语言
- Python SMTP 发送纯文本详解编程语言
- Python使用Gmail发邮件详解编程语言
- smtplib模块发送邮件详解编程语言
- 50个必备的实用jQuery代码段详解编程语言
- jQuery复选框操作详解编程语言
- 通过common-emai类库发送普通邮件和带有附件的邮件的完整示例详解编程语言
- 发送Post的请求代码详解编程语言
- ashx文件获取$.ajax()方法发送的数据详解编程语言
- C/C++中int128的那点事详解编程语言
- 防止表单重复提交详解编程语言
- Go基础之–数组和切片详解编程语言
- [PHP] 超全局变量$_FILES上传文件详解编程语言
- Node.js开发指南详解编程语言
- activemq jms spring 发送调优详解编程语言
- mq 使用Spring发送,消费topic和queue消息详解编程语言
- JavaMail入门第三篇 发送邮件详解编程语言
- 简单的使用httpclient调接口发送和接收JSon详解编程语言
- ABAP-邮件发送详解编程语言
- css3png图片渐变动画详解编程语言
- php发送qq邮件的方法详解编程语言
- PHP发送邮箱的方法smtp方法详解编程语言
- SAP发送邮件详解编程语言
- 盘点详解编程语言
- java servlet 生命周期详解编程语言