python实现发送邮件功能


Posted in Python onJuly 22, 2017

本文实例为大家分享了python实现发送邮件功能的具体代码,供大家参考,具体内容如下

依赖:

Python代码实现发送邮件,使用的模块是smtplib、MIMEText,实现代码之前需要导入包:

import smtplib
from email.mime.text import MIMEText

使用163邮件发送邮件,具体代码实现如下:

import smtplib
from email.mime.text import MIMEText
'''
发送邮件函数,默认使用163smtp
:param mail_host: 邮箱服务器,16邮箱host: smtp.163.com
:param port: 端口号,163邮箱的默认端口是 25
:param username: 邮箱账号 xx@163.com
:param passwd: 邮箱密码(不是邮箱的登录密码,是邮箱的授权码)
:param recv: 邮箱接收人地址,多个账号以逗号隔开
:param title: 邮件标题
:param content: 邮件内容
:return:
'''

def send_mail(username, passwd, recv, title, content, mail_host='smtp.163.com', port=25):
  msg = MIMEText(content)  # 邮件内容
  msg['Subject'] = title   # 邮件主题
  msg['From'] = username   # 发送者账号
  msg['To'] = recv      # 接收者账号列表
  smtp = smtplib.SMTP(mail_host, port=port)   # 连接邮箱,传入邮箱地址,和端口号,smtp的端口号是25
  smtp.login(username, passwd)          # 登录发送者的邮箱账号,密码
  # 参数分别是 发送者,接收者,第三个是把上面的发送邮件的 内容变成字符串
  smtp.sendmail(username, recv, msg.as_string())
  smtp.quit() # 发送完毕后退出smtp
  print('email send success.')

if __name__ == '__main__':
  email_user = 'xxxx@163.com' # 发送者账号
  email_pwd = 'xxxxx' # 发送者密码,授权码
  maillist = 'xxxx@qq.com'
  title = '测试邮件标题'
  content = '这里是邮件内容'
  send_mail(email_user, email_pwd, maillist, title, content)

163邮箱的授权码获取方法如下:

1. 登录163邮箱,点击设置-POP3/SMTP/IMAP,如下:

python实现发送邮件功能

2. 开启SMTP服务且可以查询SMTP的host地址:

python实现发送邮件功能

3. 点击客户端授权密码,可以重置授权码:

python实现发送邮件功能

使用QQ邮件发送邮件,具体代码实现如下:

import smtplib
from email.mime.text import MIMEText
'''
发送邮件函数,默认使用163smtp
:param mail_host: 邮箱服务器,qq邮箱host: smtp.qq.com
:param port: 端口号,qq邮箱的默认端口是: 456
:param username: 邮箱账号 xx@163.com
:param passwd: 邮箱密码(不是邮箱的登录密码,是邮箱的授权码)
:param recv: 邮箱接收人地址,多个账号以逗号隔开
:param title: 邮件标题
:param content: 邮件内容
:return:
'''
#qq邮箱发送邮件
def send_mail(username, passwd, recv, title, content, mail_host='smtp.qq.com', port=456):
  msg = MIMEText(content)  # 邮件内容
  msg['Subject'] = title   # 邮件主题
  msg['From'] = username   # 发送者账号
  msg['To'] = recv      # 接收者账号列表
  smtp = smtplib.SMTP_SSL(mail_host, port=port)   # 连接邮箱,传入邮箱地址,和端口号,smtp的端口号是25
  smtp.login(username, passwd)          # 登录发送者的邮箱账号,密码
  # 参数分别是 发送者,接收者,第三个是把上面的发送邮件的 内容变成字符串
  smtp.sendmail(username, recv, msg.as_string())
  smtp.quit() # 发送完毕后退出smtp
  print('email send success.')

if __name__ == '__main__':
  email_user = 'xxx@qq.com' # 发送者账号
  email_pwd = 'WOSHINIGE123' # 发送者密码,授权码
  maillist = 'xxxx@qq.com'
  title = '测试邮件标题'
  content = '这里是邮件内容'
  send_mail(email_user, email_pwd, maillist, title, content)

多个 收件人且带附件:

# import smtplib
# from email.mime.text import MIMEText
# '''
# 发送邮件函数,默认使用163smtp
# :param mail_host: 邮箱服务器,qq邮箱host: smtp.163.com
# :param port: 端口号,qq邮箱的默认端口是: 25
# :param username: 邮箱账号 xx@163.com
# :param passwd: 邮箱密码(不是邮箱的登录密码,是邮箱的授权码)
# :param recv: 邮箱接收人地址,多个账号以逗号隔开
# :param title: 邮件标题
# :param content: 邮件内容
# :return:
# '''
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

#邮箱服务器地址
email_host = 'smtp.163.com'
#发送者
email_user = 'xxxx@163.com'
#授权码
email_pwd = 'WOSHINIGE123'
#多个收件人,使用分号分隔
maillist ='xxxx@qq.com;aaaa@qq.com'
#对多个收件人进行分割,以;为标准,返回结果是list['xxxx@qq.com','aaaa@qq.com']
email_info = maillist.split(';')
#构造一个发附件的邮件内容对象
new_msg = MIMEMultipart()
#邮件正文内容
new_msg.attach(MIMEText('test email.....'))
#邮件主题
new_msg['Subject'] = 'test email'
#邮件发送者
new_msg['From'] = email_user
#邮件接收者,多个收件人的账号使用,连接,传入类型是str
new_msg['To'] = ','.join(email_info)
#打开a.txt读取文本内容
att = MIMEText(open('a.txt').read())
att["Content-Type"] = 'application/octet-stream'
# 发送附件就得这么写,固定格式,filename指定附件的名字
att["Content-Disposition"] = 'attachment; filename="haha.txt"'
new_msg.attach(att)
# 连接邮箱,传入邮箱地址,和端口号,smtp的端口号是25
smtp = smtplib.SMTP(email_host, port=25)
# 发送者的邮箱账号,密码,先登录
smtp.login(email_user, email_pwd)
smtp.sendmail(email_user, email_info, new_msg.as_string())
smtp.quit()
print('email send success.')

多个收件人时账号之间使用分号;分割,进行smtp.sendmail(传入的多个收件人类型是list);new_msg['TO'] = recv,接收的类型是str

 使用类实现邮件的发送,即可发送多人也可发送附件:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

class SendMail(object):
 def __init__(self, username, passwd, recv, title, content, file=None, email_host='smtp.163.com', port=25):
  self.username = username
  self.passwd = passwd
  self.recv = recv
  self.title = title
  self.content = content
  self.file = file
  self.email_host = email_host
  self.port = port

 def send_mail(self):
  msg = MIMEMultipart()
  #发送内容的对象
  if self.file:#处理附件的
   att = MIMEText(open(self.file, encoding='utf-8').read())
   att["Content-Type"] = 'application/octet-stream'
   att["Content-Disposition"] = 'attachment; filename="%s"'%self.file
   msg.attach(att)
  msg.attach(MIMEText(self.content))#邮件正文的内容
  msg['Subject'] = self.title # 邮件主题
  msg['From'] = self.username # 发送者账号
  #将多个账号'aaa.@qq.com;bbbb@163.com' 以分号分割,分割为list
  self.recv = self.recv.split(';')
  if isinstance(self.recv, list):
   msg['To'] = ','.join(self.recv)
  else:
   msg['To'] = self.recv # 接收者账号列表
  if self.username.endswith('qq.com'): #如果发送者是qq邮箱
   self.smtp = smtplib.SMTP_SSL(self.email_host, port=self.port)
  else:
   self.smtp = smtplib.SMTP(self.email_host, port=self.port)
  #发送邮件服务器的对象
  self.smtp.login(self.username, self.passwd)
  try:
   self.smtp.sendmail(self.username, self.recv, msg.as_string())
  except Exception as e:
   print('出错了。。', e)
  else:
   print('发送成功!')
  self.smtp.quit()

if __name__ == '__main__':
 m = SendMail(
  username='zzzzz@163.com', passwd='xxxxxxx',file='a.txt', recv='xxxxxx@qq.com;xxxxxx@qq.com',
  title='多个收件人', content='哈哈哈啊哈哈哈哈', email_host='smtp.163.com', port=25
 )
 m.send_ma

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
Python生成密码库功能示例
May 23 Python
Python 查看文件的编码格式方法
Dec 21 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
Python关于反射的实例代码分享
Feb 20 Python
Pycharm修改python路径过程图解
May 22 Python
使用pytorch实现论文中的unet网络
Jun 24 Python
pycharm永久激活超详细教程
Oct 29 Python
python爬虫筛选工作实例讲解
Nov 23 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 #Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 #Python
安装Python的教程-Windows
Jul 22 #Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 #Python
Python编程之string相关操作实例详解
Jul 22 #Python
Python编程之序列操作实例详解
Jul 22 #Python
Python实现登录接口的示例代码
Jul 21 #Python
You might like
php实现文件下载更能介绍
2012/11/23 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
php获取apk包信息的方法
2014/08/15 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
php实现文件预览功能
2017/05/23 PHP
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
解析vue中的$mount
2017/12/21 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
深入浅析python定时杀进程
2016/06/06 Python
COSETTE官网:奢华,每天
2020/03/22 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
甜品店的创业计划书范文
2014/01/02 职场文书
家长对孩子评语
2014/01/30 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
颐和园导游词
2015/01/30 职场文书
老公保证书怎么写
2015/02/26 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
工作一年自我鉴定
2019/06/20 职场文书