python 发送邮件的示例代码(Python2/3都可以直接使用)
作者:柯广 时间:2023-05-12 08:53:56
发送普通邮件
发送文本和html普通邮件如下:
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
def get_server(username):
"""
通过邮箱地址获得邮箱服务器
:param username:用户名,比如:123456@qq.com
:return: 邮箱服务器地址,可以根据自己实际业务添加,比如:smtp.qq.com
"""
servers = {'qq' : 'smtp.qq.com'
, '126' : 'smtp.126.com'
, '163' : 'smtp.163.com'
, '139' : 'smtp.139.com'}
for key,value in servers.items():
if key in username:
return value
def send_mail(username, password, to, sender_name, subject, content, email_type):
"""
:param username:
:param password:
:param to: 接收者列表 []
:param sender_name:
:param subject:
:param content:
:param email_type:
:return:
"""
from_addr = username
password = password
to_addr = to
smtp_server = get_server(username)
# 邮件正文是MIMEText类型
msg = MIMEText('%s'%(content), '%s'%(email_type), 'utf-8')
msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
msg['To'] = _format_addr('<%s>' % to_addr)
msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()
# 普通登陆端口是25,带ssl验证时候端口是465
# smtp_server = 'smtp.exmail.qq.com'
# server = smtplib.SMTP_SSL(smtp_server, 465)
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
if __name__ == '__main__':
"""发送简单文本邮件"""
username = '******@126.com'
password = '******'
sender_name = '******@126.com'
subject = 'test 邮件'
content = '<html><h1>ikeguang 的来信</h1></html> <a href="http://www.ikeguang.com" rel="external nofollow" >ikeguang.com</a></html>'
# email_type 取值:plain,文本类型邮件;html,html类型邮件
email_type = 'html'
_to = ['******@126.com', '******@qq.com']
for to in _to:
send_mail(username, password, to, sender_name, subject, content, email_type)
print('send mail to %s success' % to)
发送带附件的邮件
def send_mail_multipart(username, password, to, sender_name, subject, content, email_type):
from_addr = username
password = password
to_addr = to
smtp_server = get_server(username)
msg = MIMEMultipart()
# 邮件正文是MIMEText类型
msg.attach(MIMEText('%s'%(content), '%s'%(email_type), 'utf-8'))
msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
msg['To'] = _format_addr('<%s>' % to_addr)
msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()
# 读取附件
filename = 'D:/我的文件/Codes/PyCode/source/image/0.jpg'
with open(filename, 'rb') as f:
# 设置附件的MIME和文件名,这里是png类型:
mime = MIMEBase('image', 'jpg', filename='0.jpg')
# 加上必要的头信息:
mime.add_header('Content-Disposition', 'attachment', filename='0.jpg')
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '0')
# 把附件的内容读进来:
mime.set_payload(f.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)
# 普通登陆端口是25,带ssl验证时候端口是465
# smtplib.SMTP_SSL(smtp_server, 465)
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
来源:http://www.ikeguang.com/?p=331
标签:python,发送,邮件
0
投稿
猜你喜欢
HTML5硝烟弥漫
2009-07-06 14:44:00
一文带你重温一下Python的对象模型
2022-09-15 15:52:52
PHP手机号码归属地查询代码(API接口/mysql)
2023-10-26 04:35:44
python 对excel交互工具的使用详情
2021-11-25 19:10:06
JavaScript中document.forms[0]与getElementByName区别
2024-04-17 09:55:58
MYSQL SET类型字段的SQL操作知识介绍
2024-01-20 20:00:38
python绘制堆叠条形图介绍
2021-07-01 23:12:36
MySQL的Query Cache图文详解
2024-01-28 01:18:42
Mysql数据库高级用法之视图、事务、索引、自连接、用户管理实例分析
2024-01-15 20:17:00
常用原生JS兼容性写法汇总
2024-04-22 22:38:15
微信小程序点餐系统开发常见问题汇总
2024-04-10 10:52:00
用JS找出字符串中出现次数最多的字母
2007-11-12 13:40:00
Ajax标签导航效果
2013-07-17 02:02:16
如何制作一个从Access数据库中读取记录的下拉菜单?
2010-06-29 21:23:00
Python文本处理之按行处理大文件的方法
2023-01-24 11:11:34
MySQL获得当前日期时间函数示例详解
2024-01-27 07:54:48
详解python开发环境搭建
2023-09-17 21:37:25
Windows环境下实现批量执行Sql文件
2024-01-14 14:12:40
Python蛇形方阵的实现
2023-06-27 16:33:21
MySQL关键字Distinct的详细介绍
2024-01-27 11:44:47