1.********************

  • *调用发送邮件函数
  • CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
  • EXPORTING
  • DOCUMENT_DATA                = DOC_CHNG
  • "subject and description
  • PUT_IN_OUTBOX                = 'X'  "send in_outbox
  • TABLES
  • PACKING_LIST                 = OBJPACK
  • OBJECT_HEADER                = OBJHEAD
  • CONTENTS_BIN                 = OBJBIN  "attachments
  • CONTENTS_TXT                 = OBJTXT  "mail body
  • RECEIVERS                        = RECLIST  "RECEIVE LIST
  • EXCEPTIONS
  • TOO_MANY_RECEIVERS       = 1
  • DOCUMENT_NOT_SENT            = 2
  • OPERATION_NO_AUTHORIZATION = 4
  • OTHERS                       = 99.
  • CASE SY-SUBRC.
  • WHEN 0.
  • *  当执行邮件发送成功后,确认提交,不调用此过程邮件将队列等待直到确认后才正式发送
  • *  遇到错误信息输出提示
  • SUBMIT RSCONN01
  • WITH MODE EQ 'INT'
  • AND RETURN.
  • MESSAGE S001(00) WITH 'Sent Mail success!'.
  • WHEN 1.
  • WRITE: / 'No authorization for sending to the specified number',
  • 'of recipients'.
  • WHEN 2.
  • WRITE: / 'Document could not be sent to any recipient'.
  • WHEN 4.
  • WRITE: / 'No send authorization'.
  • WHEN OTHERS.
  • WRITE: / 'Error occurred while sending'.
  • ENDCASE.

2。********************************

  DATA: OBJECT_HD_CHANGE LIKE SOOD1 OCCURS  WITH HEADER LINE, " 邮件正文的头信息
        RECEIVERS LIKE SOOS1 OCCURS  WITH HEADER LINE,
        PACKING_LIST LIKE SOXPL OCCURS  WITH HEADER LINE, " 邮件附件的头信息
        OBJCONT LIKE SOLI OCCURS  WITH HEADER LINE, " 邮件正文
        ATT_CONT LIKE SOLI OCCURS  WITH HEADER LINE, " 邮件附件
        ATT_HEAD LIKE SOLI OCCURS  WITH HEADER LINE. " 头行   OBJECT_HD_CHANGE-OBJLA = 'E'.                "创建文档使用的语言
  OBJECT_HD_CHANGE-OBJNAM = 'LIST'.            "文档,文件夹或分配清单的名称
  OBJECT_HD_CHANGE-OBJDES = TITLE.             "内容的简短描述CHAR50
  OBJECT_HD_CHANGE-OBJSNS = 'O'.               "对象:灵敏度  P机密 F功能 O标准
  APPEND OBJECT_HD_CHANGE.   LOOP AT REC_NAME.
    RECEIVERS-RECEXTNAM = REC_NAME.
    RECEIVERS-RECESC = 'U'.
    APPEND RECEIVERS.   ENDLOOP.
  LOOP AT ZOBJCONT.
    OBJCONT-LINE = ZOBJCONT-LINE.
    APPEND OBJCONT.
  ENDLOOP.   CALL FUNCTION 'SO_OBJECT_SEND'
    EXPORTING
      OBJECT_HD_CHANGE           = OBJECT_HD_CHANGE
      OBJECT_TYPE                = 'RAW'             " RAW SAP编辑程序文件
      SENDER                     = SY-UNAME          " 发送者用户名
    TABLES
      OBJCONT                    = OBJCONT           " Content
      RECEIVERS                  = RECEIVERS         " 接收人地址
      PACKING_LIST               = PACKING_LIST      " 邮件内容
      ATT_CONT                   = ATT_CONT          " 附件
      ATT_HEAD                   = ATT_HEAD          " 标题
    EXCEPTIONS
      ACTIVE_USER_NOT_EXIST      = 
      COMMUNICATION_FAILURE      = 
      COMPONENT_NOT_AVAILABLE    = 
      FOLDER_NOT_EXIST           = 
      FOLDER_NO_AUTHORIZATION    = 
      FORWARDER_NOT_EXIST        = 
      NOTE_NOT_EXIST             = 
      OBJECT_NOT_EXIST           = 
      OBJECT_NOT_SENT            = 
      OBJECT_NO_AUTHORIZATION    = 
      OBJECT_TYPE_NOT_EXIST      = 
      OPERATION_NO_AUTHORIZATION = 
      OWNER_NOT_EXIST            = 
      PARAMETER_ERROR            = 
      SUBSTITUTE_NOT_ACTIVE      = 
      SUBSTITUTE_NOT_DEFINED     = 
      SYSTEM_FAILURE             = 
      TOO_MUCH_RECEIVERS         = 
      USER_NOT_EXIST             = 
      ORIGINATOR_NOT_EXIST       = 
      X_ERROR                    = 
      OTHERS                     = .

3.**************************

 TRY.

*    创建发送请求
l_send_request = cl_bcs=>create_persistent( ). * 设定发送内容
l_document = cl_document_bcs=>create_document( i_type = 'RAW'
i_text = i_content[]
I_IMPORTANCE = ''
i_subject = l_subject ).
* 增加发送内容到发送请求
CALL METHOD l_send_request->set_document( l_document ).
* 取得发送者(取得发件人,前提是这个邮箱地址能发邮件,并且不需要密码)
l_uname = sy-uname.
l_sender = cl_sapuser_bcs=>create( l_uname ).
CALL METHOD l_send_request->set_sender
EXPORTING
i_sender = l_sender.
* 设置收件人
LOOP AT it_mailaccept.
CONCATENATE it_mailaccept-name '@XXXXX.COM' INTO i_email.
TRANSLATE i_email TO LOWER CASE.
l_recipient = cl_cam_address_bcs=>create_internet_address( i_email ).
CALL METHOD l_send_request->add_recipient
EXPORTING
i_recipient = l_recipient
i_express = 'X'
i_copy = ' '
i_blind_copy = ' '
i_no_forward = ' '.
ENDLOOP.
* 设置抄送人
LOOP AT it_mailaccept_copy.
CONCATENATE it_mailaccept_copy-name '@XXXXX INTO i_email.
TRANSLATE i_email TO LOWER CASE.
l_recipient = cl_cam_address_bcs=>create_internet_address( i_email ).
CALL METHOD l_send_request->add_recipient
EXPORTING
i_recipient = l_recipient
i_express = 'X'
i_copy = 'X'
i_blind_copy = ' '
i_no_forward = ' '.
ENDLOOP.
*& 立即发送
l_send_request->set_send_immediately( 'X' ).
*& 发送
CALL METHOD l_send_request->send( ).
COMMIT WORK.
CATCH cx_document_bcs INTO l_bcs_exception.
CATCH cx_send_req_bcs INTO l_send_exception.
CATCH cx_address_bcs INTO l_addr_exception.
ENDTRY.

SAP 邮件发送的更多相关文章

  1. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         ...

  2. J2EE 邮件发送那些事儿

    距离自己写的关于java邮件发送的第一篇博客已经有很长一段时间了,现在回过头看看.虽然代码质量方面有待提高,整体结构也不怎样,但是基本思路和过程还是比较纯的.现在有空写写J2EE中邮件发送的开发,实际 ...

  3. 结合ABP源码实现邮件发送功能

    1. 前言 2. 实现过程 1. 代码图(重) 2.具体实现 2.1 定义AppSettingNames及AppSettingProvider 2.2 EmailSenderConfiguration ...

  4. SSH项目里面 忘记密码的邮件发送功能

    package com.xxx.util; import java.util.Date; import java.util.Properties; import javax.mail.Address; ...

  5. [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作

    这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...

  6. java spring 邮件发送

    开发中经常会遇到发送邮件进行用户验证,或者其它推送信息的情况,本文基于spring,完成邮件的发送,主要支持普通文本邮件的发送,html文本邮件的发送,带附件的邮件发送,没有实现群发.多个附件发送等需 ...

  7. Java邮件发送与接收原理

    一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...

  8. c#实现邮件发送链接激活

    2016-08-24 10:09:52 public void MailSend(string email) { MailMessage MyMail = new MailMessage(); MyM ...

  9. .Net(C#)最简单的邮件发送案例

    一.序言 刚开始接触邮件发送功能的时候,在网上找的资料都挺复杂的!对于新手入门有点难(至少对于本人来说,第一次接触的时候确实不容易).这里就写一段简单的邮箱发送代码,备忘,也给新手一个参考(相关类的字 ...

随机推荐

  1. KVM网页管理工具WebVirtMgr部署

    KVM-WebVirtMgr 0ther https://github.com/retspen/webvirtmgr/wiki System Optimization(Only CentOS6.X) ...

  2. OpenCppCoverage 的使用

    OpenCppCoverage 的使用 OpenCppCoverage 是一款好用方便的 C++ 代码覆盖率检测工具,可以独立在命令行运行也可以作为 Visual Studio 13/15/17 的插 ...

  3. 团队作业8----第二次项目冲刺(Beta阶段) 第四天

    BETA阶段冲刺第四天 1.小会议ing 2.每个人的工作 (1)昨天已完成的工作 1.修改了学生上传的方式: 2.完善了学生和老师修改的代码: (2) 今天计划完成的工作 (3) 工作中遇到的困难: ...

  4. 201521123042 《java程序设计》 第八周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. ①泛型定义:泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展, ...

  5. 201521123089 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1.代码阅读:Child压缩包内源代码1.1 com.parent包中Child.java文件能否编译通过?哪 ...

  6. 201521123034《Java程序设计》第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 多线程的冲突 互斥共享(有时两个或两个以上的线程需要同时对 而线程之间如果不加以控制,会产生一种情况-竞争) sy ...

  7. Eclipse rap 富客户端开发总结(3):rcp/rap目前界面上的一些差异

    1. Label和Button按钮的显示的差异 当Label 和 Button显示的文字过长显示不开的时候,rcp.rap的处理方式就不一样了,rap显示不开会自己截取掉后面的文字,rcp会在文字的中 ...

  8. Dstl Satellite Imagery Feature Detection-Data Processing Tutorial

    如何读取WKT格式文件 我们找到了这些有用的包: Python - shapely.loads() R - rgeos 如何读取geojson格式文件 我们找到了这些有用的包: Python -  j ...

  9. epoll的ET和LT两种模式对比及注意事项

    ET模式: 因为ET模式只有从unavailable到available才会触发,所以 1.读事件:需要使用while循环读取完,一般是读到EAGAIN,也可以读到返回值小于缓冲区大小: 如果应用层读 ...

  10. ASP.NET Core中如何调整HTTP请求大小的几种方式

    一.前言 一般的情况下,我们都无需调用HTTP请求的大小,只有在上传一些大文件,或者使用HTTP协议写入较大的值时(如调用WebService)才可能会调用HTTP最大请求值. 在ASP.NET Co ...