ABAP 发送正文含图片邮件

背景:

        客户要求系统发送的邮件内容中含logo图片

解决:

        参考outlook中带图片的邮件,有两种形式,一种为url链接,需要点击下载才展示图片,一种为直接显示;如果使用ABAP发送该类型的邮件,则需要发送HTML格式邮件,参考HTML展示图片,有如下三种实现方式

实现方式一
实现效果

        需要点击下载图片才会展示对应内容,效果比较差

实现方式

        上传图片到MIME资源库,然后通过公开链接访问该图片

代码示例:

DATA: lt_content    TYPE soli_tab,   "Email Contentlv_subject    TYPE so_obj_des, "Email Subjectls_return     TYPE bapiret2,lv_sender     TYPE ad_smtpadr,ls_content    TYPE soli,lt_accept     TYPE bcsy_smtpa,lt_ccaccept   TYPE bcsy_smtpa,lv_accept     TYPE ad_smtpadr,lt_attachment TYPE  tfpattachments.DATA: lv_url  TYPE string VALUE 'https://XXX/sap/public/bc/abap/mime_demo/header.jpg?sap-client=260'.lv_accept = 'tutu@xie.com'.
APPEND lv_accept TO lt_accept.lv_subject = |测试图片|.lv_sender = 'fireworsk@xie.com'.CLEAR ls_content.
ls_content-line = |<img src="&URL&" alt="image" /><br/>|.
REPLACE '&URL&' WITH  lv_url INTO ls_content.
APPEND ls_content TO lt_content.CLEAR ls_content.
APPEND ls_content TO lt_content.ls_content-line = '您好,'.
APPEND ls_content TO lt_content.*--------------------------------------------------------------------*
" 邮件发送
*--------------------------------------------------------------------*
zcl_tool=>t_email(EXPORTINGpi_type        = 'HTM'pi_subject     = lv_subjectpi_sender      = lv_senderpi_sender_name = '测试'pt_accept      = lt_acceptpt_ccaccept    = lt_ccacceptpt_content     = lt_contentpt_attachment  = lt_attachmentIMPORTINGps_return   = ls_return
).
实现方式二
实现效果

该实现方式在outlook中如上图,但是在移动端可能会出现图片附件或者图片未加载图标。

代码示例
DATA: lt_content    TYPE soli_tab,   "Email Contentlv_subject    TYPE so_obj_des, "Email Subjectls_return     TYPE bapiret2,lv_sender     TYPE ad_smtpadr,ls_content    TYPE soli,lt_accept     TYPE bcsy_smtpa,lt_ccaccept   TYPE bcsy_smtpa,lv_accept     TYPE ad_smtpadr,lt_attachment TYPE  tfpattachments.lv_accept = 'tutu@xie.com'.
APPEND lv_accept TO lt_accept.lv_subject = |测试图片|.lv_sender = 'fireworsk@xie.com'.CLEAR ls_content.
ls_content-line = |<img src="cid:logo.jpg" alt="image" /><br/>|.
APPEND ls_content TO lt_content.CLEAR ls_content.
APPEND ls_content TO lt_content.ls_content-line = '您好,'.
APPEND ls_content TO lt_content.cl_mime_repository_api=>get_api( )->get( EXPORTING i_url = `/sap/public/ydemo/header.jpg` IMPORTING e_content = DATA(lv_imgx) ).lt_attachment = VALUE #( ( filename = 'logo'  mimetype = 'jpg' data = lv_imgx ) ).*--------------------------------------------------------------------*
" 邮件发送
*--------------------------------------------------------------------*
zcl_tool=>t_email(EXPORTINGpi_type        = 'HTM'pi_subject     = lv_subjectpi_sender      = lv_senderpi_sender_name = '测试'pt_accept      = lt_acceptpt_ccaccept    = lt_ccacceptpt_content     = lt_contentpt_attachment  = lt_attachmentIMPORTINGps_return   = ls_return
).
实现方式三
实现效果

outlook中展示和实现方式二一致,该方式为移动端和PC端均合适的实现方式

代码示例

DATA: lt_content         TYPE soli_tab,ls_content         TYPE soli,lt_attach_header   TYPE soli_tab,ls_attach_header   TYPE soli,lt_att_content_hex TYPE solix_tab,lv_outlength       TYPE i,lv_attch_size      TYPE so_obj_len,lv_content_size    TYPE so_obj_len,lv_send_return     TYPE os_boolean.DATA: lo_send     TYPE REF TO cl_bcs,lo_document TYPE REF TO cl_document_bcs,lo_sender   TYPE REF TO cl_cam_address_bcs,lo_accept   TYPE REF TO cl_cam_address_bcs,lo_ccaccept TYPE REF TO cl_cam_address_bcs,lo_sap_user TYPE REF TO cl_sapuser_bcs,lo_bcs      TYPE REF TO cx_bcs.DATA: lv_subject      TYPE so_obj_des,lv_sender        TYPE adr6-smtp_addr,lv_address_name TYPE adr6-smtp_addr.DATA:lo_cx_send_req_bcs TYPE REF TO cx_send_req_bcs,lo_cx_address_bcs  TYPE REF TO cx_address_bcs.DATA: lv_accept  TYPE ad_smtpadr,lv_message TYPE bapiret2-message.DATA: ls_attachment TYPE sfpattachments,lv_doctype    TYPE so_obj_tp,lv_attsubject TYPE so_obj_des.DATA: lo_mime TYPE REF TO cl_gbt_multirelated_service.lv_subject = |测试图片|.lv_sender       = 'tutu@xie.com'.
lv_address_name = '测试'.lv_accept = 'fireworsk@xie.com'.CLEAR ls_content.
ls_content-line = |<img src="cid:logo.jpg" alt="image" /><br/>|.
APPEND ls_content TO lt_content.CLEAR ls_content.
APPEND ls_content TO lt_content.ls_content-line = '您好,'.
APPEND ls_content TO lt_content.CREATE OBJECT lo_mime.
cl_mime_repository_api=>get_api( )->get( EXPORTING i_url = `/sap/public/ydemo/header.jpg` IMPORTING e_content = DATA(lv_imgx) ).
DATA(lt_solix) = cl_bcs_convert=>xstring_to_solix( lv_imgx ).
DATA(lv_len)   = CONV so_obj_len( xstrlen( lv_imgx ) ).
CALL METHOD lo_mime->add_binary_partEXPORTINGcontent      = lt_solixfilename     = 'logo.jpg'extension    = 'jpg'content_type = 'image/jpg'length       = lv_lencontent_id   = 'logo.jpg'.CALL METHOD lo_mime->set_main_htmlEXPORTINGcontent = lt_content
*   filename    =
*   description =.*&------Create Send Request
TRY.CALL METHOD cl_bcs=>create_persistentRECEIVINGresult = lo_send.CATCH cx_send_req_bcs INTO lo_cx_send_req_bcs.ENDTRY.
IF lo_cx_send_req_bcs IS NOT INITIAL.lv_message = lo_cx_send_req_bcs->get_text( ).RETURN.
ENDIF.*&------Get The Sender Email Adress
TRY.CALL METHOD cl_cam_address_bcs=>create_internet_addressEXPORTINGi_address_string = lv_senderi_address_name   = lv_address_name
*       i_incl_sapuser   =RECEIVINGresult           = lo_sender.*&---------Set SenderCALL METHOD lo_send->set_senderEXPORTINGi_sender = lo_sender.CATCH cx_address_bcs INTO lo_cx_address_bcs.CATCH cx_send_req_bcs INTO lo_cx_send_req_bcs.
ENDTRY." Error Deal
IF lo_cx_address_bcs IS NOT INITIAL.lv_message = lo_cx_address_bcs->get_text( ).RETURN.
ENDIF.*&------Create Send Document Content
TRY.lo_document = cl_document_bcs=>create_from_multirelated(i_subject           = lv_subjecti_multirel_service  = lo_mime ).CATCH cx_document_bcs INTO lo_bcs.
ENDTRY.IF lo_bcs IS NOT INITIAL.lv_message = lo_bcs->get_text( ).RETURN.
ENDIF.*&------Set Send Document For Send Request
TRY.CALL METHOD lo_send->set_documentEXPORTINGi_document = lo_document.CATCH cx_send_req_bcs INTO lo_bcs.
ENDTRY.
IF lo_bcs IS NOT INITIAL.lv_message = lo_bcs->get_text( ).RETURN.
ENDIF.*&------Add Accept For Email
TRY.CLEAR lo_accept.CALL METHOD cl_cam_address_bcs=>create_internet_addressEXPORTINGi_address_string = lv_accept
*       i_address_name   =
*       i_incl_sapuser   =RECEIVINGresult           = lo_accept.CALL METHOD lo_send->add_recipientEXPORTINGi_recipient  = lo_accepti_express    = 'X'i_copy       = ''i_blind_copy = ''i_no_forward = ''.CATCH cx_send_req_bcs INTO lo_bcs.lv_message = lo_bcs->get_text( ).CATCH cx_address_bcs INTO lo_bcs.lv_message = lo_bcs->get_text( ).
ENDTRY.TRY.CALL METHOD lo_send->set_send_immediatelyEXPORTINGi_send_immediately = 'X'.CATCH cx_send_req_bcs INTO lo_bcs.lv_message = lo_bcs->get_text( ).RETURN.
ENDTRY.*&------Send Email
TRY.CALL METHOD lo_send->sendEXPORTINGi_with_error_screen = spaceRECEIVINGresult              = lv_send_return.CATCH cx_send_req_bcs INTO lo_bcs.lv_message = lo_bcs->get_text( ).RETURN.
ENDTRY.COMMIT WORK AND WAIT.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【密码学】RSA公钥加密算法

文章目录 RSA定义RSA加密与解密加密解密 生成密钥对一个例子密钥对生成加密解密 对RSA的攻击通过密文来求得明文通过暴力破解来找出D通过E和N求出D对N进行质因数分解通过推测p和q进行攻击 中间人攻击 一些思考公钥密码比对称密码的机密性更高&#xff1f;对称密码会消失&#x…

SQL使用join查询方式找出没有分类的电影id以及名称

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 现有电影信息…

分库分表真的适合你的系统吗?

曾几何时&#xff0c;“并发高就分库&#xff0c;数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问&#xff0c;博主喜欢写&#xff0c;候选人也喜欢背&#xff0c;似乎已经形成了一个闭环。 但你有没有思考过&#xff0c;分库分表真的适合你的系统吗&am…

QCustomPlot+ vs2022+ qt

零、printSupport 步骤一&#xff1a;下载QCustomPlot 访问QCustomPlot的官网 QCustomPlot 下载最新版本的源代码。 步骤二&#xff1a;配置项目 创建新的Qt项目&#xff1a; 打开VS2022&#xff0c;创建一个新的Qt Widgets Application项目。 将QCustomPlot源代码添加到项目…

场景管理分析平台介绍

在数字化浪潮的推动下&#xff0c;数据已成为企业决策的重要依据。特别是在智能驾驶、虚拟现实和物联网等领域&#xff0c;场景数据的高效管理和利用至关重要。在智能驾驶领域面对海量的场景数据&#xff0c;如何高效处理、精准分析&#xff0c;并将其转化为有价值的决策支持&a…

第一次作业

作业1 1.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head&…

玩转Easysearch语法

Elasticsearch 是一个基于Apache Lucene的开源分布式搜索和分析引擎&#xff0c;广泛应用于全文搜索、结构化搜索、分析等多种场景。 Easysearch 作为Elasticsearch 的国产化替代方案&#xff0c;不仅保持了与原生Elasticsearch 的高度兼容性&#xff0c;还在功能、性能、稳定性…

Maven 分模块设计与开发 继承

介绍 在 Maven 中进行分模块设计&#xff08;multi-module project&#xff09;&#xff0c;可以帮助将一个大型项目分解为更小、更易管理的模块。这种设计方式有助于提高项目的可维护性、复用性和团队协作效率。 继承关系 目录结构 引入父Maven 父坐标 在子项目中引入父亲…

第一百四十五节 Java数据类型教程 - Java字符串类型

Java数据类型教程 - Java字符串类型 零个或多个字符的序列称为字符串。 在Java程序中&#xff0c;字符串由java.lang.String类的对象表示。 String类是不可变的。 String对象的内容在创建后无法修改。 String类有两个伴随类&#xff0c;java.lang.StringBuilder和java.lang.…

python-开关灯(赛氪OJ)

[题目描述] 假设有 N 盏灯&#xff08;N 为不大于 5000 的正整数&#xff09;&#xff0c;从 1 到到 N 按顺序依次编号&#xff0c;初始时全部处于开启状态&#xff1b;第一个人&#xff08; 1 号&#xff09;将灯全部关闭&#xff0c;第二个人&#xff08; 2 号&#xff09;将…

海睿思问数(TableGPT):开创企业新一代指标应用模式

1 指标建设对企业经营管理数字化的价值分析 指标是将海量数据中关键信息提炼和挖掘出来&#xff0c;以数据为载体展示企业经营管理和分析中的统计量。它通过分析数据&#xff0c;形成一个具有度量值的汇总结果&#xff0c;使得业务状态可以被描述、量化和分解。指标通常由度量…

竞赛选题 协同过滤电影推荐系统

文章目录 1 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …

2024/07/05

1、梳理笔记 2、课堂习题 1、循环输入一个5位数&#xff0c;判断它是不是回文数。当输入0时循环结束。 即12321是回文数&#xff0c;个位与万位相同&#xff0c;十位与千位相同。 #include<stdio.h> int main(int argc, char const *argv[]) {while(1){int num0;printf(…

绿色金融相关数据合集(2007-2024年 具体看数据类型)

数据类型&#xff1a; 1.绿色债券数据&#xff1a;2014-2023 2.绿色信贷相关数据&#xff1a;2007-2022 3.全国各省及地级市绿色金融指数&#xff1a;1990-2022 4.碳排放权交易明细数据&#xff1a;2013-2024 5.绿色金融试点DID数据&#xff1a;2010-2023 数据来源&#…

【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)

文章目录 定义简单工厂模式案例 | 代码Phone顶层接口设计Meizu品牌类Xiaomi品牌类PhoneFactory工厂类Customer 消费者类 工厂方法模式案例 | 代码PhoneFactory工厂类 Java高级特性---工厂模式与反射的高阶玩法方案&#xff1a;反射工厂模式 总结 其实工厂模式就是用一个代理类帮…

万界星空科技机械加工行业MES解决方案

机械加工行业作为制造业的重要组成部分&#xff0c;面临着生产效率、成本控制和产品质量提升等多重挑战。为了应对这些挑战&#xff0c;引入并实施制造执行系统&#xff08;MES&#xff09;成为了行业的必然选择。本文将详细介绍一种针对机械加工行业的MES解决方案&#xff0c;…

用MySQL+node+vue做一个学生信息管理系统(二):创建MySQL数据表、创建HTML用户列表页面

MySQL代码 CREATE DATABASE students;USE students;CREATE TABLE student( id INT COMMENT 学号, name VARCHAR(32) COMMENT 姓名, sex VARCHAR(8) COMMENT 性别, class VARCHAR(64) COMMENT 班级 )SHOW TABLES;下面介绍一下Vue框架的element-ui的使用方法&#xff0c;这里就不…

go 为什么是抢占式调度

GMP 模型 gmp模型是 golang 中用于调度管理 goroutine 的调度器。 调度器的发展史 在 Go 语言中&#xff0c;Goroutine 早期是没有设计成抢占式的&#xff0c;早期 Goroutine 只有读写、主动让出、锁等操作时才会触发调度切换。 这样有一个严重的问题&#xff0c;就是垃圾回…

鸿蒙笔记导航栏,路由,还有axios

1.导航组件 导航栏位置可以调整&#xff0c;导航栏位置 Entry Component struct t1 {build() {Tabs(){TabContent() {Text(qwer)}.tabBar("首页")TabContent() {Text(发现内容)}.tabBar(发现)TabContent() {Text(我的内容)}.tabBar("我的")}// 做平板适配…

【Springer出版 | EI稳定检索】第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024,7月19-21)

由浙江工业大学主办&#xff0c;第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024) 将于2024年7月19-21日在浙江杭州召开。 会议旨在为从事物联网、人工智能与机械自动化的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学…