社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python发邮件

一个普普通通简简单单平平凡凡的神 • 8 年前 • 419 次点击  

Python真是万能语言啊,还能发邮件。。。我也是最近刚知道!那么问题来了,用Python发邮件有什么用啊?

1.可以和爬虫代码结合一下、譬如查12306、查携程机票时可以设置查询到自动发邮件提醒

2.程序猿们可以利用Python发邮件监控程序的运行,譬如有bug报错了,赶紧发个邮件提醒你,回来公司加班!

3.搜集网上行业信息的,搜集到一堆邮箱,可以群发啊,做广告啊~(当然这样不太好)

4.譬如我可以写一个暖心的小程序,让Python自动在恶劣天气,提醒亲朋好友注意加衣服,在生日时发送生日祝福。。。。。。

果然Python大法好啊~


本次,我们发邮件用到的Python库是smtplib和email。简单来说,smtplib库主要是用于负责和邮件服务器进行通讯,email库则主要用于规定编写邮件的头、主体、内容、附件等。

发邮件之前我们需要用Python登录smtp服务器,这样才能有发送权限,所以,我们需要去邮箱手动开启smtp服务,然后记住服务器授权码(授权码意思是,你可以不用我的网页邮箱或者邮箱app登录,你可以用邮箱账号+授权码在后台来获取邮箱服务器的内容)

由于本次我们用QQ邮箱发送,你也可以用网易邮箱或者其他邮箱发送,原理都是类似~

如何开启QQ邮箱smtp服务器和获取授权码:��


转载自:jingyan.baidu.com/article/fed…

很多场合都会用到邮箱授权码进行邮件的收取,现在讲一下如何QQ邮箱的授权码获取方式,网易邮箱的也差不多哦~

工具/原料

  • 电脑版的QQ邮箱

方法/步骤

登录电脑版QQ邮箱,选择最上方的“设置”。

如图选择“账户”,切换到账户详情页面。

在账户页面往下拉,可以看到pop3设置,选择“开启”。

按照弹出的窗口提示操作进行密保验证。有多种方式可以验证,比如手机令牌等。推荐使用短信验证。

按照短信验证的提示发送短信。发送成功后直接点击“我已发送”。

弹出的提示中直接显示16位的授权码,可以复制下来,或者是记下来,千万不要记错了。然后点击“确定”。

下方的收取选项一般是默认30天的,点击下拉箭头,选择“全部”,并点击页面最下方的保存更改。千万别忘了点击保存,不然之前做的都白费了!

最后就是到需要授权码的那些地方输入刚获得的16位授权码就可以了。

END

注意事项

  • 操作完别忘了保存。
  • 授权码不要记错了。
  • 收取选项改为“全部”,不然无法导入所有的邮件。

获取好服务器授权码后,我们就可以写代码了,本次发送一个简单的文字邮件,然后添加一张可爱猪的图片作为附件:

程序运行过程:

程序运行结果:

代码如下:

import smtplib
from email import encoders
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
#sender是邮件发送人邮箱,passWord是服务器授权码,mail_host是服务器地址(这里是QQsmtp服务器)
sender = 'xxxxxxx@qq.com'#
passWord = 'xxx'
mail_host = 'smtp.qq.com'
#receivers是邮件接收人,用列表保存,可以添加多个
receivers = ['aaa@qq.com','bbb@163.com']

#设置email信息
msg = MIMEMultipart()
#邮件主题
msg['Subject'] = input(f"{'请输入邮件主题:'}")
#发送方信息
msg['From'] = sender
#邮件正文是MIMEText:
msg_content = input(f"{'请输入邮件主内容:'}")
msg.attach(MIMEText(msg_content, 'plain', 'utf-8'))
# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
with open('/Users/xxx/1.jpg', 'rb') as f:
    # 设置附件的MIME和文件名,这里是jpg类型,可以换png或其他类型:
    mime = MIMEBase('image', 'jpg', filename='Lyon.png')
    # 加上必要的头信息:
    mime.add_header('Content-Disposition', 'attachment', filename='Lyon.png')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    # 把附件的内容读进来:
    mime.set_payload(f.read())
    # 用Base64编码:
    encoders.encode_base64(mime)
    # 添加到MIMEMultipart:
    msg.attach(mime)

#登录并发送邮件
try:
    #QQsmtp服务器的端口号为465或587
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    s.set_debuglevel(1)
    s.login(sender,passWord)
    #给receivers列表中的联系人逐个发送邮件
    for i in range(len(receivers)):
        to = receivers[i]
        msg['To'] = to
        s.sendmail(sender,to,msg.as_string())
        print('Success!')
    s.quit()
    print ("All emails have been sent over!")
except smtplib.SMTPException as e:
    print ("Falied,%s",e)

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/CU7NSXs0nu
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/5878