You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CL_BCS未发送请求:SOSA收不到请求但SBWP可正常收邮件

SAP BCS发送问题:SOSA发送请求未送达&外部邮箱收不到邮件

问题现象

程序预期实现:

  • S_INBOX参数传入的SAP ID用户,在SBWP职场收件箱收到邮件
  • S_EMAIL参数传入的外部邮箱用户,在SOSA事务码中看到出站发送请求,同时收到外部邮件

实际执行结果:

  • S_INBOX用户正常在SBWP收到邮件
  • S_EMAIL用户既收不到外部邮件,也无法在SOSA中找到对应的发送请求记录

相关代码

选择屏幕代码

SELECT-OPTIONS:
 s_inbox FOR bname NO INTERVALS,     "SAP ID
 s_email FOR bname NO INTERVALS.     "External Email
SELECTION-SCREEN END OF BLOCK b1.

正常工作的SAP用户邮件发送代码

LOOP AT s_inbox[] ASSIGNING FIELD-SYMBOL(<s_inbox>).
  lo_sender = cl_sapuser_bcs=>create( <s_inbox>-low ).
  lo_send_request->add_recipient( lo_sender ).
ENDLOOP.

异常的外部邮箱处理代码

LOOP AT s_email[] ASSIGNING FIELD-SYMBOL(<s_email>).
  lo_recipient = cl_sapuser_bcs=>create( <s_email>-low ).
  lo_send_request->add_recipient( lo_recipient ).
ENDLOOP.

问题根源

cl_sapuser_bcs=>create()是专门用于创建SAP系统内用户的BCS收件人对象,它依赖SU01中维护的用户主数据。而S_EMAIL传入的是外部邮箱地址,并非合法的SAP用户ID,用这个方法处理会导致:

  1. 系统无法识别该收件人为外部邮箱,邮件无法通过SMTP路由到外部邮件系统
  2. 由于收件人对象不合法,SOSA事务码不会生成对应的出站发送请求记录

修正方案

针对外部邮箱地址,必须使用cl_cam_address_bcs=>create_internet_address()创建外部收件人对象,同时明确收件人类型:

LOOP AT s_email[] ASSIGNING FIELD-SYMBOL(<s_email>).
  " 创建外部互联网邮箱收件人对象
  lo_recipient = cl_cam_address_bcs=>create_internet_address( <s_email>-low ).
  " 添加收件人到发送请求,可根据业务需求设置类型:TO/CC/BCC
  lo_send_request->add_recipient(
    EXPORTING
      i_recipient = lo_recipient
      i_type      = IF_RECIPIENT_BCS=>TO  " 主收件人,可替换为CC/BCC
      i_express   = abap_false
  ).
ENDLOOP.

额外检查项

  1. 登录SCOT事务码,确认SMTP节点已激活,且配置了正确的邮件服务器地址与端口
  2. 在SOSA中调整筛选条件:确认日期范围包含发送时间,且未过滤发送状态(如“已发送”“待处理”)
  3. 查看SLG1日志:搜索BCS相关条目,排查是否存在发送失败的错误信息

内容的提问来源于stack exchange,提问作者Bigflatfoot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:24:16