Python学习笔记(十八)——发邮件的两种方法
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib
和email
两个模块,email
负责构造邮件,smtplib
负责发送邮件。
除了上面这种发邮件的方法,yagmail也可以更简单的来实现自动发邮件功能
一、安装yagmail模块
之前的文章中已经写明安装模块的方法有三种这里就不在进行阐述。如果需要请参考链接:https://www.cnblogs.com/beginner-boy/p/7247688.html
二、使用yagmail发送邮件的简单步骤
1、邮箱的配置:这里使用QQ邮箱进行说明
首先登录QQ邮箱,然后找到设置>账户>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启POP3/SMTP服务,然后生成一个登录的授权码
2、Python编写发送邮件的代码
1、登录邮箱
2、发送邮箱内容
3、发邮件的简单示例
1 import yagmail #导入第三方模块 2 user = '582238XXX@qq.com' #邮箱的用户名 3 password = '配置邮箱服务时获取的密码' #邮箱的密码 4 #登录邮箱 5 login_mail = yagmail.SMTP(host='smtp.qq.com',user=user,password=password,smtp_ssl=True) #如果是QQ邮箱需要加入参数smtp_ssl=True,如果是其它邮箱则不用加 6 #发送邮件内容 7 login_mail.send(to='83648XXXX@qq.com',cc='11598XXXX@qq.com',subject='发邮件',contents='这是一个测试邮件信息!',attachments='发邮件.py')
发邮件内容中的参数说明:
to:目标人 ,如果想发送多个,那么直接写一个list列表即可实现
cc:抄送人
subject:主题
contents:内容
attachments:附件
给多个用户发送邮件,则只需要在to参数后边加入一个list即可。如果是抄送多个人的时候也是添加一个list即可
login_mail.send(to=['83648XXXX@qq.com',BB@.com,CC@.com],cc='11598XXXX@qq.com',subject='发邮件',contents='这是一个测试邮件信息!',attachments='发邮件.py')
注意:使用Python源安装的yagmail文件,附件如果是中文的话则会显示乱码;可以使用如下链接的安装包即可解决该问题:https://pan.baidu.com/s/1bKHD2xNh-JZC3tOOVGipEQ 提取码:vr3a
三、使用Python自带的smtplib模块 发送包含附件的邮件
1、python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
2、smtplib模块 发送邮件的步骤:
1、创建一个SMTP对象
2、连接SMTP服务器,端口一般是465
3、登录自己的邮箱账号
4、调用发送消息函数,参数:发件人、收件人、消息内容
5、关闭连接
3、实例
1 import email.mime.multipart 2 import email.mime.text 3 import smtplib 4 msg = email.mime.multipart.MIMEMultipart() #创建消息对象 5 msg['from'] = '5822XXXX@qq.com' #指定发件人,即邮件头展示的内容 6 msg['to'] = '8364XXXXXX@qq.com' #指定收件人,即邮件尾展示的内容 7 msg['subject'] = '这是一个测试邮件!' #写明邮件主题 8 9 context = ''' 10 <h1>老师好</h1> 11 你好, 12 这是一封自动发送的邮件。 13 www.ustchacker.com hello 14 ''' #定义邮件内容 15 16 text = email.mime.text.MIMEText(_text=context, _subtype="html") #_text代表邮件内容,_subtype代表邮件内容的发送形式 17 msg.attach(text) 18 19 em = smtplib.SMTP_SSL() 20 em.connect("smtp.qq.com", 465) 21 em.login("5822XXXXX@qq.com", 'aabdlkdlddldld') 22 em.sendmail(from_addr='5822XXXXX@qq.com', to_addrs='8364XXXXX@qq.com', msg=msg.as_string()) 23 em.quit()
参考链接:
https://blog.csdn.net/chinesepython/article/details/82465947