在python中,我们可以用程序来实现向别人的邮箱自动发送一封邮件,甚至可以定时,如每天8点钟准时给某人发送一封邮件。今天,我们就来学习一下,如何向qq邮箱,网易邮箱等发送邮件。

      一、获取邮箱的SMTP授权码。

        1、要发送邮件,首先要获取对应邮箱的SMTP授权码,有了这个SMTP授权码才能发送邮件。

        以qq邮箱为例:

         1)首先登录主页,在主页上面,点击设置,点击账户。

imap 回复邮件 python python 邮箱自动回复_网易

2)在账户页面一直往下拉,找到如下图所示位置。

imap 回复邮件 python python 邮箱自动回复_qq_02

   3) 点击POP3/SMTP服务中的开启按钮。点击开启后,会有一个手机验证,把需要发送的内容发送到指定号码,然后点击“我已发送”按钮。

imap 回复邮件 python python 邮箱自动回复_imap 回复邮件 python_03

       4)之后会自动跳出一个框,里面就包含着SMTP授权码,把它复制下来,储存到一个地方方便以后调用

         

imap 回复邮件 python python 邮箱自动回复_imap 回复邮件 python_04

        5)同理,你要给网易邮箱发送邮件的话,你也要登录网易邮箱,然后获取SMTP授权码。

imap 回复邮件 python python 邮箱自动回复_imap 回复邮件 python_05


二、编写发送代码

        1、首先安装邮件发送的库smtplib

        2、引入邮件发送的库

import smtplib#引入控制邮箱发送邮件的库
from email.mime.text import MIMEText

        3、新建邮件对象,填入邮件的正文内容和发件人、收件人等信息。

#1.邮件正文内容
msg = MIMEText('测试邮件正文内容')

user ='你自己的qq号@qq.com' #发件人邮箱
pwd = '你自己的SMTP授权码' #邮箱的SMTP授权码
to = '你自己设置的收件人邮箱'#收件人,可以写多个收件人,用英文逗号隔开

#2.设置邮件主题、发件人、收件人
msg[ 'Subject' ] ='测试邮件主题!'#邮件的标题
msg[ 'From ' ] = user#设置发件人
msg['To'] = to#设置收件人

        其中要在pwd变量中输入你第一步得到的SMTP授权码。然后要设置发件人,也就是你自己的邮箱,还有就是收件人的邮箱,收件人的邮箱可以是多个,多个之间用英文的逗号隔开即可。

        4、调用qq邮箱服务,登录邮箱,发送邮件        

#3.发送邮件
s = smtplib.SMTP_SSL ('smtp.qq.com', 465)#选择qq邮箱服务,默认端口为465
s.login(user, pwd)#登录qq邮箱
s.send_message(msg)#发送邮件
s.quit()#退出邮箱服务
print( ' Success! ')

        其中smtp.qq.com为qq邮箱服务名,465为邮箱端口号,这对于qq邮箱是固定的,不可修改。

如果是网易邮箱,则使用smtp.163.com,端口号还是465

        5、测试发送文件。发送成功!!!


三、发送HTML邮件

         有的情况下,我们需要发送html格式的邮件,那么我们应该怎么做呢?

        关键点就是新建邮件对象时,指定邮件的格式为html:      

mail_msg = '''
<p>这个是一个常规段落</p>
p><a href="https : / /www.baidu.com">这是一个包含链接的段落</a></p>
'''
msg = MIMEText(mail_msg, 'html' , 'utf-8')

    其中,mail_msg就是我们的html格式的邮件内容,然后把之前的msg = MIMEText('测试邮件正文内容')增加两个参数,一个参数指定格式为html,另一个参数指定编码方式为utf-8 。

      其它代码和普通邮件发送的代码一样。


四、发送邮件附件

      有时我们需要在发送邮件正文内容的同时附上邮件附件,而如果想实现自动发送邮件附件,我们需要将之前的代码做些修改。

1、引入MIMEMultipart功能,并且创建一个可以同时添加正文和附件的MIMEMultipart()对象,并把它赋值给msg变量

from email.mime.multipart import MIMEMultipart
msg =MIMEMultipart()

2、将前面html格式的邮件正文mail_msg的内容添加到msg中

#先添加正文内容
msg.attach(MIMEText(mail_msg, 'html' , 'utf-8' ))

3、然后在将附件添加到msg中

#再添加附件,这里的文件名可以有中文,但下面第三行的filename不可以为中文
attl = MIMEText(open( 'E:\\test.docx', 'rb' ) .read(), 'base64' , 'utf-8')
attl["Content-Type"] = 'application/octet-stream'
#下面的filename是在邮件中显示的名字及后缀名,名字可以不同,但不可以为中文!!
att1["Content-Disposition"] = 'attachment; filename="test.docx" '
msg.attach(att1)

        在写文件路径的时候,最好还是用两个反斜杠来防止单个斜杠导致的特殊含义,这里的文件路径可以写成中文内容,因为这里设置了utf-8编码。

        注意:如果有的时候显示文件路径报错,那么把里面大写的字母换成小写即可,这个是个经验手段,仅在这里适用。

filename里不可以写中文,否则会报错!

  4、后面发送的代码都是和之前一样的。


五、定时发送邮件

  可以用以下两种方式实现定时发送。        

1、通过while True实现定时任务:

           把发送邮件的代码放到一个函数中,然后在while中定时调用这个函数实现定时发送。  

import  time

while True:
    send_email()
    time.sleep(86400)

      一天是86400秒,所以使用time每休息一天就调用一次发送邮件的代码,需要定义一个叫send_email  的函数,把之前发送邮件的代码,放在该函数中。

  2、通过schedule库实现定时任务。

        1)安装schedule库:pip install schedule

        2)每天8:00定时调用发送邮件的函数 

import schedule
schedule.every().day.at( "8:00" ).do(send_email)
while True:
    schedule.run_pending()
    time.sleep ( 10)

        schedule定义了每天8:00调用一次send_email函数,at后的括号里是具体的时间,do后的括号里是需要执行的函数。其作用是将该任务放入定时计划中,如果要实现每天都执行,还需要加一个while循环,schedule.run_pending()的含义为运行所有可以运行的schedule任务,time.sleep(10)是让schedule任务运行完休息10秒钟再检测是否有可以运行的任务。


六、自动回复邮件

        在收到别人的邮件后,我们可以设置一个自动回复功能,通常用来通知对方,邮件已经收到了,作为一个友好的反馈。邮件自动回复的这个功能不需要程序来实现,一般的邮箱都自带这个功能,比如qq邮箱的话,打开设置,常规设置:

imap 回复邮件 python python 邮箱自动回复_网易_06

 下拉到假期自动回复的设置那里:

imap 回复邮件 python python 邮箱自动回复_网易_07

 

 点击启用选项,然后输入自动回复的内容,在下面不要选仅对联系人中的邮件地址进行回复。最后在左下角保存更改即可:

imap 回复邮件 python python 邮箱自动回复_python_08

 

这样,不管谁给你发送邮件,都可以自动回复他了。