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,用这个方法处理会导致:
- 系统无法识别该收件人为外部邮箱,邮件无法通过SMTP路由到外部邮件系统
- 由于收件人对象不合法,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.
额外检查项
- 登录SCOT事务码,确认SMTP节点已激活,且配置了正确的邮件服务器地址与端口
- 在SOSA中调整筛选条件:确认日期范围包含发送时间,且未过滤发送状态(如“已发送”“待处理”)
- 查看SLG1日志:搜索BCS相关条目,排查是否存在发送失败的错误信息
内容的提问来源于stack exchange,提问作者Bigflatfoot
相关产品推荐
相关产品推荐

