使用smtp包发送邮件还依赖email的一些方法

发送邮件主要分为三步:

    1,定义邮箱参数:邮箱服务器地址,邮箱用户名,邮箱密码,邮件发送方,邮件接收方,邮件标题,邮件内容

    2,配置发送内容

    3,实例化邮箱,连接邮箱,登陆邮箱,发送邮件

代码如下:

import smtplib
from email.mime.text import MIMEText
from email.header import Header #定义邮箱参数
mail_sever = 'smtp.163.com' #邮箱服务器地址
mail_user = 'xxx@163.com' #邮箱用户名
mail_pass = 'xxx' #邮箱密码

sender = 'xxx@163.com' #邮件发送方
reciver = 'xxx@qq.com' #邮件接收方

subject = 'python' #邮件标题
content = 'over' #邮件内容 #配置发送内容
msg = MIMEText(content,_subtype='plain',_charset='utf-8') # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
msg['subject'] = Header(subject,'utf-8')    #邮件标题
msg['From'] = sender #邮件发送方
msg['To'] = reciver               #邮件接收方 #实例化邮箱
smtp = smtplib.SMTP() #实例化邮箱
smtp.connect(mail_sever)                 #连接邮箱服务器
smtp.login(user=mail_user,password=mail_pass) #登陆邮箱
smtp.sendmail(sender,reciver,msg.as_string())     #发送邮件
print('ok')

补充:

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

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

Python创建 SMTP 对象语法如下:

import smtplib

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

参数说明:

  • host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如:w3cschool.cn,这个是可选参数。
  • port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下SMTP端口号为25。
  • local_hostname: 如果SMTP在你的本机上,你只需要指定服务器地址为 localhost 即可。

Python SMTP对象使用sendmail方法发送邮件,语法如下:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

参数说明:

  • from_addr: 邮件发送者地址。
  • to_addrs: 字符串列表,邮件发送地址。
  • msg: 发送消息

这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。

添加附件的方法:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
#定义邮箱参数
mail_sever = 'smtp.163.com' #邮箱服务器地址
mail_user = 'xxx@163.com' #邮箱用户名
mail_pass = 'xxxx' #邮箱密码
sender = 'xxx@163.com' #邮件发送方
reciver = 'xxx@163.com' #邮件接收方
subject = 'python' #邮件标题 #配置发送内容
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
# msg = MIMEText(content,_subtype='plain',_charset='utf-8')
msg = MIMEMultipart()
#邮件标题
msg['subject'] = Header(subject,'utf-8')
#邮件发送方
msg['From'] = sender
#邮件接收方
msg['To'] = reciver
#邮件正文内容
msg.attach(MIMEText('邮件发送测试...','plain','utf-8'))
#构造附件1
att1 = MIMEText(open(r"C:\\Users\\jfw2462\\Desktop\\工作\\环境\\服务器密码IP信息.xlsx",'rb').read(),'base64','utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="test.xlsx"'
msg.attach(att1)
#实例化邮箱
smtp = smtplib.SMTP()
#连接邮箱服务器
smtp.connect(mail_sever)
#登陆邮箱
smtp.login(user=mail_user,password=mail_pass)
#发送邮件
smtp.sendmail(sender,reciver,msg.as_string())
print('ok')

python3 smtplib发送邮件的更多相关文章

  1. Python3实现发送邮件和发送短信验证码

    Python3实现发送邮件和发送短信验证码 Python3实现发送邮件: import smtplib from email.mime.text import MIMEText from email. ...

  2. python3使用smtplib发送邮件,带xlsx附件

    一.概述 最近在做一个统计报表,需要发送邮件,并带附件的. 在之前的文章中 https://www.cnblogs.com/xiao987334176/p/10022026.html 已经实现了发送邮 ...

  3. Python3 SMTP发送邮件

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

  4. 吴裕雄--天生自然python学习笔记:Python3 SMTP发送邮件

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

  5. Python3.7 发送邮件 报‘[WinError 10061] 由于目标计算机积极拒绝,无法连接’错误的解决方法

    背景: 最近在练习Python 的邮件发送功能 照着教程写了一个简单的demo 结果运行时报如下错误:[WinError 10061] 由于目标计算机积极拒绝,无法连接. 如图: 解决路径如下: St ...

  6. python smtplib发送邮件遇到的认证问题

    python的smtplib模块主要是用来发送邮件的,使用起来比较方便. 使用程序发送邮件只需要写以下几行代码就OK了: #!/usr/bin/env python import smtplib s ...

  7. python smtplib 发送邮件简单介绍

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

  8. Python3+smtplib+poplib+imaplib实现发送和收取邮件(以qq邮箱为例)

    一.说明 1.1 程序说明 (1)smtp是邮件发送协议:pop和imap都是邮件接收协议,两者的区别通常的说法是imap的操作会同步到邮箱服务器而pop不会,表现上我也不是很清楚 (2)本程序实现使 ...

  9. 【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls

    #!/usr/bin/python # coding:utf- import smtplib from email.MIMEText import MIMEText from email.Utils ...

随机推荐

  1. 创建逻辑卷,格式化为xfs格式化,在线扩容

    创建逻辑卷,并且格式化为xfs格式化好,然后在线扩容 删除逻辑卷组

  2. ISODateTimeFormat 转换2019-08-15T00:36:49.366456463Z 日期格式

    import java.text.*; import java.text.SimpleDateFormat; import java.util.*; import org.joda.time.Date ...

  3. React/Vue里的key到底有什么用?看完这篇你就知道了!(附demo代码)

    网上有很多博客讲到,React.Vue里的key,与 Virtual DOM 及 DOM diff 有关, 可以用来唯一标识DOM节点,提高diff效率,云云. 这大致是对的,但是,大多讲得语焉不详, ...

  4. docker搭建简单mysql主从

    关于MySQL主从模式,如果我们直接在本机上搭建的话,是没法搭建的,只能借助于虚拟机,但有的时候我们又需要搭建一个主从集群,以便于进行一些功能性的测试.这个时候我们就可以尝试使用docker,借助于d ...

  5. 关于Redis客户端显示中文或中文乱码问题的解决

    关于Redis客户端不显示中文或者显示中文乱码,网上有些解决办法不全面的,都是漏了步骤不讲,简直瞎扯.在此记录一下解决方式. 刚开始使用Redis客户端的时候,本身就是默认不支持显示中文的. 例如,进 ...

  6. 自动AC机qwq(大雾)以及trie图fail图的一些结论

    1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string&g ...

  7. 1003 Emergency (25分)

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  8. 利用宝塔面板搭建 Laravel 5.5 环境

    1.更新系统 yum install epel-release #rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest- ...

  9. 【JVM】空间分配担保机制

    抛几个问题: 1.谁进行空间担保? JVM使用分代收集算法,将堆内存划分为年轻代和老年代,两块内存分别采用不同的垃圾回收算法,空间担保指的是老年代进行空间分配担保 2.什么是空间分配担保? 在发生Mi ...

  10. hdu3338 最大流

    题意:             给你一个N*M的网格,上面有的有一些数字,要求填充数字,满足的规则是这样: 答案不唯一,只要满足和的关系就可以,还有就是只能用1--9之间的数字填充,而且每一行或一列可 ...