使用python发送邮件


发送邮件这个功能非常实用,比如你写了一个爬虫,可以通过邮件来接收程序异常或者任务完成的通知,再比如你搭了一个网站,别人只需留下他的邮箱,你就可以自动给他发送邮件。


总之我觉得邮件通知非常适合那些处理批量、大量任务,你可以不用守在电脑前等待处理结果,在程序里配置好邮件通知后,只需留意邮箱通知就好了。


下面我们一起来看看如何使用 python 来实现邮件发送,邮件一般分为纯文本邮件、html 邮件、以及带附件邮件,今天我们使用 python 来分别实现这三种邮件的发送。


在 python 实现发送邮件需要两个模块,分别是 smtplib 和 email,这两个模块都是内置的,不需要自己安装,直接 import 导入即可。


email 主要是用来构建邮件的,比如邮件收发人、邮件标题、邮件正文以及附件啥的,smtplib 则是用来发送邮件的。


这里我们使用 qq 邮箱来作为发件邮箱,在使用前,需要简单的配置下 qq 邮箱。


打开 qq 邮箱,依次找到 设置 -> 账户,然后检查 POP3/SMTP 服 务是否开启。


如果没开启则开启,根据提示开启之后我们需要获取授权码,这个授权码下面我们会要用到的,这一步只要获取到授权码就行了。



我们先来实现一个简单的纯文本邮件发送,我这里只把一些关键的代码解释一下,文章最后面再附上完整的源码。


  • 纯文本邮件


首先就是使用 email 模块构建邮件,plain 即代表文本邮件,邮件构建完后,再使用 smtplib 发送邮件。


#构建纯文本邮件 from email.mime.text import MIMEText   from email.header import Header
msg = MIMEText('我是邮件正文...''plain''utf-8'# plain 表示纯文本邮件   msg['From'] = "这里是发件者邮箱" msg['To'] = "这里是收件者邮箱" msg['Subject'] = Header("我是邮件的标题"'utf-8'#邮件标题 #使用smtplib模块发送邮件 email_client = smtplib.SMTP("smtp.qq.com")
email_client.login("这里是发件者邮箱""这里就是上面提到获取到的授权码")
email_client.sendmail("这里是发件者邮箱""这里是收件件者邮箱", msg.as_string())
email_client.quit() 


发送邮件的时候有两个需要注意的地方,一个是 smtplib.SMTP 的邮件服务器设置。


这里我们用的 qq 邮箱作为发件邮箱,所以设置为 smtp.qq.com,如果是其他邮箱如网易邮箱,则需要设置为 smtp.163.com。


再一个需要注意的就是 login 方法了,这个登录方法里的第二个参数是指上面提到的授权码,并不是你发件邮箱的登录密码。


  • html 邮件


html 邮件主要是可以给邮件内容定义更丰富的样式,而且可以很方便的插入链接。html 邮件和纯文本邮件大同小异,把完整的 html 内容作为文本内容就行,再把 plain 改为 html 类型即可。


#构建html邮件 content = '<html><body><h3>Hello,这是一封 html 邮件,点击链接可以去看我的博客哈。</h3>' + '<p><a href="www.weatherfood.com">谭某人的博客</a></p>' + '</body></html>' puretext = MIMEText(content, 'html''utf-8')   


  • 附件邮件


附件邮件稍微麻烦一些,在构建邮件对象的时候,就需要声明构建一个附件邮件对象,msg = MIMEMultipart(),然后再添加 MIMEText 作为邮件正文,最后再把 MIMEApplication 作为附件加入即可。


  • 完整源码

最后我再附上一份完整的带图片附件且正文为 html 的邮件发送源码,注意把源码中的发件邮箱改成你自己的邮箱,并获取发件邮箱的授权码。


# coding=utf-8 import smtplib   from email.mime.text import MIMEText   from email.header import Header from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart   #邮件发送函数 #SMTPHost 邮件服务器 #fromAccount 发件邮箱 #fromPasswd 发件邮件授权码,注意并不是邮箱登录密码 #toAccount 收件邮箱 #subject 邮件标题 #content 邮件正文 def sendMail(SMTPHost, fromAccount, fromPasswd, toAccount, subject, content):    

    #构建邮件     msg = MIMEMultipart()
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = fromAccount
    msg['To'] = toAccount

    content = '<html><body><h3>Hello,这是一封 html 邮件,点击链接可以去看我的博客哈。</h3>' + '<p><a href="www.weatherfood.com">谭某人的博客</a></p>' + '</body></html>'     puretext = MIMEText(content, 'html''utf-8')

    msg.attach(puretext)


    # 附件     xlsxpart = MIMEApplication(open('tim.jpg''rb').read()) #这里填写你自己目录下的附件文件     xlsxpart.add_header('Content-Disposition''attachment', filename='tim.jpg')
    msg.attach(xlsxpart)

    #使用smtplib模块发送邮件     email_client = smtplib.SMTP(SMTPHost)
    email_client.login(fromAccount, fromPasswd)
    email_client.sendmail(fromAccount, toAccount, msg.as_string())
    email_client.quit() #主函数 if __name__ == '__main__':
   sendMail(
       'smtp.qq.com',
       '********@qq.com',#你的邮箱        '**********',#授权码        'playactors@163.com',
       '很开心你来看我的文章了,欢迎关注哦。',
       '文章中有疑问的地方,欢迎留言与我联系哈,感谢你的支持!'     ) 




有问题欢迎在下面留言交流,也欢迎关注,如果觉得对你有帮助就点个好看吧,感谢支持。


关键词: python

网友留言(0条)

发表评论