python--smtplib加email发邮件给指定邮箱(一)

python--smtplib加email发邮件给指定邮箱(一)

      • 前言:
        • 1、模块详解
        • 2、授权码获取
          • 2.2 如何获取授权码
            • 2.2.1 设置
            • 2.2.1 选择账户
            • 2.2.1 打开SMTP服务
        • 3、python与smtp服务器之间的具体交互
        • 4、Email模块
        • 5、案例
          • 5.1、注意【博主遇到的坑】
        • 6、文末彩蛋--轻松一刻

      更多关于机器学习的知识请加关注哟~~。若需联系博主请私信或者加博主联系方式:
      QQ:1542334210
      微信公众号:不一样的数据分析
      微信号:ZDSL1542334210

前言:

       由于之前人事工作中的需要,要将老板的通知消息发送给指定员工,通知其进行开会,那么就需要将消息内容发送给对应的负责人,人事部请我写一个脚本,如果能够实现代码发邮件通知相关人员开会,那么是不是会比复制消息再粘贴更加节约时间?我的回答是肯定的,现在部门负责人是五六个而已,但是如果说有几十个、上百个甚至更多,难道我们要复制这么多次?要发送这么多个文件?
       在工作中,你永远记住一件事,只要是重复的事情,都不是人干的,机器能够解决为什么要用人来做?于是我就专门写了一个Python自动发邮件给别人的脚本
【PS:这里我会分几个版本进行讲解,从发送消息–>发送txt–>发送excel–>发送图片–>发送mp3–>发送mp4–>定时发送邮件】

1、模块详解

       python发送邮件需要用到python自带的两个模块,smtplib和email。由于是内置模块直接import smtplib ,email导入,无需下载。python的smtplib提供了一种很方便的途径发送电子邮件,它对smtp协议进行了简单的封装,这就使得我们利用其发送邮件如鱼得水。

2、授权码获取

       smtplib用法相对来说很简单,就是分为两步。创建SMTP的操作对象并连接smtp目标服务器,可以是163、QQ、Gmail等根据自己的账号登录目标服务器(注:发送者是需要传人自己的邮箱地址和邮箱授权码)

2.2 如何获取授权码

       这里我将以QQ邮箱为列。

2.2.1 设置

       登陆电脑端QQ邮箱后,点击设置
python--smtplib加email发邮件给指定邮箱(一)_第1张图片

2.2.1 选择账户

       点击账户
python--smtplib加email发邮件给指定邮箱(一)_第2张图片

2.2.1 打开SMTP服务

       打开SMTP服务,此时如果你没有开启过,那么系统会引导你开通,方法是编辑短信开通该服务,开通后会生成一个授权码,请记住该授权码,它和你的邮箱密码不一样,待会的代码将会使用该授权码登陆。
python--smtplib加email发邮件给指定邮箱(一)_第3张图片

3、python与smtp服务器之间的具体交互

       python与smtp之间到底是如何交流,如何完成这一交易呢?

server = smtplib.SMTP_SSL("smtp.qq.com",timeout=30)   #实例化一个SMTP对象 ,传人:邮件服务地址,端口号
server.set_debuglevel(0) #是否打印出与邮箱交易的所有信息 0表示不用打印1表示打印
server.ehlo("smtp.qq.com") #使用ehlo指令向ESMTP(SMTP扩展)确认你的身份
server.login(myemail,password)  # 传入发送者邮箱地址和授权码
server.sendmail(msg['from'], msg['to'],msg.as_string()) # msg['from'] 发送人邮箱地址,msg['to'] 收件人邮箱地址,msg.as_string()中as_string()是将msg(MIMEText或MIMEMultipart对象)变为str。
server.close()  # 关闭服务

       从这里可以看到,Python需要我们传入几个参数,发件人邮箱地址和授权码,收件人邮箱地址。

4、Email模块

from email.mime.text import MIMEText    
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart    

       这几个模块啥意思呢,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片对象,要把多个对象组合起来,就用MIMEMultipart对象。当然此时是可以传入附件进行发送的,如附件一个excel、txt、png文件等。

5、案例

       这里我们简单做个测试,我们对马云主管,邮箱:[email protected]发送一条邮件信息,提醒他明天要开会,那么直接上码:

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

myemail='[email protected]'
otheremail='[email protected]'
password='uajsuycdnxbg'
msg  = MIMEMultipart()
msg['to'] = otheremail
msg['from'] = myemail
msg['subject'] = "明天早上开会提醒"
part = MIMEText("通知:马云主管,明天早上9:30将在致远楼405开早会,请务必到场!如果迟到你以后下象棋必备指指点点!")
msg.attach(part)
server = smtplib.SMTP_SSL("smtp.qq.com",timeout=30)
server.set_debuglevel(0)
server.ehlo("smtp.qq.com")
server.login(myemail,password)
server.sendmail(msg['from'], msg['to'],msg.as_string())
server.close()

       我们来看看马云主管收到消息的邮件内容:
python--smtplib加email发邮件给指定邮箱(一)_第4张图片

5.1、注意【博主遇到的坑】

       案例虽成功,不过我们要注意一个问题,那就是使用smtplib和email发送邮件后,会可能出现一个问题就是发件人的邮箱找不到发送记录,但是收件人却收到了邮件,无论发送多少条,发件人都没有记录,那么这时候怎么办呢?请进入发件人邮箱的设置–账户–收取选项,把“SMTP发信后保存到服务器”勾选上,就可以看到发送人的发送记录啦!!
python--smtplib加email发邮件给指定邮箱(一)_第5张图片

6、文末彩蛋–轻松一刻

       前两天我好朋友小熊被上司开除了,然后回来就大哭,我正问他为啥被开除了,他说:“我们老板让我发一条邮件给他女秘书,内容是‘想死你了,在国际大酒店等!’,群发也就算了,但是回复的消息是这样的 女秘书:德性,干嘛猴急! 女科长:今天不方便改天吧! 男副局长:咋不知道你也是男同啊? 女部下:马上到! 女副局长:你才想起我呀? 女书记:去那么远干吗?到我办公室来! 老婆:回来!还浪费那钱!…

        今天到这里就结束啦~这里是Jeruser python自动化栏目,让你体验不一样的数据分析,如何将工作变得有趣,请持续关注我。谢谢观看我是Jetuser–data
python--smtplib加email发邮件给指定邮箱(一)_第6张图片

你可能感兴趣的:(python-anaconda,Python--自动化,Python发邮件,smtplib+email,SMTP,python)