SAP SMTP配置电子邮件与ABAP邮件发送(含附件)

本文详细介绍了如何在SAP系统中配置SMTP连接,获取SMTP码,以及使用ABAP编程(CL_BCS和CL_DOCUMENG_BCS类)实现邮件发送的过程,包括SAPconnect的激活和参数设置,以及飞书邮箱的对接示例。

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

SAP 系统配置项

配置参数文件

参考: note-455140
a).SMICM查询SMTP配置的端口,没有的话自己整一个
端口列表b).RZ10新增两个参数

icm/server_port_<*> = PROT=SMTP,PORT=<port>;
is/SMTP/virt_host_<*> = <host>:<port>,<port>,...;

在这里插入图片描述

激活SAPconnect

a).SU01建一个账号,推荐建系统账号,不是也没关系
两个页签: 邮件地址、参数文件
在这里插入图片描述
在这里插入图片描述
b).SICF激活SAPconnect服务
参数编号填上图配的,我的是is/SMTP/virt_host_0所以填0
在这里插入图片描述
填入a中创建的用户
在这里插入图片描述
逻辑处理类CL_SMTP_EXT_SAPCONNECT
在这里插入图片描述

配置连接参数

以飞书举例

获取邮箱的SMTP码

邮箱–>设置–>第三方邮箱客户端登录–>生成;即可获得码
在这里插入图片描述

配置SMTP连接

a).SCOT按向导开整
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
b).设置作业,定期从队列中获取电子邮件并通过 Internet 发送
在这里插入图片描述

邮件发送测试

a).SBWP发送邮件
在这里插入图片描述

b).SOST发送
在这里插入图片描述

在这里插入图片描述
以上,SAP与飞书邮箱打通。接下来就是使用ABAP代码发送了

ABAP实现邮件发送

主要使用CL_BCS、CL_DOCUMENG_BCS两个类实现。由于自己还没完成,所以在此简述过程

//设置为立即发送
cl_bcs->set_send_immediately( abap_true ).
//设置发送方
cl_bcs->set_sender( cl_cam_address_bcs=>create_internet_address( address ) ).
//设置接收方(i_Copy = '')/抄送方(i_Copy = 'X')
cl_bcs->add_recipient( i_recipient = cl_cam_address_bcs=>create_internet_address( address )
                            i_copy      = copy
                            i_express   = abap_true ).
//为邮件内容实例文档类
cl_document_bcs = cl_document_bcs=>create_document(
        i_type       = i_type //文档类型
        i_subject    = i_subject //标题
        i_length     = i_length //长度
        i_language   = i_language
        i_importance = i_importance
        i_sensitivity = i_sensitivity
        i_text        = i_text // 内容
        i_hex         = i_hex
        i_header      = i_header
        i_sender      = i_sender
        iv_vsi_profile = iv_vsi_profile ).
//增加附件
cl_document_bcs->add_attachment( EXPORTING i_attachment_type = ls_attachment-type //数据类型
                                                  i_attachment_subject = ls_attachment-subject //附件名称
                                                  i_attachment_size = ls_attachment-size //附件大小
                                                  i_att_content_hex = ls_attachment-attachment //二进制数据流).
//为连接引擎加载内容文档
cl_bcs->set_document( zcl_document_bcs ).
//发送
IF zcl_bcs->send( i_with_error_screen = 'X' ).
	 ex_uuid = zcl_bcs->oid( ).
//表SOOS SOES SOST
     COMMIT WORK AND WAIT.
ENDIF.

DEMO

DATA:BEGIN OF ls_bkpf,
       bukrs TYPE bukrs,
       belnr TYPE belnr_d,
       gjahr TYPE gjahr,
       blart TYPE blart,
       budat TYPE budat,
       xblnr TYPE xblnr,
       bktxt TYPE bktxt.
DATA END OF ls_bkpf.
DATA lt_bkpf LIKE TABLE OF ls_bkpf.
DATA:lv_tdobject     TYPE tdobjectgr VALUE 'GRAPHICS',
     lv_tdname 	     TYPE tdobname VALUE 'ZSLOGAN',
     lv_tdid 	       TYPE tdidgr  VALUE 'BMAP',
     lv_tdbtype      TYPE tdbtype  VALUE 'BMON', "'BCOL',
     lv_graphic_xstr TYPE xstring.
DATA:cl_adapter_mails TYPE REF TO zcl_adapter_mails,
     lt_text          TYPE soli_tab,
     lt_address       TYPE zcl_adapter_mails=>tty_address,
     ls_attachment    TYPE zcl_adapter_mails=>ty_attachment,
     lt_attachment    TYPE zcl_adapter_mails=>tty_attachment.    
      
SELECT * FROM bkpf INTO CORRESPONDING FIELDS OF TABLE lt_bkpf
  WHERE gjahr = '2024' AND monat = '04' AND blart = 'RV'. 
  
cl_adapter_mails = NEW #( ).
APPEND '详情见附件' TO lt_text.
APPEND VALUE #( type = 'SENDER' address = 'xxxx@xxxx.com' ) TO lt_address.
APPEND VALUE #( type = 'RECEIVER' address = 'xxxx@xxxx.com' ) TO lt_address.
APPEND VALUE #( type = 'RECEIVER' address = 'xxxx@xxxx.com' ) TO lt_address.
APPEND VALUE #( type = 'CCOPY' address = 'xxxx@xxxx.com' ) TO lt_address.
cl_adapter_mails->set_address( lt_address ).

cl_adapter_mails->create_document( EXPORTING
                                     i_type = 'RAW'
                                     i_subject = '请协助分析销售收入凭证异常原因'
                                     i_text = lt_text ).
CLEAR ls_attachment.
ls_attachment-type = 'BIN'.
ls_attachment-subject = '异常凭证明细.xlsx'.
cl_adapter_mails->data_to_xstring( EXPORTING data = lt_bkpf
                                   IMPORTING ex_size = ls_attachment-size
                                             et_solix_tab = ls_attachment-attachment ).
APPEND ls_attachment TO lt_attachment.

CLEAR ls_attachment.
ls_attachment-type = 'BIN'.
ls_attachment-subject = 'slogan.png'.

CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
  EXPORTING
    p_object       = lv_tdobject
    p_name         = lv_tdname
    p_id           = lv_tdid
    p_btype        = lv_tdbtype
  RECEIVING
    p_bmp          = lv_graphic_xstr
  EXCEPTIONS
    not_found      = 1
    internal_error = 2
    OTHERS         = 3.

cl_adapter_mails->xstring_to_solix( EXPORTING iv_xstring = lv_graphic_xstr
                                    IMPORTING ex_size = ls_attachment-size
                                              et_solix = ls_attachment-attachment ).
APPEND ls_attachment TO lt_attachment.

cl_adapter_mails->add_attachment( lt_attachment ).

cl_adapter_mails->send( ).

zcl_adapter_mails

CLASS zcl_adapter_mails DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    TYPES:
      BEGIN OF ty_address,
        type    TYPE char10,
        address TYPE ad_smtpadr.
    TYPES END OF ty_address .
    TYPES:
      tty_address TYPE TABLE OF ty_address .
    TYPES:
      BEGIN OF ty_attachment,
        type       TYPE so_obj_tp,
        subject    TYPE so_obj_des,
        size       TYPE so_obj_len,
        attachment TYPE solix_tab.
    TYPES END OF ty_attachment .
    TYPES:
      tty_attachment TYPE TABLE OF ty_attachment .
    METHODS constructor .
    METHODS create_document
      IMPORTING
        VALUE(i_type)         TYPE so_obj_tp
        VALUE(i_subject)      TYPE so_obj_des
        VALUE(i_length)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值