在SAP中我们可以配置STMP邮件功能,可以通过SOST来查看邮件状态,在编码中可用FM SO_DOCUMENT_SEND_API1 、SO_NEW_DOCUMENT_ATT_SEND_API1通过编码的方式来发送邮件以及邮件附件。在定义附件表时用solisti1,其长度为Char255,实际中我们导出的每一行记录都会超出这个长度。对XLS格试的附件我们可以用Excel的分隔标签来解决这个问题,对于文字乱码我们可以在附件加charset=utf-16le解决此类问题。同样,也适用于其他类似的乱码问题。
constants: c_tab type c value cl_abap_char_utilities=>horizontal_tab,
c_cret type c value cl_abap_char_utilities=>cr_lf,
c_mimetype type char64
value 'APPLICATION/MSEXCEL;charset=utf-16le'.
data: v_xattach type xstring,
it_binary_attach type solix_tab.
*---------------------------------------------------------------------------------
* Convert the internal data to XString
*----------------------------------------------------------------------------------
data: lc_descr_ref type ref to cl_abap_structdescr,
lv_value type char128,
lv_temp type string,
lv_mid type string,
lv_tabix type sy-tabix.
field-symbols: <fs_intable> type any.
field-symbols: <intable_wa> type abap_compdescr.
loop at it_table.
lv_tabix = sy-tabix.
clear lv_temp.
lc_descr_ref ?= cl_abap_typedescr=>describe_by_data( it_table ).
loop at lc_descr_ref->components assigning <intable_wa>.
assign component sy-tabix of structure in_table to <fs_table>.
lv_value = <fs_table>.
condense lv_value.
if sy-tabix = 1.
lv_temp = lv_value.
continue.
endif.
concatenate lv_temp lv_value
into lv_temp separated by c_tab.
endloop.
concatenate lv_mid lv_temp c_cret into lv_mid.
endloop.
* Convert string to xstring type
* 'APPLICATION/MSEXCEL;charset=utf-16le'
call function 'SCMS_STRING_TO_XSTRING'
exporting
text = lv_mid
mimetype = c_mimetype
importing
buffer = v_xattach
exceptions
failed = 1
others = 2.
* Add the file header for utf-16le. .
if sy-subrc = 0.
concatenate cl_abap_char_utilities=>byte_order_mark_little
v_xattach into v_xattach in byte mode.
endif.
call function 'SCMS_XSTRING_TO_BINARY'
exporting
buffer = v_xattach
tables
binary_tab = it_binary_attach.
*---------------------------------------------------------------------------------
*Send Email
*----------------------------------------------------------------------------------
data: lv_title type so_obj_des, " Email Title
lv_email type adsmtp-smtp_addr, " Receiver
lv_attitle type char50. " Attachment Title
data: send_request type ref to cl_bcs,
document type ref to cl_document_bcs,
conlengths type so_obj_len,
html type table of w3html,
sender_id type ref to if_sender_bcs,
recipient type ref to if_recipient_bcs,
cc_recipient type ref to if_recipient_bcs,
sent_to_all type os_boolean,
bcs_exception type ref to cx_bcs,
bcs_message type string.
clear: lv_email,
lv_title,
html. " Email Body Content with html format
try.
* request email function
clear send_request.
send_request = cl_bcs=>create_persistent( ).
* Create the content of email
clear document .
document = cl_document_bcs=>create_document(
i_type = 'HTM'
i_text = html
i_length = conlengths
i_subject = lv_title ).
* Add Attachment
call method document->add_attachment
exporting
i_attachment_type = 'XLS'
i_attachment_subject = lv_attitle
i_att_content_hex = it_binary_attach.
* Add document to send request
call method send_request->set_document( document ).
clear recipient.
recipient =
cl_cam_address_bcs=>create_internet_address( lv_email ).
* Add recipient with its respective attributes to send request
call method send_request->add_recipient
exporting
i_recipient = recipient
i_express = 'X'.
* E-mail
call method send_request->set_status_attributes
exporting
i_requested_status = 'E'
i_status_mail = 'E'.
call method send_request->set_send_immediately( 'X' ).
* Send document
call method send_request->send(
exporting
i_with_error_screen = 'X'
receiving
result = sent_to_all ).
if sent_to_all = 'X' and sy-batch <> 'X'.
message 'Send Successfully' type 'I'.
endif.
commit work.
catch cx_bcs into bcs_exception.
bcs_message = bcs_exception->get_text( ).
if sy-batch <> 'X'.
message bcs_exception type 'E'.
else.
write: bcs_message.
endif.
exit.
endtry.
分享到:
相关推荐
在ASP.NET中实现邮件发送功能,主要依赖于System.Net.Mail命名空间中的类,这允许我们直接通过代码发送电子邮件。下面将详细介绍如何在ASP.NET中实现邮件发送功能。 首先,我们需要引入必要的命名空间,这通常是在...
.NET框架为开发者提供了丰富的工具和库来实现邮件发送功能,本教程将全面解析如何在.NET环境中构建邮件发送功能,同时附带邮件组件源码供学习参考。邮件发送是应用程序中常见的需求,例如发送注册确认邮件、系统通知...
.NET实现邮件发送功能的简单例子,所用语言为VB.NET,适合初学者下载使用。
Java 实现邮件发送功能是许多开发者在开发过程中需要用到的基础技术之一。邮件发送功能不仅可以用于邮箱验证,例如在用户注册时确认邮箱的有效性,还可以用于发送系统通知、定期报告或者客户服务等场景。本教程将...
在Java编程语言中,实现邮件发送功能主要依赖于JavaMail API。这个API提供了一系列的类和接口,使得开发者能够方便地构建电子邮件并将其发送到指定的SMTP(简单邮件传输协议)服务器。邮件发送功能不仅包括单个收件...
在Java编程环境中,为了实现邮件发送功能,开发者通常会依赖特定的库或jar包。"实现邮件发送功能jar包"正是这样一个工具,它允许程序员通过编写代码来发送邮件,包括QQ邮件在内的各种邮件服务。这个jar包包含了处理...
在当前的IT开发过程中,邮件发送功能是一个基础而广泛应用的功能,尤其在Web开发、在线服务以及日常的系统运维中。Grails作为一个全栈的、基于Groovy语言的Web应用开发框架,提供了一套较为简便的方式来集成和实现...
在本项目中,"SpringBoot整合ActiveMQ(消息中间件)实现邮件发送功能"是一个典型的企业级应用示例,它展示了如何将SpringBoot框架与Apache ActiveMQ集成,以实现基于消息队列的邮件发送服务。下面我们将详细探讨这个...
QQ邮件发送功能是一种常见的电子邮件通信方式,特别是在个人和小型企业中。通过QQ邮箱,用户可以利用SMTP(Simple Mail Transfer Protocol)服务发送邮件。SMTP是互联网上标准的邮件传输协议,它允许用户通过邮件...
本篇文章将深入探讨"SMailer"这一C++封装类,它是用来实现邮件发送功能的。 首先,`SMailer`类很可能是基于SMTP(Simple Mail Transfer Protocol)协议设计的。SMTP是互联网上用于发送电子邮件的标准协议,允许用户...
当我们需要实现与用户更直接、灵活的沟通时,邮件发送功能就显得尤为重要。本篇文章将详细探讨如何在PHP中实现邮件发送功能,以及在实际项目开发中的应用。 首先,我们需要了解PHP中的邮件发送原理。PHP的mail()...
在C#编程环境中,开发邮件发送功能是一项常见的任务,它涉及到使用SMTP(Simple Mail Transfer Protocol)服务来传递电子邮件。C#提供了内置的System.Net.Mail命名空间,为开发者提供了方便的邮件发送API。在这个...
Java邮件发送功能是一种常见的编程需求,特别是在企业级应用中,用于发送通知、确认信息或自动报告等。在Java中,我们可以使用JavaMail API来实现这个功能。JavaMail API是一个开源库,提供了丰富的类和接口,使得...
Java工程中的邮件发送功能是开发过程中常见的需求,它允许程序自动发送电子邮件,通常用于通知、报表、客户服务等场景。在Java中,我们可以使用JavaMail API来实现这一功能。本文将详细探讨如何在Java工程中实现邮件...
在C++编程中,实现邮件发送功能涉及到网络通信、数据编码和类的设计等多个知识点。这里,我们将深入探讨这个经典案例中的关键技术和原理。 首先,我们要理解C++如何处理网络通信。在C++中,最常用的是`socket`编程...
在.NET开发中,实现邮件发送功能是一项常见的任务,它能够帮助开发者进行自动化通知、客户服务、数据报告等。本文将提供一个全面的教程,包括邮件的基础理论、.NET类库的使用,以及一个自开发的邮件发送组件——...
在本文中,我们将深入探讨如何使用Spring框架实现邮件发送功能,特别关注SSM(Spring、Spring MVC、MyBatis)和JavaMail的整合。对于初学者来说,这是一个基础且易于理解的教程,只需要遵循简单的步骤就能成功实现...
在C#编程环境中,实现邮件发送功能是一项常见的需求,尤其对于开发企业级应用或系统集成时,例如自动通知、报表发送等场景。本资源提供的"邮件发送"源码,可以帮助开发者快速构建邮件发送功能,包括添加附件、删除...
综上所述,"C# 邮件发送功能(含多附件上传)"项目涵盖了C#编程、Windows Forms界面设计、SMTP邮件发送以及文件操作等多个核心知识点,对于学习和实践C#开发的初学者来说,是一个很好的学习资源。通过深入理解并实践...