使用python简单实现邮件群发的功能
admin
2023-07-20 05:01:57
0

使用背景:

由于我们公司APP1.0版本要停用,而2.0版本跟1.0不在同一环境中,所以需要邮件通知客户进行更换;

老板甩过来一个Excel表格,里面有3000多客户的邮箱列表,wtf!!

自己手动发肯定是要通宵,而且还不一定能发的完,刚好在学python就试着用python写点代码帮我发了吧。


首先的思路就是:

1、我要读取Excel表格里的邮箱,拿到所有邮箱后,再一一发送;

2、然后使用python发送邮件的库,进行循环发邮件

# -*- coding: utf-8 -*-
from email.header import Header
from email.mime.text import MIMEText
import time

import xlrd
from datetime import date,datetime
#导入smtplib邮件发送模块
import smtplib

def read_excel():
    #打开Excel表格
    ExceFileUrl = xlrd.open_workbook(r'C:\Users\user\Desktop\2015.xlsx')
    # print(ExceFileUrl.sheet_names())
    #获取第一个sheet页面
    sheet_date = ExceFileUrl.sheet_by_index(0)

    # print(sheet_date.name,sheet_date.nrows,sheet_date.ncols)
    #获取低19列的邮箱列表
    email_data = sheet_date.col_values(19)
    # print(email_data)
    return email_data

mail_list = read_excel()


mysender = 'xxx-service@XXXXX.net'

def sender_mail():
    #创建对象
    smt_p = smtplib.SMTP()
    #设置smtp服务器 
    smt_p.connect(host='smtp.mxhichina.com', port=25)
    #进行邮箱登录一次
    smt_p.login(user=mysender, password='QiXin123-')
    count_num = 1
    #使用for循环来进行发邮件
    for i in mail_list:
        #因为表格中有的邮箱格式不正确,还有一些空字符,在发邮件的时候会出现异常报错,所以要进行捕获下,捕获到这些异常就跳过
        try:
            send_msg = MIMEText('您好,'
                                'XXX2.0全新升级,XXX1.0版本到2018年10月31号停止所有服务,切换新版本2.0;如有迁移、续费、使用等需求问题请联系XXX,联系电话188XXXXXXXX。','plain', 'utf-8')
            send_msg['From'] = 'E企信'
            send_msg['To'] = i
            send_msg['subject'] = '【XXXX2.0启用】1.0停用--通知'
            smt_p.sendmail(mysender,i,send_msg.as_string())
            #sleep5秒是因为发送频率过快,判定垃圾邮件的几率大大增加了。
            time.sleep(5)
            print('第%d次发送给%s' % (count_num,i))
            count_num = count_num + 1
        except (UnicodeEncodeError,smtplib.SMTPRecipientsRefused,smtplib.SMTPSenderRefused,AttributeError) as e:
                #这样打印出来我能知道在发送第几次的时候,哪个邮箱有问题,而且阿里云邮箱一个邮箱最多能发300个
            print('第%d次给%s发送邮件的时候出现了异常' % (count_num,i))
            continue


    smt_p.quit()
sender_mail()

由于阿里云的邮箱限制每个邮箱账号每天最多发300封邮件,我都是手动更换的,遇到Reject的异常程序就停掉了,我就自己更换邮箱账号。

其实可以预先弄一二十个邮箱账号,修改程序,让捕获到smtplib.SMTPDataError: (554, b'Reject这种异常的时候进行更换账号进行发送;

因为比较懒,所以我就没有去修改升级代码;

大致思路是,当碰到smtplib.SMTPDataError: (554, b'Reject异常的时候,获取当前发送邮箱地址所在列表的索引值,

当更换完账号再次进行发邮件的时候,则从获取的索引值那个位置进行发送邮件,这样就不会重复发送了。

相关内容

热门资讯

小熊电器获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示小熊电器(002959)新获得一项实用新型专利授权,专利名为“...
【工作动态】共赴数智未来 20... 万数奔腾,浪潮激荡。当前,大数据、人工智能等新技术加速迭代,新业态、新模式持续涌现,为经济社会高质量...
伊朗:60天内商船可免费通过霍... △霍尔木兹海峡(资料图)当地时间18日,伊朗国家最高安全委员会发表声明称,60天内,不收取申请通过霍...
知名国际学校,新校区不到一年宣... 一个去年8月开办的新校区,在今年6月初突然宣布关停。6月5日晚,北京市昌平区的清香未来城学校(即北京...
聚力奋进新型工业化之路 □本报记者 孙铭阳 机器轰鸣的生产车间里,数字化生产线高效运转;科创园区实验室中,前沿技术持续突破;...
三星确认Exynos 2700... IT之家 6 月 18 日消息,据《韩国经济日报》报道,三星电子半导体 LSI 事业部总裁 Park...
伊朗最高领袖:美国总统出于绝望... 当地时间6月18日晚,伊朗最高领袖穆杰塔巴·哈梅内伊就伊美签署谅解备忘录发表声明。穆杰塔巴表示,“正...
互相扯皮,虫害再成美两党政治博... 美国农业部16日发布声明称,将投入约1.05亿美元用于新项目,强化美国对螺旋锥蝇的防控能力。本月以来...
高市插不上话只能尬笑,日本发G... 根本插不上话,只能尬笑!6月17日,日本方面发布了一张高市早苗在G7峰会的照片,配文“高市与附近领导...
侯宏、李智勇 | 智能原生组织... 来源:北大国发院 导语 AI为组织这艘航船提供了无限的动力、实时的全球海图、自动驾驶系统与自我强化...