加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在 SAP 中发邮件的方法 2 (带 EXCEL 附件).

(2012-12-28 19:17:20)
标签:

abap

发邮件

分类: ABAP
如果用方法一发送带EXCEL的附件会有些问题,
例如会把邮件中的内容也放到EXCEL 表格中,而且 body_num 数要多加上邮件中的行数才能显示完整.
目前不知道什么原因, 研究中.
所以要用下面的方法,也就是把 contents_bin 换成 contents_hex.
但这种方式发送的附件每行长度也不能超过255,输出长度510.

代码如下:

*&---------------------------------------------------------------------*
*& Report  ZSENDEMAIL07
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zsendemail07.

TABLESzszmail.      "Email 地址 Table
*PARAMETERS: psubject(40) TYPE DEFAULT 'Hello',
CONSTANTS:
  gc_tab  TYPE c VALUE cl_bcs_convert=>gc_tab,  "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
  gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf. "CL_ABAP_CHAR_UTILITIES=>CR_LF

DATA  i_packing_list       LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
        i_receivers          LIKE somlreci1 OCCURS 0 WITH HEADER LINE"receivers
        i_contents_txt       LIKE solisti1 OCCURS 0 WITH HEADER LINE
                              "ASCII contents of object and attachments
        i_contents_hex       LIKE solix   OCCURS 0 WITH HEADER LINE
                              "Binary contents of object and attachments
        i_contents_bin       LIKE solisti1   OCCURS 0 WITH HEADER LINE
        i_object_header      LIKE solisti1 OCCURS 0 WITH HEADER LINE "attachments name
        w_doc_data           LIKE sodocchgi1.      "邮件标题及优先级
DATAc_mimetype TYPE char64 VALUE 'APPLICATION/MSEXCEL;charset=utf-16le'.
DATAv_xattach TYPE xstring.
DATAlv_string TYPE string.
DATA  tab_lines LIKE sy-tabix,
        w_sent_all(1TYPE c,
        w_error TYPE sy-subrc.

DATAi_spfli LIKE STANDARD TABLE OF spfli WITH HEADER LINE.

***********************************************************************
START-OF-SELECTION.
  PERFORM get_spfli_data.
***定义邮件主体内容及标题*****
  PERFORM define_mail_header.

***定义附件*******************
  PERFORM define_mail_attachment.
***定义收件人*****************
  PERFORM get_receivers.
*Send email message, although is not sent from SAP until mail send
*program has been executed(rsconn01)
  PERFORM send_email_message.

*&---------------------------------------------------------------------*
*&      Form  GET_SPFLI_DATA
*&---------------------------------------------------------------------*
FORM get_spfli_data .

  SELECT FROM spfli
    INTO CORRESPONDING FIELDS OF TABLE i_spfli.

ENDFORM                   GET_SPFLI_DATA
*&---------------------------------------------------------------------*
*&      Form  DEFINE_MAIL_HEADER
*&---------------------------------------------------------------------*
FORM define_mail_header .
  DATAtmp_date LIKE sy-datum.
  DATAtmp_char(30).
  tmp_date sy-datum.
  CONCATENATE 'Overdue Batch  ' sy-datum INTO tmp_char.
********define subject and priority************
  w_doc_data-obj_descr 'Hello' "Email Subject.
  w_doc_data-priority 1        "邮件优先级 1~9 , 1为最高优先级
  w_doc_data-obj_langu sy-langu.
  w_doc_data-obj_name 'OFFER' "Name of document..
  w_doc_data-sensitivty 'O'    "Document sensitivity.

********定义邮件主体内容***********************
  i_contents_txt 'Dear Mr and Miss:'.
  APPEND i_contents_txt.
  i_contents_txt '.
  APPEND i_contents_txt.
  i_contents_txt     Please check attachment in time!'.
  APPEND i_contents_txt.
  i_contents_txt     This Email is sent by systme, Do not Return the Email.'.
  APPEND i_contents_txt.
  i_contents_txt =     If you have any problem, please contact with ERP.'.
  APPEND i_contents_txt.
  i_contents_txt '.
  APPEND i_contents_txt.
  i_contents_txt tmp_date.
  APPEND i_contents_txt.
  DESCRIBE TABLE i_contents_txt LINES tab_lines.
  READ TABLE i_contents_txt INDEX tab_lines.
  w_doc_data-doc_size tab_lines 1 255 strleni_contents_txt ).

********根据邮件主体内容计算其行数*************
  CLEAR   i_packing_list-transf_bin.
  i_packing_list-transf_bin space.    "ASCII format/binary format
  i_packing_list-head_start 1.
  i_packing_list-head_num 0.
  i_packing_list-body_start 1.
  i_packing_list-body_num tab_lines.
  i_packing_list-doc_type 'RAW'.
  APPEND i_packing_list.

ENDFORM                   DEFINE_MAIL_HEADER
*&---------------------------------------------------------------------*
*&      Form  DEFINE_MAIL_ATTACHMENT
*&---------------------------------------------------------------------*
FORM define_mail_attachment .

  LOOP AT i_spfli.
    CONCATENATE lv_string
            i_spfli-carrid    gc_tab
            i_spfli-connid    gc_tab
            i_spfli-countryfr gc_tab                        "#EC NOTEXT
            i_spfli-cityfrom  gc_tab
            i_spfli-cityfrom  gc_tab
            i_spfli-countryto gc_tab
            i_spfli-cityto    gc_tab
            i_spfli-airpto    gc_crlf                       "#EC NOTEXT
            INTO lv_string.
  ENDLOOP.
Convert string to xstring type
'APPLICATION/MSEXCEL;charset=utf-16le'
  CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
    EXPORTING
      text     lv_string
      mimetype c_mimetype
    IMPORTING
      buffer   v_xattach
    EXCEPTIONS
      failed   1
      OTHERS   2.
Add the file header for utf-16le. .
  IF sy-subrc 0.
    CONCATENATE cl_abap_char_utilities=>byte_order_mark_little
    v_xattach INTO v_xattach IN BYTE MODE.
  ENDIF.

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer     v_xattach
    TABLES
      binary_tab i_contents_hex.

***设置附件名称***********
 i_object_header 'spfli.txt'.
 APPEND i_object_header.

***计算附件大小分配空间*******************
  DESCRIBE TABLE i_spfli LINES tab_lines.
  tab_lines tab_lines .
  i_packing_list-transf_bin 'X'.
  i_packing_list-head_start 1.
  i_packing_list-head_num   0.
  i_packing_list-body_start 1.
  i_packing_list-body_num tab_lines.
  i_packing_list-doc_type 'XLS'.
  i_packing_list-obj_name   'ATTACHMENT'.
  i_packing_list-obj_descr  'spfli'.
  i_packing_list-doc_size  tab_lines 255.
  APPEND i_packing_list.

ENDFORM                   DEFINE_MAIL_ATTACHMENT
*&---------------------------------------------------------------------*
*&      Form  GET_RECEIVERS
*&---------------------------------------------------------------------*
FORM get_receivers .
Add the recipients email address
  CLEAR i_receivers.
  REFRESH i_receivers.
  SELECT FROM zszmail.
    i_receivers-receiver zszmail-address.  "Email Address
    i_receivers-rec_type 'U'   "Internet address
    i_receivers-notif_read 'X'.
    i_receivers-com_type 'INT'.
    i_receivers-notif_del 'X'.
    i_receivers-notif_ndel 'X'.
    APPEND i_receivers.
  ENDSELECT.
ENDFORM                   GET_RECEIVERS

*&---------------------------------------------------------------------*
*&      Form SEND_EMAIL_MESSAGE
*&---------------------------------------------------------------------*
FORM send_email_message.
  DATAw_subrc LIKE sy-subrc.
Call the FM to post the message to SAPMAIL
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      document_data              w_doc_data         "Attributes of new document
      put_in_outbox              'X'                 "Flag: Move document to outbox after send
      commit_work                'X'                 "An explicit COMMIT WORK is to be set
    IMPORTING
      sent_to_all                w_sent_all
    TABLES
      packing_list               i_packing_list      "Information about structure of data tables
      object_header              i_object_header
      contents_hex               i_contents_hex
    contents_bin               i_contents_bin
      contents_txt               i_contents_txt       "ASCII contents of object and attachments
      receivers                  i_receivers         "Document recipients with send attributes
    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.

  w_subrc sy-subrc.
  WAIT UP TO 2 SECONDS.
  IF w_subrc EQ 0.
    SUBMIT rsconn01 WITH mode 'INT'
                  WITH output 'X'
                  AND RETURN.
  ENDIF.
ENDFORM                   SEND_EMAIL_MESSAGE

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有