python群发邮箱软件下载_Python模块smtplib让群发邮件变得简单

1.smtplib模块介绍

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

Python创建 SMTP 对象语法如下:

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

smtplib模块负责发送邮件

smtplib模块还提供了SMTP_SSL类和LMTP类,对它们的操作与SMTP基本一致。

host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如: hellobi.com,这个是可选参数。

port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。

local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。

email.utils模块中提供了几个有用的方法:

email.utils.quote(str)

将str中的反斜杠替换为两个反斜杠的新字符串,并将双引号替换为反斜杠双引号。

email.utils.unquote(str)

返回一个不带引号的str的新字符串。如果str结束并以双引号开头,则会被剥离。同样,如果str结束并以尖括号开始,它们将被剥离。

email.utils.parseaddr(address)

解析地址 - 应该是某个包含地址的字段(例如“ 收件人”或“ 抄送”)的值,并将其解析为其真实姓名和 电子邮件地址部分。返回该信息的元组,除非解析失败,在这种情况下返回2元组。('', '')

email.utils.formataddr(pair)

与此相反parseaddr(),这需要表单的2元组并返回适合于To或 Cc标题的字符串值。如果pair的第一个元素为false,则第二个元素将不加修改地返回。(realname, email_address),实际上,parseaddr(), formataddr(),两者互逆。

email.utils.getaddresses(fieldvalues)

此方法返回由返回的表单的2元组列表parseaddr()。 fieldvalues是可能返回的一系列头字段值 Message.get_all。下面是一个简单的例子,它可以获取消息的所有收件人:

from email.utils import getaddresses

tos = msg.get_all('to', [])

ccs = msg.get_all('cc', [])

resent_tos = msg.get_all('resent-to', [])

resent_ccs = msg.get_all('resent-cc', [])

all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)

3.发送email的其它几个模块

email模块负责构造邮件

类email.mime.text.MIMEText(_text),是使用字符串_text来生成MIME对象的主体文本

MIME是(Multipurpose Internet Mail Extensions) 多用途互联网邮件扩展类型

MIME设置的目的是为了在发送电子邮件时附加多媒体数据,让邮件根据其类型进行处理。

from email.mime.text import MIMEText

如果你想让你的邮件标题使用非ASCII字符集,就要使用email.header编码非ASCII字符集

from email.header import Header

email.header.Header(s=None, charset=None, maxlinelen=None, header_name=None,

continuation_ws=' ', errors='strict')

创建一个能容纳不同字符集的字符串的MIME对象的标头

s:初始标头,即要编码之前的标头

chatset:字符集,默认为ASCII

maxlinelen:标头名的行的最大长度,默认为76

header_name:标头名,默认无

continuation_ws:默认为单个空格字符

errors:直接传递到Header的append()方法里

email.encoders 编码器

from email import encoders

其它

from email.mime.multipart import MIMEMultipart

email.mime.multipart.MIMEMultipart(_subtype='mixed', boundary=None, _subparts=None, **_params)

def _format_addr(s):

# 这个函数的作用是把一个标头的用户名编码成utf-8格式的,如果不编码原标头中文用户名,用户名将无法被邮件解码

name, addr = parseaddr(s)

return formataddr((Header(name, "utf-8").encode(), addr))

# Header().encode(splitchars=';, \t', maxlinelen=None, linesep='\n')

# 功能:编码一个邮件标头,使之变成一个RFC兼容的格式

MIMEMultipart是MIMEBase的一个子类,多个MIME对象的集合

_subtype默认值为mixed。boundary是MIMEMultipart的边界,默认边界是可数的。

如果是txt/doc/csv/xls等plain格式的话用email.mime.MIMEApplication去发就行了,但如果是比如pdf/jpg/png等格式发的话,用email.mime.MIMEBase去发

# 如果是pdf/jpg/png等格式

from email.mime.base import MIMEBase

email.mime.base.MIMEBase(_maintype, _subtype, **_params)

# fp = open(filename,"rb")

# file = MIMEBase("application","pdf",filename = filename)

# 如果是txt/doc/csv/xls等plain格式的话

from email.mime.application import MIMEApplication

fp = open(att_file, 'rb')

file = MIMEApplication(fp.read())

4.实例

#!/usr/bin/env python3.4

# encoding: utf-8

"""

Created on 18-5-17

@title: '测试版'

@author: Xusl

"""

import smtplib

from email.mime.text import MIMEText

from email.header import Header

sender = 'xxxxxxxx@163.com'

receiver = 'xxxxxxxx@chyjr.com'

subject = 'python email test'

smtpserver = 'smtp.163.com'

username = 'xxxxxxxx@163.com'

password = 'xxxxxxxx'

msg = MIMEText('

你好

', 'html', 'utf-8')

msg['Subject'] = Header(subject, 'utf-8')

smtp = smtplib.SMTP()

smtp.connect(smtpserver)

smtp.login(username, password)

smtp.sendmail(sender, receiver, msg.as_string())

smtp.quit()

发送成功

写了一个群发邮件的功能,代码已上传Github。欢迎指点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值