邮件发送程序
- 格式:docx
- 大小:203.03 KB
- 文档页数:10
利用Excel批量快速发送电子邮件,分两步:1. 准备待发送的数据:a.) 打开Excel,新建Book1.xlsxb.) 填入下面的内容,第一列:接收人,第二列:邮件标题,第三列:正文,第四列:附件路径注意:附件路径中可以有中文,但是不能有空格这里你可以写更多内容,每一行作为一封邮件发出。
注意:邮件正文是黑白文本内容,不支持加粗、字体颜色等。
(如果你需要支持彩色的邮件,后面将会给出解决办法)2. 编写宏发送邮件a.) Alt + F11 打开宏编辑器,菜单中选:插入->模块b.) 将下面的代码粘贴到模块代码编辑器中:‘代码list-1Public Declare Function SetTimer Lib "user32" _(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As LongPublic Declare Function KillTimer Lib "user32" _(ByVal hwnd As Long, ByVal nIDEvent As Long) As LongPrivate Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Function WinProcA(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal SysTime As Long) As LongKillTimer 0, idEventDoEventsSleep 100'使用Alt+S发送邮件,这是本文的关键之处,免安全提示自动发送邮件全靠它了Application.SendKeys "%s"End Function' 发送单个邮件的子程序Sub SendMail(ByVal to_who As String, ByVal subject As String, ByVal body As String, ByVal attachement As String)Dim objOL As ObjectDim itmNewMail As Object'引用Microsoft Outlook 对象Set objOL = CreateObject("Outlook.Application")Set itmNewMail = objOL.CreateItem(olMailItem)With itmNewMail.subject = subject '主旨.body = body '正文本文.To = to_who '收件者.Attachments.Add attachement '附件,如果你不需要发送附件,可以把这一句删掉即可,Excel中的第四列留空,不能删哦.Display '启动Outlook发送窗口SetTimer 0, 0, 0, AddressOf WinProcAEnd WithSet objOL = NothingSet itmNewMail = NothingEnd Sub'批量发送邮件Sub BatchSendMail()Dim rowCount, endRowNoendRowNo = Cells(1, 1).CurrentRegion.Rows.Count'逐行发送邮件For rowCount = 1 To endRowNoSendMail Cells(rowCount, 1), Cells(rowCount, 2), Cells(rowCount, 3), Cells(rowCount, 4)NextEnd Sub最终代码编辑器中的效果如下图:i为了正确执行代码,你还需要在菜单中选择:工具->引用中的Microseft Outlook X.0 Object Library 勾选上(X.0是版本号,不同机器可能不一样)c.) 粘贴好代码、勾选上上面的东东后可以发送邮件了,点击上图A红圈所示的绿色三角按钮,会弹出下图所示的对话框,点运行,就开始批量发送邮件了。
python发送各类邮件的主要方法已有1人参与python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点。
一、相关模块介绍发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍:1、smtplib模块smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行相关操作(如:登陆、发送邮件)。
所有参数都是可选的。
host:smtp服务器主机名port:smtp服务的端口,默认是25;如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。
smtplib模块还提供了SMTP_SSL类和LMTP类,对它们的操作与SMTP基本一致。
smtplib.SMTP提供的方法:SMTP.set_debuglevel(level):设置是否为调试模式。
默认为False,即非调试模式,表示不输出任何调试信息。
SMTP.connect([host[, port]]):连接到指定的smtp服务器。
参数分别表示smpt主机和端口。
注意: 也可以在host参数中指定端口号(如::25),这样就没必要给出port参数。
SMTP.docmd(cmd[, argstring]):向smtp服务器发送指令。
可选参数argstring表示指令的参数。
SMTP.helo([hostname]) :使用"helo"指令向服务器确认身份。
相当于告诉smtp服务器“我是谁”。
SMTP.has_extn(name):判断指定名称在服务器邮件列表中是否存在。
出于安全考虑,smtp服务器往往屏蔽了该指令。
SMTP.verify(address) :判断指定邮件地址是否在服务器中存在。
5分钟!教你⽤C语⾔发送邮件:附送源码+教学!前⾔相信⼤家都有过被C语⾔⽹络编程所⽀配的恐惧吧?其实,⼩编在刚刚学习这⽅⾯的知识的时候也有这样的感受,并且所有的资料都是从⽹络寻找的,但是,现在你们不同了,因为这篇⽂章将会带你们⼀步步地,写出你们第⼀个使⽤SMTP协议来发送邮件的C语⾔程序,这个和⼩编刚学习的时候可不同呀!⽂章末尾有总结,这是精髓哦⾔归正传,代码写起来!⾸先,这篇⽂章不是讲理论的⽂章,⽽是让你们动⼿实践的⽂章,⽬的在于让各位看官能动⼿写出能编译成功、能成功运⾏、能成功发送邮件的C语⾔程序,这篇⽂章不会涉及太多的理论知识,并且代码也没有经过特别的封装,旨在让各位看官能编写出这个程序,所以看官跟着⽂章动⼿做就可以了。
第⼀步⾸先,引⽤stdio.h、winsock2.h、windows.h(可有可⽆,下⽂讲到),注意,这⾥有⼀个地⽅有很多⼈会出错,如果你要引⽤windows.h的话,就得在引⽤winsock2.h之后才能引⽤windows.h,否则会出现“未定义标识符”的情况,如下图↓这是正确写法错误写法按照错误写法进⾏调试的话,会出现以下错误提⽰↓错误提⽰然后我们再声明⼀个变量和两个函数,变量是⽤来储存服务器返回的数据的,两个函数分别是⽤来创建套接字(socket)和接收服务器返回数据的,这⾥我们声明了⼀个字符型数组,数组⼤⼩我们⽤BUFSIZ代替,这⾥有⼈就会问了:“为什么⽤BUFSIZ作为数组⼤⼩呢?”,答案是:“减轻系统负担”,不理解?没关系,先把代码运⾏起来,然后再慢慢研究。
除了以上步骤,我们还需要写⼊以下两⾏代码,加⼊两个库⽂件,其中User32.lib是可有可⽆的,加⼊User32.lib只是为了能够调⽤MessageBox()函数⽽已。
到这⾥,我们的第⼀步完成了!接下来是第⼆步第⼆步初始化前期的准备⼯作做好了,我们现在开始编写我们要⽤到的函数——socket_connect_server(void),从字⾯的意思上来看,⼤家都应该明⽩这个函数是⼲嘛的吧?没错,它是⽤来创建套接字并连接SMTP服务器的。
实验三 SMTP 邮件发送程序一、实验目的电子邮件 E-Mail 是 Internet 中广泛使用的服务之一,在 Internet 电子邮件系 统中,邮件服务器之间通信采用 SMTP 协议。
理解 SMTP 协议的工作原理 掌握 SMTP 邮件发送程序的编程方法 掌握邮件消息的格式二、实验内容利用 WinSock 编程接口编写 SMTP 邮件发送程序,在用户界面中给出必要 的邮件信息:收件人、标题、内容等,通过 SMTP 协议将邮件发送给指定的接 收人。
通过给自己的邮箱发送邮件的方式,可以登录自己的邮箱,验证发送程序 运行是否正确。
三、实验环境程序运行环境为以太网, 采用 TCP/IP 协议栈, 网络操作系统为 Windows 8, 具有 Internet 连接能力。
程序开发环境为 vs2012。
四、程序设计与实现步骤 1 需求分析 SMTP 发送程序功能为: (1) 具有编写简单文本邮件的界面,包括:收件人、发件人、发送日期、邮件 标题和邮件文本内容。
(2) 具有将界面内容封装成 RFC822 邮件消息格式的能力。
RFC822(Request For Comment)邮件消息由信封、首部、正文三部分组成。
(3) 将邮件消息通过 SMTP 协议发送给目地邮箱。
(4) 登录目的邮箱,检测发送结果是否正确。
步骤 2 SMTP 发送程序开发 用 Visual C++编写 SMTP 发送程序,利用 WinSock 编程接口实现 SMTP 通 信。
发送程序首先显示用户界面使用户可以编辑邮件。
点击发送按钮后,向目标服务器的 TCP 25 号端口建立 TCP 连接,采用 WinSock 编程方式实现。
然后发送 SMTP 命令, DATA 命令后发送邮件消息。
在 SMTP 常用命令如下:命令 HELO/EHLO MAIL FROM RCPT TO 描述 向服务器标识用户身份 开始一个邮递处理,指出邮件发送者 指出邮件接收者DATA RSET SEND QUIT接收程序将 DATA 命令后面的数据作为邮件内容处理,以.结束 中止邮件发送处理 处理邮件发送 结束会话 最后以单独的“.”行作为结束,发送 QUIT 命令,释放 TCP 连接。
C++程序中支持SMTP邮件发送的解决方案荟萃(1)jwSMTPC++开发,支持Linux,BSD,Windows,支持附件、多个收件人、抄送密送、MX记录查询或直接发送到SMTP服务器。
支持LOGIN和PLAIN认证,支持Html和纯文本格式。
到2007年后,该项目未做更新。
/projects/jwsmtp/(2)CPJNSMTPConnection v2.92这是一个基于MFC的SMTP协议封装类。
支持附件发送、多个收件人、抄送密送,支持HTML邮件。
支持通过SSL发送邮件,支持Gmail。
支持多种认证协议 "AUTH CRAM-MD5", "AUTH LOGIN", "AUTH PLAIN" 和 "AUTH NTLM"。
支持DSN,MDN,STARTTLSCPJNSMTPConnection需要VC 2005及以上版本编译。
/smtp.html(3)POCO C++库POCO C++库提供了网络、加密、数据库、内存管理、文件系统、多线程支持一系列封装,在网络部分,提供了SMTP支持。
/(4)Email C++库这个库功能非常强大,支持POP3和SMTP,除了一般的附件、抄送密送、HTML邮件外,还支持HTTP代理、SOCKS4,SOCKS5代理。
但该库不开源,需要收费,价格在100美元左右。
/email-library.asp(5)支持SSL/TLS的SMTP封装类/KB/IP/smtp_ssl.aspx(6)一个简单的SMTP封装类/KB/IP/CSmtp.aspx在VC6下可以编译。
C# 发送邮件源码最近有用户提出了一个新的需求,希望公司的网站系统能够自动发邮件到相关人员的邮箱中,通过实践做出了程序,通过下面的代码分享给大家。
发送邮件使用VS中的.Mail类。
using .Mail;1、定义公共变量:#region邮件public static string senderServerIp = "";public static string fromMailAddress = "test@";public static string mailUsername =" ";public static string mailPassword ="..";public static string mailPort = ""; //内容根据实际情况而定#endregion2、新增类using System;using System.Collections.Generic;using System.Text;using System.IO;using .Mail;using .Mime;namespace KRP.ClsCarInfo{public class MyEmail{private MailMessage mMailMessage; //主要处理发送邮件的内容(如:收发人地址、标题、主体、图片等等)private SmtpClient mSmtpClient; //主要处理用smtp方式发送此邮件的配置信息(如:邮件服务器、发送端口号、验证方式等等)private int mSenderPort; //发送邮件所用的端口号(htmp协议默认为)private string mSenderServerHost; //发件箱的邮件服务器地址(IP形式或字符串形式均可)private string mSenderPassword; //发件箱的密码private string mSenderUsername; //发件箱的用户名(即@符号前面的字符串,例如:hello@,用户名为:hello)private bool mEnableSsl; //是否对邮件内容进行socket层加密传输private bool mEnablePwdAuthentication; //是否对发件人邮箱进行密码验证///<summary>///构造函数///</summary>///<param name="server">发件箱的邮件服务器地址</param>///<param name="toMail">收件人地址(可以是多个收件人,程序中是以“;"进行区分的)</param> ///<param name="fromMail">发件人地址</param>///<param name="subject">邮件标题</param>///<param name="emailBody">邮件内容(可以以html格式进行设计)</param>///<param name="username">发件箱的用户名(即@符号前面的字符串,例如:hello@,用户名为:hello)</param>///<param name="password">发件人邮箱密码</param>///<param name="port">发送邮件所用的端口号(htmp协议默认为)</param>///<param name="sslEnable">true表示对邮件内容进行socket层加密传输,false表示不加密</param>///<param name="pwdCheckEnable">true表示对发件人邮箱进行密码验证,false表示不对发件人邮箱进行密码验证</param>public MyEmail(string server, string toMail, string fromMail, string subject, string emailBody, string username, string password, string port, bool sslEnable, bool pwdCheckEnable) {try{mMailMessage = new MailMessage();mMailMessage.To.Add(toMail);mMailMessage.From = new MailAddress(fromMail);mMailMessage.Subject = subject;mMailMessage.Body = emailBody;mMailMessage.IsBodyHtml = true;mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;mMailMessage.Priority = MailPriority.Normal;this.mSenderServerHost = server;this.mSenderUsername = username;this.mSenderPassword = password;this.mSenderPort = Convert.ToInt32(port);this.mEnableSsl = sslEnable;this.mEnablePwdAuthentication = pwdCheckEnable;}catch (Exception ex){Console.WriteLine(ex.ToString());}}///<summary>///添加附件///</summary>///<param name="attachmentsPath">附件的路径集合,以分号分隔</param>public void AddAttachments(string attachmentsPath){try{string[] path = attachmentsPath.Split(';'); //以什么符号分隔可以自定义Attachment data;ContentDisposition disposition;for (int i = 0; i < path.Length; i++){data = new Attachment(path[i], MediaTypeNames.Application.Octet); disposition = data.ContentDisposition;disposition.CreationDate = File.GetCreationTime(path[i]);disposition.ModificationDate = File.GetLastWriteTime(path[i]);disposition.ReadDate = File.GetLastAccessTime(path[i]);mMailMessage.Attachments.Add(data);}}catch (Exception ex){Console.WriteLine(ex.ToString());}}///<summary>///邮件的发送///</summary>public void Send(){try{if (mMailMessage != null){mSmtpClient = new SmtpClient();//mSmtpClient.Host = "smtp." + mMailMessage.From.Host;mSmtpClient.Host = this.mSenderServerHost;mSmtpClient.Port = this.mSenderPort;eDefaultCredentials = false;mSmtpClient.EnableSsl = this.mEnableSsl;if (this.mEnablePwdAuthentication){workCredential nc = newworkCredential(this.mSenderUsername, this.mSenderPassword);//mSmtpClient.Credentials = newworkCredential(this.mSenderUsername, this.mSenderPassword);//NTLM: Secure Password Authentication in Microsoft Outlook Express mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM");}else{mSmtpClient.Credentials = newworkCredential(this.mSenderUsername, this.mSenderPassword);}mSmtpClient.DeliveryMethod = work; mSmtpClient.Send(mMailMessage);}}catch (Exception ex){Console.WriteLine(ex.ToString());}}}}3、 #region发送邮件public delegate void AsyncEventHandler( string_toMailAddress, string_Info);//string _toMailUser,string _Q_guid, string _Name,protected void SendMail( string _toMailAddress, string _Info){try{string senderServerIp = ClsConst.senderServerIp;string toMailAddress = _toMailAddress;string fromMailAddress = ClsConst.fromMailAddress;string subjectInfo = "ITSM提醒邮件";string bodyInfo = _Info;string mailUsername = ClsConst.mailUsername;string mailPassword = ClsConst.mailPassword;string mailPort = ClsConst.mailPort;MyEmail email = new MyEmail(senderServerIp, toMailAddress, fromMailAddress, subjectInfo, bodyInfo, mailUsername, mailPassword,mailPort, true, true);email.Send();}catch { }}#endregion4、在程序中调用就可以了。
开发一个简单的电子邮件客户端:实现收发邮件功能电子邮件客户端是一种用于收发电子邮件的应用程序或软件工具。
它通常具有用户界面,在其上用户可以编写、发送、接收、管理和存档电子邮件。
这些客户端可以在电脑、手机、平板电脑等设备上安装和使用。
在本文中,我将为您介绍如何开发一个简单的电子邮件客户端,实现收发邮件的基本功能。
这个客户端将使用简体中文编写,并提供齐全的用户界面和用户体验。
1.设计用户界面:首先,我们需要为电子邮件客户端设计一个用户界面。
界面应该简洁易用,并提供以下主要功能:-邮箱列表:显示用户的收件箱、发件箱、草稿箱、已发送等邮件类别。
-邮件列表:显示选定邮件类别中的邮件列表,包括发件人、主题、日期等信息。
-邮件预览:展示选定邮件的详细信息,包括发件人、主题、内容等。
-邮件撰写:用户可以在此处编写新的邮件,包括收件人、主题、内容等。
-邮件发送:用户可以点击发送按钮将邮件发送给收件人。
-邮件接收:客户端将定期检查服务器上是否有新邮件,并更新收件箱。
-邮件管理:用户可以对邮件进行管理操作,如删除、移动到其他文件夹等。
2.连接到邮件服务器:在开发电子邮件客户端之前,我们需要连接到一个邮件服务器。
可以选择使用现有的邮件服务器,如Gmail、Yahoo、163等,或者自己开发一个新的邮件服务器。
连接到邮件服务器需要使用远程通信协议,如POP3、IMAP、SMTP等。
- POP3(Post Office Protocol 3)是一种常用的电子邮件接收协议,用于从远程服务器接收邮件。
- IMAP(Internet Message Access Protocol)是另一种电子邮件接收协议,与POP3类似,但具有更强大的功能,如可以在多个设备上同步邮件、管理邮件夹等。
- SMTP(Simple Mail Transfer Protocol)是一种电子邮件发送协议,用于将邮件从客户端发送到服务器。
我们可以根据需求选择合适的协议,并使用相应的库或API连接到邮件服务器。
⽤outlook发送和接收电⼦邮件实验⼆使⽤Outlook Express发送和接收电⼦邮件⼀、实验⽬的1.掌握使⽤Outlook Express对邮件进⾏管理;2.掌握使⽤浏览器接收和发送电⼦邮件⽅法。
⼆、实验内容1.Outlook Express的启动和关闭(1)双击桌⾯上的Outlook Express或选择【开始】→【程序】→【Outlook Express】命令,稍等⽚刻,出现如图23-4所⽰的Outlook Express窗⼝;图23-4 Outlook Express窗⼝(2)观察Outlook Express窗⼝的布局,然后选择【⽂件】菜单的【退出】命令,关闭Outlook Express。
2.账号的设置:(1)启动Outlook Express,打开Outlook Express窗⼝,如图23-4所⽰;(2)单击窗⼝中的“⼯具”下拉菜单中的“账户”命令,打开“Internet 账号”对话框,如图23-5所⽰;图23-5 “Internet帐户”对话框(3)单击“邮件”按钮,打开“邮件”选项卡,如图23-6所⽰;图23-6 “邮件”选项卡(4)单击“添加”按钮,选择“邮件”选项,打开“Internet 连接向导”对话框,正确填⼊⾃⼰电⼦信箱⽤户的姓名(如c_center),如图23-7所⽰;图23-7 “Internet 连接向导”对话框(5)单击“下⼀步”按钮,填⼊电⼦邮件地址(如c_center@/doc/32e376f689eb172ded63b7fe.html ),如图23-8;图23-8(6)单击“下⼀步”按钮,分别填⼊在申请信箱时ISP提供的接收邮件服务器POP3加(/doc/32e376f689eb172ded63b7fe.html )和发送邮件服务器域名加(/doc/32e376f689eb172ded63b7fe.html ),如图37-9所⽰;图23-9 “Internet连接向导”(7)单击“下⼀步”按钮,出现“Internet Mail登录”对话框,如图37-10所⽰,输⼊申请信箱时的“⽤户名”和“密码”;图23-10“Internet连接向导”(8)单击“下⼀步”按钮,出现如图37-11所⽰的对话框,单击“完成”按钮返回到“邮件”选项卡,再单击“关闭”按钮,简单设置完成。
数据元素:代码:FUNCTION z_excel_send_mail.*"----------------------------------------------------------------------*"*"Local interface:*" IMPORTING*" REFERENCE(I_SUBJECT) TYPE SO_OBJ_DES OPTIONAL*" REFERENCE(I_MAILBODY) TYPE BCSY_TEXT OPTIONAL*" REFERENCE(I_ATTACHMENT_SUBJECT) TYPE SOOD-OBJDES OPTIONAL *" REFERENCE(I_ACK) TYPE CHAR1 DEFAULT SPACE*" REFERENCE(IT_FIELDCAT) TYPE SLIS_T_FIELDCAT_ALV OPTIONAL *" VALUE(I_ATTACHMENT_TYPE) TYPE SO_OBJ_TP DEFAULT 'xls'*" TABLES*" I_EMAIL_LIST STRUCTURE ZEMAIL_LIST*" I_DATA*" EXCEPTIONS*" ERROR*"----------------------------------------------------------------------* BCS dataDATA send_request TYPE REF TO cl_bcs.DATA body_length TYPE so_obj_len.DATA document TYPE REF TO cl_document_bcs.DATA recipient TYPE REF TO if_recipient_bcs.DATA: bcs_exception TYPE REF TO cx_bcs.DATA sent_to_all TYPE os_boolean.DATA: requested_status TYPE bcs_rqst VALUE 'N'.DATA: binary_content TYPE solix_tab.DATA: size TYPE so_obj_len.DATA: l_lines TYPE i.IF i_email_list[] IS INITIAL."邮件接收地址不能为空.MESSAGE e056(zmm_msg) RAISING error.ENDIF.* 创建EXCEL内容PERFORM create_content TABLES i_data USING it_fieldcatCHANGING binary_content size.* ------------ 调用 BCS 接口 ----------------------------------TRY.* ---------- 创建和发送请求 ----------------------send_request = cl_bcs=>create_persistent( ).IF i_ack = space.* 控制状态,如:送达到对方,对方读取CALL METHOD send_request->set_status_attributesEXPORTINGi_requested_status = requested_statusi_status_mail = 'N'.ENDIF."邮件标题和正文CLEAR l_lines.l_lines = LINES( i_mailbody[] ).body_length = l_lines * 255.* ---------- 创建内容 ----------------------------------------document = cl_document_bcs=>create_document(i_type = 'RAW'i_text = i_mailbody "邮件体,正文i_length = body_lengthi_subject = i_subject )."邮件标题"添加附件document->add_attachment(i_attachment_type = i_attachment_type "附件类型i_attachment_subject = i_attachment_subject "附件名称i_attachment_size = sizei_att_content_hex = binary_content ).* 添加邮件内容到发送请求send_request->set_document( document ).* ---------- 获取收件人地址 ----------------------LOOP AT i_email_list.recipient = cl_cam_address_bcs=>create_internet_address(i_address_string = i_email_list-smtp_addr ).* 添加收件人地址到发送请求中send_request->add_recipient( i_recipient = recipient ).ENDLOOP.* --------- 设置为快速发送方式--------------------------send_request->set_send_immediately( 'X' ).* ---------- 开始发送 ---------------------------------------sent_to_all = send_request->send( i_with_error_screen = 'X' ).IF sent_to_all = 'X'.MESSAGE s022(so)."提示邮件已发送ENDIF.* ---------- 提交作业 ----------------COMMIT WORK AND WAIT.* ------------------------------------------------------------------* * 异常处理* -------------------------------------------------------------------CATCH cx_bcs INTO bcs_exception."邮件发送错误,错误代码&1.MESSAGE e055(zmm_msg) WITH bcs_exception->error_type RAISING er ror.ENDTRY.ENDFUNCTION.******************************************************************----------------------------------------------------------------------** -->P_I_DATA text* -->P_IT_FIELDCAT text* <--P_BINARY_CONTENT text*----------------------------------------------------------------------*FORM create_content TABLES pt_dataUSING pt_fieldcat TYPE slis_t_fieldcat_ alvCHANGING pt_binary_content TYPE solix_tabp_size TYPE so_obj_len.FIELD-SYMBOLS: <f_fieldcat> TYPE slis_fieldcat_alv.FIELD-SYMBOLS: <f_line>,<f_field>.DATA l_string TYPE string.DATA l_str_line TYPE string.DATA l_value TYPE string.DATA l_size TYPE so_obj_len.LOOP AT pt_fieldcat ASSIGNING <f_fieldcat>.AT FIRST.l_string = <f_fieldcat>-seltext_l.CONTINUE.ENDAT.CONCATENATE l_string <f_fieldcat>-seltext_lINTO l_string SEPARATED BY c_tab.ENDLOOP.IF sy-subrc = 0.CONCATENATE l_string c_crlf INTO l_string.ENDIF.LOOP AT pt_data ASSIGNING <f_line>."每一行数据CLEAR: l_str_line.DO."每个字段CLEAR l_value.ASSIGN COMPONENT sy-indexOF STRUCTURE <f_line> TO <f_field>."每一个字段IF sy-subrc <> 0.EXIT.ELSE.l_value = <f_field>.ENDIF.IF sy-index = 1.l_str_line = l_value.ELSE.CONCATENATE l_str_line l_valueINTO l_str_line SEPARATED BY c_tab.ENDIF.ENDDO."一行的结束CONCATENATE l_string l_str_line c_crlf INTO l_string.ENDLOOP.* --------------------------------------------------------------* convert the text string into UTF-16LE binary data including* byte-order-mark. Mircosoft Excel prefers these settings* all this is done by new class cl_bcs_convert (see note 1151257) TRY.cl_bcs_convert=>string_to_solix(EXPORTINGiv_string = l_stringiv_codepage = '4103' "suitable for MS Excel, leave emptyiv_add_bom = 'X' "for other doc typesIMPORTINGet_solix = pt_binary_contentev_size = p_size ).CATCH cx_bcs.MESSAGE e445(so) RAISING error.ENDTRY.ENDFORM. " CREATE_CONTENT***************************************************************************** 调用函数FORM frm_send_mail.lv_subject = 'DMS虚拟汇款监控记录'.lv_attachment = 'DMS虚拟汇款监控记录'.lt_mailbody-line = '各位领导,同事:'.APPEND lt_mailbody.CLEAR lt_mailbody.lt_mailbody-line = ' 附件为SAP发送的虚拟汇款是否存在DMS没有返回状态的记录,请各位关注一下。