1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python邮件发送SMATP模块详细总结(含qq邮箱及163邮箱服务开启及授权码获取 多附件发送)

Python邮件发送SMATP模块详细总结(含qq邮箱及163邮箱服务开启及授权码获取 多附件发送)

时间:2024-04-09 03:54:51

相关推荐

Python邮件发送SMATP模块详细总结(含qq邮箱及163邮箱服务开启及授权码获取 多附件发送)

Python实现电子邮件发送

在生活中或许我们多数都在用微信或者是QQ,但是工作中就会涉及邮件了,我也是最近在工作中用到了,所以找了些资料,有的较为完备有的就特别零散,所以自己也来整理分享一下。这里主要整理关于SMTP模块的邮件发送。

smtplib官网

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.

下面大概讲述一下SMTP发送邮件的流程:

连接服务器登录发送服务请求退出

SMTP服务开启以授权码获取

想要进行邮件的发送操作,首先要搞清楚发件的邮箱的 SMTP 服务器地址和加密方式,当然别忘了打开 SMTP 服务。这里以qq邮箱和163邮箱为例子:

登录邮箱进入设置:

进入设置之后,选择账户,往下拉一点儿就可以看到各个服务了:

跟着他的步骤走就收到一个授权码,这个授权码是用于后面邮箱登录的,要保存下来哦

设置好了还要获取授权码:

如果忘记了授权码就重设授权码。

163邮箱是可以自己设置授权码的。

Python中SMTP使用

由于腾讯企业邮箱使用 SSL 加密方法,因此需要调用 smt­plib 的 SMTP_SSL() 方法并提供 465 端口号。

login() 用于登陆到 SMTP 服务器,第一个参数为邮件地址,第二个参数为密码(亲测为授权码)。login()的返回码

# 235 == 'Authentication successful'# 503 == 'Error: already authenticated'

import smtplib#定义输入信息from_email = r'填发送的邮箱'password = r'填授权码'to_email = r'发送邮箱的地址'smtp_ssl = 'smtp.'+from_email.split('@')[-1]#自动去适配邮箱的smtpsmtp_ssl_num =465#看情况修改# 连接 SMTP 服务器并登陆smtp = smtplib.SMTP_SSL(smtp_ssl, port=smtp_ssl_num)status = smtp.login(from_email,password)print(status)print(type(status))print('状态:',status[1])

输出结果:

(235, b'Authentication successful')<class 'tuple'>状态: b'Authentication successful'

这样就成功连接到服务器了。

加密SMTP

使用标准的25端口连接SMTP服务器时,使用的是明文传输,为了安全起见,要更安全地发送邮件,可以加密SMTP会话,就是先创建SSL安全连接,然后再使用SMTP协议发送邮件。

构建邮件主体

邮件格式遵循一定的规范,MIME(多用途互联网邮件扩展类型)。如果对此不熟悉,也没有关系,我们使用 Python 内置的 email 模块中的 MIME 模块来构建一个文本邮件对象。

import smtplibfrom email.mime.text import MIMETextfrom email.header import Header#定义输入信息from_email = r'填发送的邮箱'password = r'填授权码'to_email = r'发送邮箱的地址'smtp_ssl = 'smtp.'+from_email.split('@')[-1]#自动去适配邮箱的smtpsmtp_ssl_num =465# 构建要发送的邮件内容text = '正文内容'title = '我是标题'm = MIMEText(text, 'plain', 'utf-8')m['Subject'] = Header(title, 'utf-8')m['From'] = Header(from_email, 'utf-8')m['To'] = Header(to_email, 'utf-8')try:smtp = smtplib.SMTP_SSL(smtp_ssl, port=smtp_ssl_num)smtp.login(fromaddr,password)smtp.sendmail(from_email, to_email, m.as_string())print('success')smtp.close()#关闭连接except smtplib.SMTPException as e:print('error:',e) #打印错误

注意:连接上了,操作结束后要关闭连接。

发送带多附件的邮件

发送各种带附件的邮件

使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分。如果是附件,则add_header加入附件的声明。

MIME有很多种类型,比较麻烦,如果附件是:

图片格式,用MIMEImage,音频,要用MIMEAudio,word、excel,我都不知道该用哪种MIME类型

如果想偷懒就不管什么类型的附件,都用MIMEApplication,MIMEApplication默认子类型是application/octet-stream。

看代码你就明白了:

import smtplibfrom email.mime.text import MIMEText#用于发送纯文本或者HTMLfrom email.mime.image import MIMEImage#用于发送图片from email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplication #万能附件发送from_email = r'填发送的邮箱'password = r'填授权码'to_email = r'发送邮箱的地址'smtp_ssl = 'smtp.' + from_email.split('@')[-1]#自动去适配邮箱的smtpsmtp_ssl_num =465title = '送给宝贝的一封信'content = '正文信息:我给你发了许多附件,请查收!.'textApart = MIMEText(content)#正文文字无需通过add_header加入到imageFile = r'E:/emailtest/test.jpg'imageApart = MIMEImage(open(imageFile, 'rb').read(), imageFile.split('.')[-1])imageApart.add_header('Content-Disposition', 'attachment', filename=imageFile.split('/')[-1])pdfFile = r'E:/emailtest/《Python进阶》.pdf'pdfApart = MIMEApplication(open(pdfFile, 'rb').read())pdfApart.add_header('Content-Disposition', 'attachment', filename=('gbk','',pdfFile.split('/')[-1]))zipFile = r'E:/emailtest/《Python进阶》.zip'zipApart = MIMEApplication(open(zipFile, 'rb').read())zipApart.add_header('Content-Disposition', 'attachment', filename=('gbk','',zipFile.split('/')[-1]))m = MIMEMultipart()m.attach(textApart)#加入正文信息m.attach(imageApart)#加入图片m.attach(pdfApart)#加入pdfm.attach(zipApart)#加入压缩包m['Subject'] = Header(title, 'utf-8')m['From'] = Header(from_email, 'utf-8')m['To'] = Header(to_email[i], 'utf-8')try:smtp = smtplib.SMTP_SSL(smtp_ssl, port=smtp_ssl_num)smtp.login(from_email,password)smtp.sendmail(from_email, to_email, m.as_string())print('successful')smtp.quit()except smtplib.SMTPException as e:print('error:',e) #打印错误

其中filename=('gbk','',zipFile.split('/')[-1])是为了避免显示出现乱码情况而加入的,如果gbk还是乱码可以试试utf-8,我的用gbk没有问题。

写在最后

希望你看了能够有所收获,不用要那么多弯路。接触到python邮件发送是因为工作中需要编写一个exe给别的程序去调用,所以查了些资料,然后整理了一下有空就分享一下。下一篇博客再把多人接受多附件的邮件发送python脚本分享出来(要去看看哦,可以封装成为exe然后通过cmd命令行就可以调用了,当然参数是可以自定义的啦)。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。