使用Python实现电子邮件群发功能

在某些应用中,可能会需要由管理员给所有用法群发电子邮件,或者类似的应用。本文代码使用Python详细模拟了这个过程。

import email

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.mime.image import MIMEImage

from email.mime.base import MIMEBase

import smtplib

sender = '你的电子邮件地址'

username = '你的用户名'

userpwd = '你的电子邮箱密码'

# 这里以126邮箱为例,可以根据需要进行修改

host = 'smtp.126.com'

port = 25

# 要发送的邮件内容

body = '''这是《Python程序设计开发宝典》和《Python可以这样学》的作者董付国发来的测试信息。'''

# 要群发的电子邮件地址

recipients = ('第一个收件人电子邮件地址',

'第二个收件人电子邮件地址',

'第三个收件人电子邮件地址')

# 登录自己的电子邮箱服务器

server = smtplib.SMTP(host, port)

server.starttls()

server.login(username, userpwd)

# 开始群发

for recipient in recipients:

# 创建邮件

msg = MIMEMultipart()

msg.set_charset('utf-8')

# 回复地址与发信地址可以不同

# 但是大部分邮件系统在回复时会提示

msg['Reply-to'] = '你的另外一个电子邮件地址'

# 设置发信人、收信人和主题

msg.add_header('From', sender)

msg.add_header('To', recipient)

msg.add_header('Subject', '这是一个测试')

# 设置邮件文字内容

msg.attach(MIMEText(body, 'plain',_charset="utf-8"))

# 添加图片

with open('测试图片.jpg', 'rb') as fp:

msg.attach(MIMEImage(fp.read()))

# 添加附件文件

attachment = MIMEBase('text', 'txt')

with open('测试附件.txt', 'rb') as fp:

attachment.set_payload(fp.read())

email.encoders.encode_base64(attachment)

attachment.add_header('content-disposition',\

'attachment',filename=('utf-8', '', '测试附件.txt'))

msg.attach(attachment)

# 发送邮件

server.send_message(msg)

# 退出邮件服务器

server.quit()

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

ASM 翻译系列第三十六弹:ACFS磁盘组的重平衡操作

原作者:Bane Radulovic 译者: 魏兴华 审核: 魏兴华 DBGeeK社区联合出品 原文链接:http://asmsupportguy....

377110
来自专栏散尽浮华

rsync同步时,删除目标目录比源目录多余文件的方法(--delete)

在日常运维工作中,我们经常用到rsync这个同步神器。有时在同步两个目录时,会要求删除目标目录中比源目录多出的文件,这种情况下,就可用到rsync的--dele...

52260
来自专栏开心的学习之路

Fedora27搭建GPU版TensorFlow

主机:华硕(ASUS)G11飞行堡垒 显卡:GeForce 1070 原操作系统为win10,准备安装Fedora 27,从零开始搭建GPU版TensorF...

37370
来自专栏沈唁志

PHP开发规范之使用phpcbf脚本自动修正代码格式

在前段时间的文章:在PhpStorm中安装使用PHP_CodeSniffer编码规范检查工具中提到过phpcbf脚本

29510
来自专栏计算机编程

SNS项目笔记<四>--RXjs简要用法

在命令行输入ionic g provider youProviderName 在创建好后,系统会自动导入从@angular/http里导入Http这个类,方便后...

15540
来自专栏云计算教程系列

如何在Ubuntu 18.04上将Apache Web Root移动到新位置

在Ubuntu上,Apache Web服务器将其文档存储在/var/www/html中,该文档通常位于具有其余操作系统的根文件系统上。但有时,将文档根移动到另一...

5900
来自专栏技术翻译

分析R中的Elasticsearch数据

您可以在任何可以安装R和Java的计算机上使用纯R脚本和标准SQL访问Elasticsearch数据。您可以使用适用于Elasticsearch的CData J...

25130
来自专栏大魏分享(微信公众号:david-share)

Ansible Tower标准化管理案例

. 配置sudo 1. 修改文件权限 [root@localhost]# cat mod-sudo-1.yml --- - hosts: all ...

39490
来自专栏Brian

Mac 配置终端环境

Mac 配置终端开发环境 ---- 概述 作为一个服务端开发人员基本上都是通过终端和服务器打交道,所以一个好个开发人员那么他的终端配置也是高效的。“工欲善事必先...

459110
来自专栏安恒网络空间安全讲武堂

打个3dsctf,电脑机都开不了?

3DSCTF Malware 3道题 writeup tags: - Reverse - malware ---- 这个ctf有个Malware的题型,...

27190

扫码关注云+社区

领取腾讯云代金券