Python发送邮件 以你之姓@ 2022-05-22 04:49 257阅读 0赞 # 一、启用邮箱的SMTP访问 # Python发邮件需要有SMTP服务,可以在本地搭建SMTP服务,也可以使用第三方的SMTP服务(比如网易邮箱或QQ邮箱)。 这里我使用了网易126邮箱来发邮件。 1 登录网易邮箱 2 设置–>POP3/SMTP/IMAP–>设置POP3/SMTP/IMAP,勾选“POP3/SMTP服务”和“IMAP/SMTP服务”。 ![1.png][] 3 设置客户端授权密码,要求邮箱绑定手机,设置验证码之前需要先输入短信验证码 注意:网易授权密码,一天最多只能接收3次 ![2.png][] ![3.png][] 用手机网易邮箱登录邮件账号时,所填的密码不是你的登录密码,而是上面这个授权密码。 同样地,用Python发邮件也是使用授权密码,而不是邮箱登录密码。 # 二、编写发邮件程序 # ## (一)用到的模块 ## python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。 smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。 email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。 ## (二)消息对象 ## 构造一个邮件对象就是一个Message对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下: ![4.png][] 邮件发送程序为了防止有些邮件阅读软件不能显示处理HTML格式的数据,通常都会用两类型分别为”text/plain”和”text/html” 构造MIMEText对象时,第一个参数是邮件正文,第二个参数是MIME的subtype,最后一定要用utf-8编码保证多语言兼容性。比如: text = "Hi!\nHow are you?\n " text_plain = MIMEText(text,'plain', 'utf-8') ## (三)发送邮件的代码 ## import smtplib from email.mime.text import MIMEText # 第三方 SMTP 服务 mail_host = 'smtp.126.com' # 设置服务器 mail_username = 'zhenghaishu@126.com' # 用户名 mail_auth_password = "**********" # 授权密码 sender = 'zhenghaishu@126.com' #receivers = '270114497@qq.com' # 一个收件人 receivers = '270114497@qq.com, zhenghaishu@126.com' # 多个收件人 message = MIMEText('这里是邮件正文', 'plain', 'utf-8') message['From'] = sender message['To'] = receivers message['Subject'] = "这里是邮件主题5" try: smtpObj = smtplib.SMTP(mail_host, 25) # 生成smtpObj对象,使用非SSL协议端口号25 #smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 生成smtpObj对象,使用SSL协议端口号465 smtpObj.login(mail_username, mail_auth_password) # 登录邮箱 # smtpObj.sendmail(sender, receivers, message.as_string()) # 发送给一人 smtpObj.sendmail(sender, receivers.split(','), message.as_string()) # 发送给多人 print ("邮件发送成功") except smtplib.SMTPException: print ("Error: 无法发送邮件") 运行结果: ![5.png][] ![6.png][] 注意,若收件箱里没有收到邮件,记得去垃圾箱里找。 ## (四)发送带附件的邮件代码 ## import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 第三方 SMTP 服务 mail_host = 'smtp.126.com' # 设置服务器 mail_username = 'zhenghaishu@126.com' # 用户名 mail_auth_password = "***********" # 授权密码 sender = 'zhenghaishu@126.com' #receivers = '270114497@qq.com' # 一个收件人 receivers = '270114497@qq.com, zhenghaishu@126.com' # 多个收件人 message = MIMEMultipart() message['From'] = sender message['To'] = receivers message['Subject'] = "这里是邮件主题2" message.attach(MIMEText('这是邮件正文', 'plain', 'utf-8')) # 构造附件1,传送当前目录下的test1.txt 文件 att1 = MIMEText(open('test1.txt', 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att1["Content-Disposition"] = 'attachment; filename="test1.txt"' message.attach(att1) # 构造附件2,传送当前目录下的test2.txt文件 att2 = MIMEText(open('test2.txt', 'rb').read(), 'base64', 'utf-8') att2["Content-Type"] = 'application/octet-stream' att2["Content-Disposition"] = 'attachment; filename="test_2.txt"' message.attach(att2) try: smtpObj = smtplib.SMTP(mail_host) # 生成smtpObj对象,默认使用非SSL协议端口号25 #smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 生成smtpObj对象,使用SSL协议端口号465 smtpObj.login(mail_username, mail_auth_password) # 登录邮箱 # smtpObj.sendmail(sender, receivers, message.as_string()) # 发送给一人 smtpObj.sendmail(sender, receivers.split(','), message.as_string()) # 发送给多人 print ("邮件发送成功") except smtplib.SMTPException: print ("Error: 无法发送邮件") 运行结果: ![7.png][] ![8.png][] 注意,若收件箱里没有收到邮件,记得去垃圾箱里找。 > TopCoder & Codeforces & AtCoder交流QQ群:648202993 > 更多内容请关注微信公众号 > ![wechat\_public\_header.jpg][wechat_public_header.jpg] [1.png]: /images/20220522/474f1c820d2544e6bc79129dd4417366.png [2.png]: /images/20220522/7e8b929754b24c23ae880674753ed29b.png [3.png]: /images/20220522/c3b1443dbd5748a88a85a41821d2b58d.png [4.png]: /images/20220522/9bc2c32ff17c46f4a0898b2126239897.png [5.png]: /images/20220522/eb8b7642fc624ee3aca6019717106d80.png [6.png]: /images/20220522/c04841853bc549509c260a5cd91a979c.png [7.png]: /images/20220522/a8474190cd6e4b52817503f0b90ddae5.png [8.png]: /images/20220522/a8a48af627314d47ae162c0178fda2d7.png [wechat_public_header.jpg]: /images/20220522/49a8f772c92642d8b883184a905a69c4.png
还没有评论,来说两句吧...