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操作mysql中文显示乱码的解决方法
Oct 11 Python
Python实现方便使用的级联进度信息实例
May 05 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 Python
python实现远程控制电脑
May 23 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
python中JWT用户认证的实现
May 18 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
flask开启多线程的具体方法
Aug 02 Python
Cpython解释器中的GIL全局解释器锁
Nov 09 Python
Python操作CSV格式文件的方法大全
Jul 15 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备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
python的迭代器与生成器实例详解
2014/07/16 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
一张图带我们入门Python基础教程
2017/02/05 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
如何在python中执行另一个py文件
2020/04/30 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
人力资源专员自我评价怎么写
2013/09/19 职场文书
长辈证婚人证婚词
2014/01/09 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
暑假学习心得体会
2014/09/02 职场文书
顶岗实习计划书
2015/01/16 职场文书
中学总务处工作总结
2015/08/12 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书