来自PythonABC.org
老师的课程很好,但是每个视频都蛮长的,听着听着就有些晕乎,所以根据视频自己整理了一下,以便记录
利用Python来实现邮件的发送、邮件群发、邮件模版发送等功能。
# 导入smtplib模块,设置邮件服务器、协议设置
import smtplib
server = smtplib.SMTP_SSL('smtp.qq.com', 465)
server.login('email@qq.com', 'password')
# 编写简单邮件信息并发送邮件 - 单条纯文本信息-无主题邮件,收到邮件为空
test_msg = 'test message!'
server.sendmail('email@qq.com', 'email@163.com', test_msg)
# server.quit()
# 实现一个正式邮件的编写和方式
# 导入两个新模块 - MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from_add = 'email@qq.com'
# pass_word = 'password'
to_add = 'email@163.com'
mail_message = MIMEMultipart()
mail_message['From'] = from_add
mail_message['To'] = to_add
mail_message['Subject'] = 'From Python'
body = 'This message from python!'
mail_message.attach(MIMEText(body, 'plain'))
# server.login(from_add, pass_word)
server.send_message(mail_message)
# server.sendmail(from_add, to_add, mail_message.as_string()) # 只能发送纯文本/字符串
# server.quit()
# 发送一个图片文件
from email.mime.image import MIMEImage
mail_message_1 = MIMEMultipart()
mail_message_1['From'] = from_add
mail_message_1['To'] = to_add
mail_message_1['Subject'] = 'Send Image by Python'
body_1 = 'Have a nice day!'
mail_message_1.attach(MIMEText(body_1, 'plain'))
with open('dog.jpeg', 'rb') as fp:
img = MIMEImage(fp.read())
mail_message_1.attach(img)
# server.login(from_add, pass_word)
server.send_message(mail_message_1)
# server.quit()
# 建立一个群发邮件的邮件地址列表
mail_add_list = ['email@qq.com', 'email@163.com']
# 定义一个发送邮件的函数
def send_mail(to_list, sub, content):
"""
to_list:群发地址
sub:邮件主题
content:邮件内容
"""
mail_message_2 = MIMEText(content)
mail_message_2['Subject'] = sub
mail_message_2['From'] = from_add
mail_message_2['To'] = ';'.join(to_list)
try:
# server.debuglevel(1) # 记录任何发生的信息
server.send_message(mail_message_2)
# server.close()
return True
except Exception as e:
print(e)
return False
# 编写群发邮件的主函数
if send_mail(mail_add_list, '群发邮件', '试试可不可以'):
print('发送成功!')
else:
print('发送失败!')
# 将群发邮件修改为根据不同接收方,个性化群发邮件
# 从文件获取名字和邮箱地址的列表
def get_contacts(filename):
"""
filename:传入收件人名称及邮箱地址列表文件
return:收件人名称列表和邮箱地址列表
"""
names = []
email_adds = []
with open(filename, mode='r', encoding='utf-8') as contacts_file:
for a_contact in contacts_file:
names.append(a_contact.split()[0])
email_adds.append(a_contact.split()[1])
return names, email_adds
# 读取模版文件,需要导入模板库
from string import Template
def read_template(filename):
"""
filename:读取邮件模版文件
return:模版对象
"""
with open(filename, mode='r', encoding='utf-8') as template_file:
template_file_content = template_file.read()
return Template(template_file_content)
# 编写发送个性化群发邮件主函数
names, email_adds = get_contacts('add_list.txt')
message_template = read_template('messagetxt.txt') # 生成一个邮件模版对象
for name, email_add in zip(names, email_adds):
mail_message_3 = MIMEMultipart()
# 将名字传入模版邮件中
body_2 = message_template.safe_substitute(SOMEONE=name.title())
mail_message_3['From'] = from_add
mail_message_3['To'] = email_add
mail_message_3['Subject'] = '考试信息确认(python测试)'
mail_message_3.attach(MIMEText(body_2, 'plain'))
server.send_message(mail_message_3)
del mail_message_3
server.quit()
add_list.txt 为群发邮件提供邮箱地址列表:
张三 email@qq.com
李四 email@163.com
messagetxt.txt 为群发邮件的邮件模版:
${SOMEONE}:
你好!
请你于10月30日前往考试中心确认考试信息!
PMP考试中心