前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python发送邮件案例分析

python发送邮件案例分析

原创
作者头像
Elsa_111
修改2021-07-28 10:30:38
7290
修改2021-07-28 10:30:38
举报
文章被收录于专栏:Elsa的学习笔记Elsa的学习笔记

1、运用for循环,实现群发功能

接收方的昵称是统一的一个,可再优化一下,实现更加个性化,更加自由的发送邮件

代码语言:javascript
复制
from email.header import Header #处理邮件主题
from email.mime.text import MIMEText # 处理邮件内容
from email.utils import parseaddr, formataddr #用于构造特定格式的收发邮件地址
import smtplib #用于发送邮件

# 函数小工具
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))
# 邮件配置
from_addr = 'xxxxx@163.com'
password = 'YOYPWNZPANXXJFFM'
to_addrs = ['xxxxx@qq.com','xxxxx@163.com']#这里存放批量的邮件地址,或者我们也可以从本地存放邮件地址的文件中读取
smtp_server = 'smtp.163.com'
msg = MIMEText('这是正文内容', 'plain','utf-8')
msg['From'] = _format_addr('发送方昵称<%s>'%from_addr)
msg['Subject'] = Header('这是邮件主题:一号爬虫运行','utf-8').encode()
server = smtplib.SMTP(smtp_server,25)
server.login(from_addr, password)
for to_addr in to_addrs:
    msg['To'] = _format_addr('接收方昵称<%s>'%to_addr)
    try:
        server.sendmail(from_addr, to_addr, msg.as_string())
    except:
        print('发送失败,再次尝试')
        server.sendmail(from_addr, to_addr, msg.as_string())
    print('发送邮件到'+to_addr)
server.quit()


2、从 收件方地址.xlsx 里面读取到多个收件人的地址

  • 读取表格数据,使用 pandas.read_excel() 来进行操作,该函数读取的数据返回为 DataFrame 的类型;;
  • 然后我们还需要以 DataFrame 数据中的每一行为单位,传入到发送邮件的函数中去作为接收方,来发送邮件,所以需要用到 DataFrame.apply(func) 去进行映射
代码语言:javascript
复制
import smtplib                        # smtplib发送邮件
from email.mime.text import MIMEText  # 构造文本内容
from email.header import Header       # 构造标题内容


# 设置服务器地址
mail_host = "smtp.qq.com"
# 设置服务器端口
mail_port = 465

# 初始化发送方账号
sender = "28480*****@qq.com"

# QQ邮件登录账号
mail_user = "28480*****"
# QQ邮箱第三方授权码
mail_pass = "gwgcqikk********"


def post_email(per_info):
    # 构造文本对象,三个参数:文本内容,设置文本格式,设置编码
    message = MIMEText(per_info["正文"],"plain","utf-8")
    # 文本对象 添加 发送者
    message["From"] = sender
    # 文本对象 添加 接收者
    message["To"] = per_info["收件人邮箱"]
    # 文本对象 添加 标题
    message["Subject"] = Header(per_info["邮件主题"])

    # 创建 SMTP 对象,连接目标服务器
    smtpObj = smtplib.SMTP_SSL(mail_host,mail_port)
    # 自己账号登录
    smtpObj.login(mail_user,mail_pass)
    # 发送邮件到目标地址  注意:信息由MTMEText对象 转为 字符串对象
    smtpObj.sendmail(sender,per_info["收件人邮箱"],message.as_string())
    # 结束 SMTP 对象
    smtpObj.quit()


if __name__ == '__main__':
    # 读取 邮件.xlsx
    email_info_df = pd.read_excel("邮件.xlsx")

    # 使用apply方法 将email_info_df中每一行 映射到post_email函数中
    email_info_df.apply(post_email,axis=1)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、运用for循环,实现群发功能
  • 2、从 收件方地址.xlsx 里面读取到多个收件人的地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档