前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这个发邮件的工具,整整省了我半天的时间!

这个发邮件的工具,整整省了我半天的时间!

作者头像
Python编程爱好者
发布2022-09-22 11:40:27
2240
发布2022-09-22 11:40:27
举报

先扫一眼文章整体结构哈

  • 前言
  • 准备工作
  • 发送其他格式的邮件
    • 1. 发送 HTML 格式的邮件
    • 2. 发送带有附件的邮件
  • 结尾

Python自动批量发送邮件是一种什么体验呢?看下面娓娓道来、、、

前言

起因:这几天有很多同学要我给他们用邮件发送一些资料包过去,但是为了同学们隐私安全,防止被某某某骚扰,只能是一个人一个人单独发送。这样可能耗费半天的时间,还是写一个小工具出来吧!

一个简单的程序节约半天时间。这样就很完美了,分享出来哈哈 🤣😆

准备工作

很重要很重要很重要的准备工作,带你进入代码发送邮件的氛围!

其实在这之前,就看过前面小哥哥把每个订单号都粘贴到邮件里,然后再给一个收件人的联系邮箱,如此熟练的操作,整整做了一个上午,因为需要给每个收件人单独发送,我心里有种说不出来的感觉 ... 这就像刚刚工作那会儿看着旁边跟我一样的实习生在重复插入sql一样,他居然不知道列编辑(这...与此文代码无关),然而要一行一行一个字一个字的敲进去一样的感受。 如果有不知道的同学也可以私信我,几分钟的事情可能对于不知道这个技巧的同学需要几个小时才能完成

来来来!进行正题!!!!!

自动化发邮件之前,首先需要用到的两个重要的 Python 模块:smtplib 和 email

smtplib模块主要用来建立服务器链接、服务器断开的工作 email模块主要负责邮件的构建,比如收件人、邮件标题、邮件内容等

我用的是python2.7版本,所以安装这两个库:

代码语言:javascript
复制
pip2.7 install secure-smtplib
pip2.7 install email

安装准备好需要的包,下面就开始发送邮件的操作,实例化操作

代码语言:javascript
复制
# 实例化SMTP
smtp = smtplib.SMTP()
# 链接邮件服务器
smtp.connect(smtp_addr)
# 配置发送邮箱的用户名和密码
smtp.login(login_user, login_passwd)

MIMEText 类是 MIMENonMultipart 类的子类,一般用于用于封装文本类型的邮件

实例化邮件服务器信息,可以进行相应的配置,邮件的标题、邮件的收发邮件信息、当然还可以进行抄送

代码语言:javascript
复制
# 邮件正文
words = "First Message"
# 配置发送内容msg
msg = MIMEText(words, 'plain', 'utf-8')
# 邮件标题
msg['Subject'] = Header("MyTestTitle",'utf-8')
# 发信人地址
msg['from'] = sender
# 收信人地址(支持群发)
msg['to'] = ';'.join([receiver])
# 抄送人地址(支持群发)
msg['Cc'] = ';'.join([receiver])

在完成了以上的操作之后,然后配置自己的信息就可以进行操作发送了。

当然在我给到的代码中,都是以变量给出的,首先咱们需要初始化

代码语言:javascript
复制
# 发送者邮箱(改为自己的)
sender = "xxx@163.com"
# 接受者邮箱(改为自己的)
receiver = "xxx@qq.com"
# 服务器地址
smtp_addr = "smtp.163.com"
# 邮件服务器账号和密码,自己的163邮箱的登录账号和密码
login_user = "xxx@163.com"
login_passwd = "xxx"

最后,关键一步,可以发送了,但是记得要关闭连接哦!

参数格式:sendmail(self, from_addr, to_addrs, msg, mail_options=[], rcpt_options=[])

代码语言:javascript
复制
# 发送邮件
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print("邮件发送成功 ^_^ ")

哈哈,看看我的界面,已经收到了哈!

跟着试了的同学以及攻城狮们,成功了没有

也可以自取哈!地址: https://pan.baidu.com/s/1At5rsu59QZ0BLQ6ETpPEvw 密码: s8ew

发送其他格式的邮件

上述展示了普通格式的邮件发送格式,下面咱们再看看想要发送一些HTML格式的,还有带附件的邮件形式。

再然后就可以自行发挥发送任何格式和组合的邮件了!

1. 发送 HTML 格式的邮件

在创建 MIMEText 时,将 _subtype 设置为 “html”,则可发送 html 格式的邮件

其他步骤和发送纯文本邮件配置和代码格式都一致

跟上面文本格式邮件对比下哈,会有很清晰的思路:

代码语言:javascript
复制
# 普通文本格式
msg = MIMEText(words, 'plain', 'utf-8')
# html 格式
msg = MIMEText(words, 'plain', 'utf-8')

贴出详细代码

代码语言:javascript
复制
# 邮件正文
words = """
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
 <table border="1">
     <tr>
         <th>Python</th>
         <th>编程爱好者</th>
     </tr>
     <tr>
         <td>需要代码的同学</td>
         <td>加我微信</td>
     </tr>
     <tr>
         <td>Johngo106X</td>
         <td>双手奉上!</td>
     </tr>
 </table>
    </body>
</html>
"""
# 配置发送内容msg
msg = MIMEText(words, 'html', 'utf-8')
# 邮件标题
msg['Subject'] = Header("测试发送HTML信息",'utf-8')
# 发信人地址
msg['from'] = sender
# 收信人地址(支持群发)
msg['to'] = ';'.join([receiver])
# 抄送人地址(支持群发)
msg['Cc'] = ';'.join([receiver])

# 实例化SMTP
smtp = smtplib.SMTP()
# 链接邮件服务器
smtp.connect(smtp_addr)
# 配置发送邮箱的用户名和密码
smtp.login(login_user, login_passwd)
# 发送邮件
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print("邮件发送成功!")

一些自定义的变量可以自己设置哈,全量代码可以在网盘中自取!!!

哈, 再看看 Johngo 的结果:

下面再看看重要的附件,是怎么操作的

2. 发送带有附件的邮件

类似的操作方法,不同的操作是实例化发送信息的这块稍有区别

代码语言:javascript
复制
# 配置发送内容msg
msg = MIMEMultipart()

同样的我先把代码附上,需要详细代码的请自取

代码语言:javascript
复制
# 邮件正文
words = """
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
 <table border="1">
     <tr>
         <th>Python</th>
         <th>编程爱好者</th>
     </tr>
     <tr>
         <td>需要代码的同学</td>
         <td>加我微信</td>
     </tr>
     <tr>
         <td>Johngo106X</td>
         <td>双手奉上!</td>
     </tr>
     <tr>
         <td>原文链接</td>
         <td>xxx</td>
     </tr>
 </table>
    </body>
</html>
"""
# 配置发送内容msg
msg = MIMEMultipart()
# 邮件正文
msg.attach(payload=MIMEText(words, _subtype="html", _charset="utf-8"))
# 邮件标题
msg['Subject'] = Header("附件邮件发送测试",'utf-8')
# 发信人地址
msg['from'] = sender
# 收信人地址(支持群发)
msg['to'] = ';'.join([receiver])
# 抄送人地址(支持群发)
msg['Cc'] = ';'.join([receiver])


for file_path in {"test1.xlsx", "test2.xlsx"}:
 attachment = MIMEText(_text=open(file_path, "rb").read(), _subtype="base64", _charset="utf-8")
 attachment["Content-Type"] = "application/octet-stream"
 attachment["Content-Disposition"] = "attachment; filename=%s" % file_path
 msg.attach(payload=attachment)


# 实例化SMTP
smtp = smtplib.SMTP()
# 链接邮件服务器
smtp.connect(smtp_addr)
# 配置发送邮箱的用户名和密码
smtp.login(login_user, login_passwd)
# 发送邮件
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print("邮件发送成功!")

同样的,咱们看看附件过来了没有?

以上!给出了代码的最初的模型,大家按需可以进行修改

就像我开始提到的,为了给每个人单独发送,大家可以封装一个函数,进行循环发送,这样就实现最初的想法啦!

结尾

比较简单的几行代码,在某些时候就可以将事情事半功倍,适用于定时发邮件、快速自定义的发送相同文件内容的场景

代码先放到网盘,就暂且不往github上传了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Johngo学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 准备工作
  • 发送其他格式的邮件
    • 1. 发送 HTML 格式的邮件
      • 2. 发送带有附件的邮件
      • 结尾
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档