91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用python簡單實現郵件群發的功能

發布時間:2020-07-27 04:22:26 來源:網絡 閱讀:4004 作者:851096287 欄目:編程語言

使用背景:

由于我們公司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異常的時候,獲取當前發送郵箱地址所在列表的索引值,

當更換完賬號再次進行發郵件的時候,則從獲取的索引值那個位置進行發送郵件,這樣就不會重復發送了。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德钦县| 滨州市| 阳谷县| 宁蒗| 惠水县| 屏东县| 定结县| 济阳县| 襄垣县| 东兰县| 射阳县| 开江县| 包头市| 大埔县| 铜山县| 新密市| 池州市| 临澧县| 习水县| 兴仁县| 蒙山县| 永胜县| 鲁甸县| 平乐县| 宜阳县| 南涧| 桐梓县| 华安县| 农安县| 泰来县| 南昌县| 大庆市| 宜君县| 时尚| 阿图什市| 霍城县| 白山市| 广河县| 临颍县| 西贡区| 平泉县|