python实现群发邮件、密送及自动跳过无效邮箱
需求背景:最近同学需要收集一些调研问卷,立马想到了群发邮件这一方式,机智地用excel按照邮件格式造了一堆学校邮箱,打算一个一个复制粘贴群发。好家伙,这么多邮箱得粘贴到猴年马月啊,极其精污。作为略懂点python的弱鸡,当然要在这个问题上装个逼了,一口答应了同学用python给他写个脚本,当然就踩到了各种坑了。网上各种python群发邮件的教程都有,没错,就是用smtplib这个包基本可以实现,但是写完之后却发现遇到无效的邮箱程序自动抛出错误就停止了,邮件倒是一个都没发出去。在网上找了很久,都没找到啥教程。最后我貌似阴差阳错找到了可能有效的替代方法,因此记录一下,供大家讨论学习。
步骤:使用python中的smtplib群发邮件主要可以分为以下几个步骤:
1.开通邮箱的第三方授权,注意记下授权码;
2.创建smpt对象,连接smpt服务器(注意不通邮箱的端口不同);
3.登录自己的邮箱账号(注意密码是1中开通第三方授权的授权码,而不是登录密码);
4.通过发送消息函数发送邮件,需要设置发件人、收件人(群发为多个收件人),内容,标题等参数;
5.发送成功,关闭连接。
为了比较清楚地了解具体的流程,下面我将以QQ邮箱为例。进行简单的说明。
一、开通邮箱的第三方授权
QQ邮箱开通授权的步骤可以参考这篇博客:https://blog.youkuaiyun.com/SpiderManSun/article/details/84964171
简单来说就是:登入你的QQ邮箱,点击设置–账户,然后找到POP3/SMTP或者IMAP/SMTP服务,二者选其一就行,这里我们只需要SMTP,然后会通知你给腾讯科技的电话发邮件,之后会告诉你一个授权码,这个授权码需要记住,后面需要用。
二、创建对象,设置参数
这一部分网上的教程比较多,就不过多赘述了,只说几个需要注意的点:
1.smpt server的host:这个不同邮箱有所不同,例如QQ邮箱就是:smpt.qq.com
2.mail_user和sender均为发件人邮箱,mail_pass为授权码,并非邮箱登录密码
3.群发邮件有多个收件人,需要用.join()函数添加,即:message[‘To’] = “,”.join(receiver)
代码如下:
import smtplib
from email.header import Header
from email.mime.text import MIMEText
import csv
import pandas as pd
# SMTP Service
mail_host = "smtp.qq.com" # SMTP server, take QQ for example
mail_user = "xxx@qq.com" # user
mail_pass