邮箱发送SMARTFORMS 转 PDF附件
事务代码smartforms创建一个表单ZTEST001
将表单转换成PDF并添加到邮件的附件中发送给用户
"-----------------------------------------@斌将军--------------------------------------------
"打印参数
DATA:LV_FMNAME TYPE RS38L_FNAM,
LS_CTRLOP TYPE SSFCTRLOP,
LS_COMPOP TYPE SSFCOMPOP,
LS_RETURN TYPE SSFCRESCL,
LS_INFO TYPE SSFCRESCL,
LS_OPTIONS TYPE SSFCRESOP. "附件参数
DATA:LT_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,
LT_TLINE TYPE TLINE OCCURS 0 WITH HEADER LINE,
LT_RECORD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE. "邮件参数
DATA:LV_SIZE TYPE I, "邮件附件大小
LV_LINES_TXT TYPE I, "邮件文本行数
LV_LINES_BIN TYPE I, "邮件附件行数
LV_BENFILE TYPE XSTRING,
LV_OBJECT TYPE CHAR50, "邮件主题
LV_PDFNAME TYPE CHAR50,
GT_OBJPACK LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE, "邮件内容 正文+附件
GT_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, "正文内容
GT_OBJBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, "附件内容
GT_RECLIST LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE, "收件人
LS_DOC_CHNG TYPE SODOCCHGI1. "邮件属性 "打印控制
LS_CTRLOP-NO_OPEN = 'X'.
LS_CTRLOP-NO_CLOSE = 'X'.
LS_CTRLOP-GETOTF = 'X'.
LS_CTRLOP-LANGU = '1'.
LS_CTRLOP-NO_DIALOG = 'X'. LS_COMPOP-TDNOPREV = 'X'. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZTEST001'
IMPORTING
FM_NAME = LV_FMNAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF. CALL FUNCTION 'SSF_OPEN'
EXPORTING
OUTPUT_OPTIONS = LS_COMPOP
CONTROL_PARAMETERS = LS_CTRLOP
USER_SETTINGS = 'X'
IMPORTING
JOB_OUTPUT_OPTIONS = LS_OPTIONS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF. CALL FUNCTION LV_FMNAME
EXPORTING
OUTPUT_OPTIONS = LS_COMPOP
CONTROL_PARAMETERS = LS_CTRLOP
USER_SETTINGS = ' '
IMPORTING
JOB_OUTPUT_INFO = LS_RETURN
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
ENDIF. CALL FUNCTION 'SSF_CLOSE'
IMPORTING
JOB_OUTPUT_INFO = LS_INFO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
APPEND LINES OF LS_INFO-OTFDATA TO LT_OTF.
ENDIF. CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
PDF_USERNAME = 'TIANCZ'
IMPORTING
BIN_FILESIZE = LV_SIZE
BIN_FILE = LV_BENFILE
TABLES
OTF = LT_OTF
LINES = LT_TLINE
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
ERR_BAD_OTF = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF. IF LV_BENFILE IS NOT INITIAL.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_BENFILE
IMPORTING
OUTPUT_LENGTH = LV_SIZE
TABLES
BINARY_TAB = LT_RECORD.
ENDIF. REFRESH:GT_RECLIST,GT_OBJTXT,GT_OBJBIN,GT_OBJPACK.
CLEAR: LS_DOC_CHNG. "将转换后的文件添加到邮件附件
APPEND LINES OF LT_RECORD TO GT_OBJBIN. "添加邮件正文
GT_OBJTXT = ''.
APPEND GT_OBJTXT. GT_OBJTXT = '邮件测试,包含一个PDF附件'.
APPEND GT_OBJTXT. "邮件正文行数
LV_LINES_TXT = LINES( GT_OBJTXT ). LV_OBJECT = '邮件测试'.
LV_PDFNAME = 'SM转换的PDF文件.pdf'. LS_DOC_CHNG-OBJ_LANGU = SY-LANGU.
LS_DOC_CHNG-OBJ_NAME = 'Email'.
LS_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
LS_DOC_CHNG-OBJ_DESCR = LV_OBJECT. "邮件主题
LS_DOC_CHNG-SENSITIVTY = 'F'.
LS_DOC_CHNG-DOC_SIZE = LV_LINES_TXT * 255 + LV_SIZE.
LS_DOC_CHNG-PRIORITY = '1'. CLEAR GT_OBJPACK-TRANSF_BIN.
GT_OBJPACK-HEAD_START = 1.
GT_OBJPACK-HEAD_NUM = 0.
GT_OBJPACK-BODY_START = 1.
GT_OBJPACK-BODY_NUM = LV_LINES_TXT.
GT_OBJPACK-DOC_TYPE = 'RAW'.
APPEND GT_OBJPACK. CLEAR:LV_LINES_BIN.
GT_OBJPACK-TRANSF_BIN = 'X'.
GT_OBJPACK-HEAD_START = 1.
GT_OBJPACK-HEAD_NUM = 1.
GT_OBJPACK-BODY_START = 1. LV_LINES_BIN = LINES( LT_RECORD ). GT_OBJPACK-DOC_SIZE = LV_SIZE .
GT_OBJPACK-BODY_NUM = LV_LINES_BIN.
GT_OBJPACK-DOC_TYPE = 'PDF'.
GT_OBJPACK-OBJ_NAME = 'PO'.
GT_OBJPACK-OBJ_DESCR = LV_PDFNAME.
APPEND GT_OBJPACK. GT_RECLIST-RECEIVER = 'XXXXX@163.com'."收件人邮箱
GT_RECLIST-REC_TYPE = 'U'.
APPEND GT_RECLIST. CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = LS_DOC_CHNG " 邮件属性
PUT_IN_OUTBOX = ''
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = GT_OBJPACK " 邮件内容
CONTENTS_BIN = GT_OBJBIN " 附件内容(二进制)
CONTENTS_TXT = GT_OBJTXT " 邮件内容(直接填入)
RECEIVERS = GT_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. IF SY-SUBRC = 0.
MESSAGE '发送成功!' TYPE 'S'.
WAIT UP TO 1 SECONDS.
SUBMIT RSCONN01 WITH MODE = 'INT'
WITH OUTPUT = ''
AND RETURN.
ELSE.
MESSAGE '发送失败!' TYPE 'S'.
ENDIF.
"-----------------------------------------@斌将军--------------------------------------------
邮箱发送SMARTFORMS 转 PDF附件的更多相关文章
- spring 实现邮箱发送
使用spring mail 实现的邮箱发送功能,包括附件的发送(附件发送要保证附件存在的路径是真实),使用maven集成jar包,通过spring mvc 实现前后台的调用,发送方使用的是163邮箱, ...
- 飘逸的python - 发送带各种类型附件的邮件
上一篇博文演示了如何发送简单的邮件,这一篇将演示如何发送各种类型的附件. 基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分.如果是附件,则add_h ...
- python - 发送带各种类型附件的邮件
如何发送各种类型的附件. 基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分.如果是附件,则add_header加入附件的声明. 在python中,M ...
- VC++ 利用MAPI实现在程序中调用默认的电子邮件程序发送EMAIL(可以添加附件)。
1.利用ShellExecute 可以条用默认邮件客户端,但不能发送带附件的邮件 mailto:用户账号@邮件服务器地址?subject=邮件主题&body=邮件正文 如:ShellExe ...
- java邮件发送 qq与163邮箱互发和qq和163邮箱发送其他邮箱实例
研究了近一天的时间,通过查阅相关资料,终于对java发送邮件的机制,原理有了一点点的理解,希望能够帮到大家! 1.首先要向你的项目里导入1个jar包:mail-1.4.4.jar即可(实现qq和163 ...
- java邮箱发送
一.为何要使用邮箱发送 相信大家在日常工作生活中少不了和邮件打交道,比如我们会用邮件进行信息交流,向上级汇报日常工作:邮件发送的原理是什么?邮件是如何发送的呢?本系列教程将会讲解邮件如何申请可用jav ...
- VC++ 使用ShellExecute函数调用邮箱客户端发送邮件(可以带附件)
之前写过一篇博文,通过MAPI实现调用邮箱客户端发送邮件带附件,当时对ShellExecute研究不深,以为ShellExecute不能带附件,因为项目需求原因(MAPI只能调用Foxmail和O ...
- [Xcode 实际操作]八、网络与多线程-(7)使用MessageUI框架,创建并发送一封带有附件的邮件
目录:[Swift]Xcode实际操作 本文将演示如何使用MessageUI框架,创建并发送一封带有附件的邮件. 使用邮件编辑视图控制器(MFMailComposeViewController)实现邮 ...
- SpringBoot中快速实现邮箱发送
前言 在许多企业级项目中,需要用到邮件发送的功能,如: 注册用户时需要邮箱发送验证 用户生日时发送邮件通知祝贺 发送邮件给用户等 创建工程导入依赖 <!-- 邮箱发送依赖 --> < ...
- python邮箱发送
普通发送邮件 使用email模块和stmplib模块,内容比较固定,配好了即可实现,代码如下 一.普通邮箱发送 # -*- coding:utf-8-*- import smtplib from em ...
随机推荐
- GPTs大受欢迎但问题多,企服软件厂商的AI Agent更被B端客户器重
GPTs大受欢迎但问题多,企服软件厂商的AI Agent更被B端客户器重 比尔盖茨预言智能体是下个平台,超自动化平台的AI Agent更靠谱? 以GPTs为代表的AI Agent只是玩具?揭秘真实可用 ...
- Mysql中的FOREIGN_KEY_CHECKS方法【外键约束作用】
一.命令行 首先FOREIGN_KEY_CHECKS方法的作用是用来启动和关闭外键约束的方法. 二.外键约束 即数据库中两个数据表之间的某个列建立的一种联系.MySQL通过外键约束的引入,可以使得数据 ...
- redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
大家如果对使用netty搞这些http请求什么的感兴趣的,可以参观我自己创建的这个项目. nanshaws/nettyWeb: 复习一下netty,并打算做一个web项目出来 (github.com) ...
- [GDOIpj221D] 小学生计数题
第四题 小学生计数题 提交文件: counting.cpp 输入文件: counting.in 输出文件: counting.out 时间空间限制: 1 秒, 256 MB 作为 GDOI 的组题人, ...
- Mybatis-Flex核心功能之@Id
1.是什么? 在 Entity 类中,MyBatis-Flex 是使用 @Id 注解来标识主键的 2.怎么玩? public @interface Id { /** * ID 生成策略,默认为 non ...
- MySQL查询语句执行顺序
注意:理论上select后面的字段别名是不可以在where group by having 等后面使用的,但是MySQL5.7做了相应的优化,group by having 后面可以使用
- pytorch学习笔记——训练时显存逐渐增加,几个epoch后out-of-memory
问题起因:笔者想把别人的torch的代码复制到笔者的代码框架下,从而引起的显存爆炸问题 该bug在困扰了笔者三天的情况下,和学长一同解决了该bug,故在此记录这次艰辛的debug之路. 尝试思路1:检 ...
- lower_bound() upper_bound()函数
转自http://blog.csdn.net/niushuai666/article/details/6734403 函数lower_bound()在first和last中的前闭后开区间进行二分查找, ...
- 文心一言 VS 讯飞星火 VS chatgpt (161)-- 算法导论13.1 1题
一.用go语言,按照图 13-1(a)的方式,画出在关键字集合(1,2,-,15)上高度为 3 的完全二叉搜索树.以三种不同方式向图中加入 NIL 叶结点并对各结点着色,使所得的红黑树的黑高分别为2. ...
- C++ Qt开发:Charts绘制各类图表详解
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TreeWid ...