SAP 中发送e-Mail的方法,如何发送附件?如何在附件中显示中文?

本文介绍了如何在SAP中发送带有附件并确保中文字符正常显示的电子邮件。通过关键代码展示了从字符串到XSTRING的转换,创建邮件文档,添加附件,设置发送者和接收者等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

经多次研究和测试,终于可以正常发送所有附件,且可实际中文字符的正常显示。

 

关键代码,请参看红色字体部分:

 

*&---------------------------------------------------------------------*
*&      Form  SEND_EMAIL_WITH_ATTACHMENT
*&---------------------------------------------------------------------*
FORM SEND_EMAIL_WITH_ATTACHMENT .
  data: binary_content type solix_tab.
  data: xl_content type xstring .

  constants:
  con_tab  type c value cl_abap_char_utilities=>horizontal_tab,
  con_cret type c value cl_abap_char_utilities=>cr_lf.

  data: xlcontent type xstring,
        conlength type i,
        conlengths type so_obj_len,
        result_content type string,
        wa_string type string, "This holds all of your data
        wa_str_temp type string,
        dummy type string.

  data: send_request type ref to cl_bcs.
  datatext type bcsy_text.
  data: document type ref to cl_document_bcs.
  data: sender type ref to if_sender_bcs.
  data: recipient type ref to if_recipient_bcs.
  data: recipients type bcsy_smtpa.
  data: bcs_exception type ref to cx_bcs.
  data: sent_to_all type os_boolean.

  data: e_r_page type ref to cl_rsr_www_page.
  data: content_length type w3param-cont_len ,
        content_type type w3param-cont_type,
        return_code type w3param-ret_code .
  data: html type standard table of w3html .
  data: server type string ,
        port type string .
  data: wa_rec type ad_smtpadr .
  data: bcs_message type string .

  data: subject type so_obj_des.
  data: sender_id type ad_smtpadr.
  data: email type ad_smtpadr.

  data: gv_file type string,
        gv_zipfilehex type xstring,
        go_zipper type ref to cl_abap_zip. "The zip folder object

  data: lp_size type so_obj_len,
        lv_i type i.

  refresh binary_content .
  clear wa_string.
  clear: lp_size, lv_i.
  loop at it_html.
    clear: xl_content .
*   convert the string data to xstring
    call function 'SCMS_STRING_TO_XSTRING'
    exporting
      text = it_html-line
      MIMETYPE = 'DAT'
      ENCODING = '4110'         "  4103 NG, 8400 NG, 4110 is OK
    importing
      buffer = xl_content
    EXCEPTIONS
     FAILED = 1
     OTHERS = 2.

    call function 'SCMS_XSTRING_TO_BINARY'
      exporting
        buffer     = xl_content
        append_to_table = 'X'
      importing
        OUTPUT_LENGTH   = lv_i
      tables
        binary_tab = binary_content.

    add lv_i to lp_size.

  endloop.

  lp_size = lp_size * 6.

*"Title
  subject = p_subj .

  sender_id = p_sender.

  clear P_att_name.
  concatenate wa_header-reinr '.htm' into p_att_name.

*  refresh text .
  clear result_content .
*  The body message
  loop at zmess.
    if result_content is initial.
      concatenate zmess-zline '<br>' into result_content.
    else.
      concatenate result_content zmess-zline '<br>' into result_content.
    endif.
  endloop.

  conlength = strlen( result_content ) .
  conlengths = conlength .
  call function 'SCMS_STRING_TO_FTEXT'
  exporting
    text      = result_content
  tables
    ftext_tab = text.



  try.
    clear send_request .




    send_request = cl_bcs=>create_persistent( ).

    clear document .
    document = cl_document_bcs=>create_document(
    i_type    = 'HTM'
    i_text    = text
    i_length  = conlengths
    i_subject = subject ).

    call method document->add_attachment
    exporting
      i_attachment_type    = 'htm'
      i_attachment_subject = p_att_name   "'Trip.htm' "Attachment name
      i_att_content_hex    = binary_content.

*   add document to send request
    call method send_request->set_document( document ).

    clear sender .
    sender = cl_cam_address_bcs=>create_internet_address( sender_id ).
    call method send_request->set_sender
    exporting
      i_sender = sender.

    clear wa_rec .

      clear recipient .
      wa_rec =  p_receip.
      recipient = CL_CAM_ADDRESS_BCS=>create_internet_address(
      wa_rec ).

      call method send_request->add_recipient
      exporting
        i_recipient = recipient.

    call method send_request->set_status_attributes
    exporting
      i_requested_status = 'E'
      i_status_mail      = 'E'.

    call method 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'.
*  APPEND 'Mail sent successfully ' TO return .
    endif.
    commit work.
  catch cx_bcs into bcs_exception.
    bcs_message = bcs_exception->get_text( ).
*  APPEND bcs_message TO return .
    exit.
  endtry.
ENDFORM.                    " SEND_EMAIL_WITH_ATTACHMENT

<think>我们参考了用户提供的引用内容,这些引用主要涉及ABAP发送邮件的实现细节。根据引用,ABAP发送邮件主要使用SAP的邮件相关API,包括创建文档、设置收件人、发送邮件等步骤。同时,引用中提到了使用函数模块、配置SMTP等方法。 用户问题:在ABAP中实现邮件发送功能。实现步骤:1.创建邮件文档:使用`cl_document_bcs=>create_document`方法创建邮件主体,可以设置文本、HTML内容或添加附件。2.创建发送请求:使用`cl_bcs=>create_persistent`方法创建一个发送请求实例。3.添加文档到请求:使用发送请求实例的`add_document`方法将邮件文档添加进去。 4.设置发件人:使用发送请求实例的`set_sender`方法设置发件人地址(需要配置过SU01中的邮件地址)。 5.添加收件人:使用`cl_cam_address_bcs=>create_internet_address`创建收件人地址,然后使用发送请求实例的`add_recipient`方法添加收件人(可设置主收件人或抄送)。6.发送邮件:调用发送请求实例的`send`方法发送邮件,然后使用`commit work`提交。另外,引用[3]提到使用自建函数`ZMJM_SEND_MAIL`发送邮件,但一般情况下我们使用标准类和方法。 下面是一个示例代码,演示如何发送带有文本内容和附件的邮件。注意:需要确保SMTP配置正确(引用[4]),并且发件人用户在SU01中配置了邮件地址。</think>### ABAP 发送电子邮件实现方法 在ABAP中实现邮件发送功能的核心步骤如下,结合SAP标准类和函数模块: #### 1. **创建邮件文档对象** 使用`CL_DOCUMENT_BCS`类创建邮件主体: ```abap DATA(lo_document) = cl_document_bcs=>create_document( i_type = 'RAW' " 邮件类型 i_text = lt_body " 邮件正文(表类型) i_subject = lv_subject " 邮件主题 ). ``` #### 2. **添加附件(可选)** 通过`ADD_ATTACHMENT`方法添加附件: ```abap lo_document->add_attachment( i_attachment_type = 'PDF' " 附件类型 i_attachment_subject = 'Invoice.pdf' " 附件名称 i_att_content_hex = lt_pdf_data " 二进制附件数据 ). ``` #### 3. **创建发送请求** 实例化邮件发送对象: ```abap DATA(lo_send_request) = cl_bcs=>create_persistent( ). lo_send_request->set_document( lo_document ). ``` #### 4. **设置发件人** 必须配置SU01中的邮件地址[^4]: ```abap lo_send_request->set_sender( 'sender@company.com' ). " SU01配置的邮箱 ``` #### 5. **添加收件人** 支持主送/抄送/密送: ```abap " 主收件人 DATA(lo_recipient) = cl_cam_address_bcs=>create_internet_address( 'recipient@domain.com' ). lo_send_request->add_recipient( lo_recipient ). " 抄送 DATA(lo_cc) = cl_cam_address_bcs=>create_internet_address( 'cc@domain.com' ). lo_send_request->add_recipient( i_recipient = lo_cc i_copy = abap_true ). ``` #### 6. **发送邮件** 执行发送并检查结果: ```abap DATA(lv_sent) = lo_send_request->send( i_with_error_screen = abap_true ). IF lv_sent = abap_true. COMMIT WORK. MESSAGE '邮件发送成功' TYPE 'S'. ENDIF. ``` #### 7. **关键配置前提** - **SMTP服务器配置**:使用事务码SCOT配置SMTP连接[^4] - **发件人邮箱绑定**:在SU01用户参数中设置邮件地址 - **SAPconnect服务**:通过SICF激活`/sap/public/bc`服务 #### 完整示例(发送文本邮件) ```abap DATA: lt_body TYPE soli_tab, lv_subject TYPE so_obj_des. lv_subject = '测试邮件'. APPEND '这是邮件正文内容' TO lt_body. DATA(lo_document) = cl_document_bcs=>create_document( i_type = 'RAW' i_text = lt_body i_subject = lv_subject ). DATA(lo_request) = cl_bcs=>create_persistent( ). lo_request->set_document( lo_document ). lo_request->set_sender( 'system@company.com' ). DATA(lo_recipient) = cl_cam_address_bcs=>create_internet_address( 'user@domain.com' ). lo_request->add_recipient( lo_recipient ). IF lo_request->send( ) = abap_true. COMMIT WORK. ENDIF. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值