返回

邮件相关三:Demo 发邮件的Report(带附件)

发布时间:2022-10-18 12:48:00 272
# 信息
REPORT  zlm_send_email.
* Data Declaration
DATA: docdata LIKE sodocchgi1,
objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,
objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE,
objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE,
objhex LIKE solix OCCURS 10 WITH HEADER LINE,
reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE.
DATA: BEGIN OF it_obj_descr OCCURS 0,
obj_desc LIKE objpack-obj_descr ,
END OF it_obj_descr.
DATA: listobject LIKE abaplist OCCURS 1 WITH HEADER LINE.

DATA: tab_lines TYPE i,
des_lines TYPE i,
doc_size TYPE i,
att_type LIKE soodk-objtp.

PARAMETERS: p_file LIKE rlgrap-filename OBLIGATORY,
p_email TYPE so_recname OBLIGATORY. "收件人邮箱

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
DATA: tmp_filename LIKE rlgrap-filename.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
* def_filename = p_file
mask = ',*.XLSX,*.XLSX;,*.TXT,*.TXT;,*.PDF,*.PDF;,*.*,*.*.'
mode = 'O'
IMPORTING
filename = tmp_filename
EXCEPTIONS
inv_winsys = 01
no_batch = 02
selection_cancel = 03
selection_error = 04.
IF sy-subrc = 0.
p_file = tmp_filename.
ENDIF.

START-OF-SELECTION.
DATA: l_file TYPE string.
l_file = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_file
filetype = 'BIN' "获取时采用二进制
* HAS_FIELD_SEPARATOR = 'X'
TABLES
data_tab = objbin[]
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

* NOTE: 以下部分为制作邮件的标题,文本内容等信息

* Create Message Body
* Title and Description

docdata-obj_name = 'ADAF'. "文档名称 名称随便取
docdata-obj_descr = '测试附件传输'. "邮件的主题

"邮件正文
* Main Text
objtxt = 'Test Document.'.
APPEND objtxt.
objtxt = 'HAVE A NICE DAY.'.
APPEND objtxt.

* Write Packing List (Main)
DESCRIBE TABLE objtxt LINES tab_lines.
READ TABLE objtxt INDEX tab_lines.
docdata-doc_size = ( tab_lines - 1 ) * 255 + strlen( objtxt ).
CLEAR objpack-transf_bin.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = 'RAW'.
APPEND objpack.

* 获取附件文件名称
SPLIT l_file AT '\' INTO TABLE it_obj_descr.
DESCRIBE TABLE it_obj_descr LINES des_lines.
READ TABLE it_obj_descr INDEX des_lines.

* 这里开始添加附件相关信息
att_type = 'EXT'. "这里可能的输入参数可以参考表TSOTD, EXT表示外部文件

DESCRIBE TABLE objbin LINES tab_lines.
READ TABLE objbin INDEX tab_lines.
objpack-doc_size = ( tab_lines - 1 ) * 255 + strlen( objbin ). "附件的大小
objpack-transf_bin = 'X'. "表示以二进制传输,由于上传时选择二进制,所以这里必须给值
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1. "附件内容开始行,如果添加多个附件则下一个附件的起始行为 TAB_LINES + 1
objpack-body_num = tab_lines. "附件内容总行数
objpack-doc_type = att_type.
objpack-obj_name = 'ATTACHMENT'.
objpack-obj_descr = it_obj_descr-obj_desc. "附件的名称
APPEND objpack.

"收件人信息----邮箱
* CREATE RECEIVER LIST
reclist-receiver = p_email. "接收人邮箱
reclist-rec_type = 'U'.
reclist-express = 'X'.
*RECLIST-REC_TYPE = 'A'.
APPEND reclist.


"调用函数发送邮件
* SEND MESSAGE
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = docdata "邮件标题的属性
put_in_outbox = 'X'
commit_work = 'X' "USED FROM REL. 6.10
* IMPORTING
* SENT_TO_ALL =
* NEW_OBJECT_ID =
TABLES
packing_list = objpack "传输内容格式
object_header = objhead
contents_bin = objbin "附件内容
contents_txt = objtxt "邮件文字内容
* CONTENTS_HEX = OBJHEX
* OBJECT_PARA =
* OBJECT_PARB =
receivers = 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
.
************************************************
* 如果不自动发送,就加上执行邮件立即发送程序
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X' "显示发送结果 ,
AND RETURN.

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
邮件相关二:DEMO 发邮件 2022-10-18 12:01:20