使用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. Java8中的Stream流式操作 - 入门篇

    作者:汤圆 个人博客:javalover.cc 前言 之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧 因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一 ...

  2. springboot项目整合druid数据库连接池

    Druid连接池是阿里巴巴开源的数据库连接池项目,后来贡献给Apache开源: Druid的作用是负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个: D ...

  3. Cobalt Strike使用教程一

    Cobalt Strike使用教程一     0x00 简介 Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器.自3.0以后已经不在使用Metasploit框架而作为 ...

  4. 弦图及其在 OI 中的现代应用

    八月份的时候得知要填综评表格,综评表格里面又需要一个研究性学习报告,而我连研究性学习课的老师长啥样都不知道.于是我把两份 OI 笔记拼拼凑凑成了这篇文章充当两份研究性学习报告之一(另一份可能更有趣一些 ...

  5. matlab帮助文档

    matlab的纯文本帮助命令有多种,help.lookfor.which.doc.get.type等 help命令  help命令用来查询一个函数的使用方式. help fun %fun是函数名称   ...

  6. JAVAEE_Servlet_17_关于乱码问题

    关于乱码问题 * 数据传递过程中的乱码 解释:数据传递过程中的乱码是指: 将数据从浏览器发送给服务器的时候,服务器接收到的数据是乱码的. - ISO-8859-1 是国际标准码,不支持中文编码,它兼容 ...

  7. python set 一些用法

    add(增加元素) name = set(['Tom','Lucy','Ben']) name.add('Juny') print(name)#输出:{'Lucy', 'Juny', 'Ben', ' ...

  8. vue route 跳转

    index.js { path: '/grouporder/grouporderdetail/id/:id', name: '/grouporder/grouporderdetail/id/', co ...

  9. 【并发编程】线程池是否需要手动关闭吗?以Hutool中的线程池为例

    Hutool工具包中使用线程池的API是: ThreadUtil.execute() /** * 直接在公共线程池中执行线程 * * @param runnable 可运行对象 */ public s ...

  10. hdu5105给你一个方程,让你求极值(直接暴力)

    题意:       给你一个方程f[x] = abss(a * x * x * x + b * x * x + c * x + d); 然后给你各个参数还有x(-100<x<100)的取值 ...