本文主要介绍基于Python语法,使用RPA编辑器编写发送邮件的流程,将文本信息或者附件按设定好的发件箱和收件箱进行邮件传输。
场景简介
使用RPA获取到数据、下载好对应文件后,有可能遇到需要发送邮件的场景,需要通过邮件的形式发送固定格式的正文及附件内容,此时可以继续在RPA中编写发送邮件相关操作的流程,使得整个自动化流程完整连贯地执行。
关键代码
发送邮件仅需使用Python内置库,不涉及第三方包,登录进入RPA编辑器主界面,参考以下代码,按需更改参数即可。
from rpa.core import *
from rpa.utils import *
import rpa4 as rpa # 使用V4引擎
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.application import MIMEApplication
import random
# 使用SMTP服务需要获取SMTP授权码,
def test():
sender = "发件人邮箱@xx.com"
receiver1 = "收件人邮箱1@xx.com"
receiver2 = "收件人邮箱2@xx.com"
# 构造邮件类,输入关键的发件人和收件人信息
test = Mail("smtp.qq.com",sender,[receiver1,receiver2])
# 为邮件实例设定“SMTP”授权码,对应授权码可以在邮箱提供方对应设置页面获取
test.password = "xxxx"
# 创建邮件正文文本,邮件正文使用Html进行编辑,方便插入表格及字体样式
text = test.create_html_table([["标题1","标题2","标题3"],[1,2,3]])
text = "<h1>邮件发送测试</h1><p>此邮件发送自python</p>"+text
# 指定邮件标题
title = "测试邮件发送功能"
# 指定附件绝对路径
file_path1 = r"D:\综合归档\03.测试代码\测试用例\CMS信息录入测试.xlsx"
file_path2 = r"D:\综合归档\03.测试代码\测试用例\CMS信息录入测试.xlsx"
file_paths = {"附件1.xlsx":file_path1,"附件2.xlsx":file_path2}
# 收件人称谓
receivers_alias = '尊敬的xxx'
# 将收件人称谓、邮件标题、正文、附件路径写入到邮件类中
msg = test.write_mail(receivers_alias,title,text,file_paths)
# 发送邮件
test.send_mail(msg)
# 邮件处理类
class Mail(object):
"""
邮件类工具,主要用于处理发邮件等操作,支持向正文中插入表格、文本、图片等形式
1.构造方法中,需要输入smtp服务器名,发件人地址,收件人地址列表
2.生成实例后,需要给实例的password赋值(即发件人smtp密码)
3.write_mail方法需要传入参数收件人别名(多个收件人会用同一个名字),邮件主题,html文本,附件路径(字典,附件名:附件绝对路径)
4.send_mail方法需要传入参数msg,即write_mail方法的返回值。
5.提供create_html_table工具方法,传入二维列表,自动生成html表格,可以作为html文本写到邮件正文中
"""
# 初始化内容,smtp服务器,发件人地址,发件人smtp密码(初始为空),收件人地址列表
def __init__(self, smtp_server:str, sender:str, receivers:list)->None:
self.smtp_server = smtp_server
self.sender = sender
self.password = ""
self.receivers = receivers
pass
# 根据二维列表生成对应的HTML表格
def create_html_table(self,data):
"""
根据二维列表生成对应的html文本\t
Args:\t
data(list<list>):二维列表\t
Returns:\t
html_table(str):html字符串\t
"""
html_table = "<table border=1>"
for row in data:
tr = "<tr>"
for col in row:
td = "<td>"+str(col)+"</td>"
tr += td
tr += "</tr>"
html_table += tr
html_table += "</table>"
return html_table
# 填写邮件内容
def write_mail(self,receivers_alias,title,html_text,file_paths):
"""
编写邮件内容,传入文件名\t
Args:\t
receivers_alias(str):收件人称谓\t
title(str):邮件主题\t
html_text(str):HTML文本,可以以此生成表格、链接、图片等信息\t
file_paths(dict<str:str>):需要发送的附件的完整路径字典,形如文件名(需带后缀):文件绝对路径\t
Returns:\t
msg:email模块的MIMEMultipart对象,可以带附件,带HTML文本\t
"""
msg = MIMEMultipart()
# 头信息
msg['From'] = Header(self.sender)
# 这里的收件人是指头信息中的收件人称呼,多个收件邮箱的情况下,收件方只能看到统一的称呼,看不到发送给了其他的谁
msg['To'] = Header(receivers_alias)
msg['Subject'] = Header(title)
html_message = MIMEText(html_text, 'html', 'utf-8')
msg.attach(html_message)
# 添加多个附件
if len(file_paths)>0:
for key,value in file_paths.items():
with open(value,'rb') as attach_file:
file_content = attach_file.read()
file_part = MIMEApplication(file_content)
file_part.add_header('Content-Disposition', 'attachment', filename=key)
msg.attach(file_part)
return msg
# 发送邮件
def send_mail(self,msg):
"""
将给定的msg作为邮件内容向指定的收件人地址列表发送\t
Args:\t
msg(MIMEMultipart):邮件正文对象\t
Returns:pass\t
"""
try:
# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL(self.smtp_server)
server.connect(self.smtp_server,465)
# 登录发信邮箱
server.login(self.sender, self.password)
# 发送邮件
server.sendmail(self.sender, self.receivers, msg.as_string())
# 关闭服务器
server.quit()
print('success')
except smtplib.SMTPException as e:
print('error',e)
pass
文档内容是否对您有帮助?