实例如下:
导入所需要的第三方库。
import sys
import smtplib
import datetime
import mimetypes
from email.encoders import encode_base64
import os
import time
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.header import Header
from cfg import email_cfg
dt = datetime.datetime.now()
使用163的smtp服务。设定需要登录的邮箱信息。
mail_host="smtp.163.com"
mail_user=email_cfg['user']
mail_pass=email_cfg['passwd']
sender = mail_user
将email.list
中的用户邮箱读取出来并赋值给cnts
。
遍历cnts
,将遍历所得值列入receivers_arr
。
cnts = open('case_a_sends_email_txt/email.list').readlines()
receivers_arr = []
for cnt in cnts:
tt = cnt.strip()
if tt:
if tt.startswith('#'):
continue
receivers_arr.append(tt)
receivers = set(receivers_arr)
写入邮件内容。
cnt = '''测试'''
message = MIMEText(cnt, 'html', 'utf-8')
登录已开启smtp服务的邮箱。
smtpObj = smtplib.SMTP_SSL('smtp.163.com',port=465)
smtpObj.login(mail_user, mail_pass)
(235, b'Authentication successful')
依次向用户邮箱发送邮件,当接收邮件邮箱大于10,重新登录发送邮件邮箱。
idx_c = 1
for reci in receivers:
# 重新实例化,不然用户会叠加。
msg = MIMEMultipart('mixed')
msg.attach(message)
msg['From'] = "<{}>".format(mail_user)
subject = 'Test, {}'.format(dt.strftime("%Y.%m"))
msg['Subject'] = subject
msg['To'] = reci
if idx_c > 10:
smtpObj = smtplib.SMTP_SSL('smtp.163.com',port=465)
smtpObj.login(mail_user, mail_pass)
idx_c = 0
try:
smtpObj.sendmail(sender, [reci], msg.as_string())
print('成功')
except:
print('err', reci)
# 发送失败的邮箱尝试发送5次
for i in range(5):
try:
smtpObj.sendmail(sender, [reci], msg.as_string())
print('成功')
except:
print('失败')
del (msg)
time.sleep(.2)
idx_c = idx_c + 1
成功 成功
import yagmail
yag = yagmail.SMTP( user="samele_ferrum@163.com", password="QWDBKMFMYUZPDXTY", host='smtp.163.com')
发送的邮件内容, 直接可填写邮件附件地址。(text.txt
为附件地址。)
contents = ['This is the body, and here is just text http://somedomain/image.png',
'You can find an audio file attached.', 'test.txt']
从文本文件中读取用户邮箱,赋值给列表receivers_arr
。
send()
直接将用户邮箱列表调用即可。
cnts = open('case_a_sends_email_txt/email.list').readlines()
receivers_arr = []
for cnt in cnts:
tt = cnt.strip()
if tt:
if tt.startswith('#'):
continue
receivers_arr.append(tt)
yag.send(receivers_arr, 'subject', contents)
{}