SMTP

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
Python创建 SMTP 对象语法如下:

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

参数说明:

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 协议中定义的格式。

通过python发邮件步骤

前提:开通了第三方授权,可以使用smtp服务
1.创建smtp对象
2.连接smtp服务器,默认端口号都是25
3.登陆自己的邮箱账号
4.调用发送消息函数,参数:发件人、收件人、消息内容
5.关闭连接

发送邮件的例子

import email.mime.multipart
import email.mime.text
import smtplib msg = email.mime.multipart.MIMEMultipart() #通过这个类创建消息
msg['from'] = '97001@qq.com' # 邮件发件人
msg['to'] = '14148@qq.com' # 邮件收件人
msg['subject'] = 'It's a test mail' # 邮件主题 context = ''' # 邮件正文
<h1>老师好</h1>
你好,
这是一封自动发送的邮件。
www.ustchacker.com hello
'''
text = email.mime.text.MIMEText(_text=context, _subtype="html") # 定义文本以后,标明将context指定成什么格式,html,txt
msg.attach(text) # 邮件消息注册 em = smtplib.SMTP_SSL()
em.connect("smtp.qq.com", 465)
em.login("97001@qq.com", '')
em.sendmail(from_addr='97001@qq.com', to_addrs='14148@qq.com', msg=msg.as_string())
em.quit() # 关闭连接

发送带附件的邮件

import smtplib
import email.mime.multipart
import email.mime.text
import os
from email import encoders
msg = email.mime.multipart.MIMEMultipart()
msg['from'] = '18910148469@163.com'
msg['to'] = '97001@qq.com;14148@qq.com'
msg['subject'] = 'mail' context = ''' # 邮件正文
<h1>老师好</h1>
你好,
这是一封自动发送的邮件。
www.ustchacker.com hello
''' txt = email.mime.text.MIMEText(_text=content, _subtype="html")
msg.attach(txt)
#############
attfile = 'test.py'
basename = os.path.basename(attfile)
fp = open(attfile, 'rb') #打开文件,读出文件字符串
att = email.mime.text.MIMEText(fp.read(), 'html', 'utf-8') #通过MIMT ext()类来创建一个对象att,传入文件读出内容
att["Content-Type"] = 'application/octet-stream'
# 增加att的头部信息,并指定文件名字
att.add_header('Content-Disposition', 'attachment',filename=('utf-8', '', basename)) #three-tuple of (charset, language, value),encoders.encode_base64(att)
msg.attach(att) #添加到msg消息中msg.attach(att)
##########
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com', '')
smtp.login('3456346@163.com', '')
smtp.sendmail(from_addr='18910148469@163.com', to_addrs=['97001@qq.com', '14148@qq.com'], msg=msg.as_string())
smtp.quit()

使用第三方模块

yagmail库的源代码只有几百行代码,它是对SMTP以及email模块的一个智能封装。

安装

pip install yagmail

官方例子

import yagmail
yag = yagmail.SMTP()
contents = [
"This is the body, and here is just text http://somedomain/image.png",
"You can find an audio file attached.", '/local/path/to/song.mp3'
]
yag.send('to@someone.com', 'subject', contents) # Alternatively, with a simple one-liner:
yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', contents)

我们自己写一个

import yagmail

args={
"user": "12123123@163.com", # 邮箱账号
"password": "", # 邮箱密码
"host": "smtp.163.com", # SMTP服务器
"port": "" # SMTP服务器端口
} emailList=["13300000@qq.com","217400007@qq.com", "97400001@qq.com"] # 可以一次性发送邮件给多个人
email = yagmail.SMTP(**args)
email.send(to='971010101@qq.com',subject="mail",contents="test mail",cc="97460001@qq.com")

详解:

to  发送给谁

subject  主题

content  内容 它传递的是一个列表,这里还可以带附件 contents=[body, 'imag.png', 'test.pdf'] 其中body是正文

cc   抄送给谁

python邮件处理的更多相关文章

  1. python邮件发送脚本

    转自:http://phinecos.cnblogs.com/ #!/usr/bin/python #coding=utf-8 #@author:dengyike #@date:2010-09-28 ...

  2. centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本)

    centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本) #####################     sendmail.py  begin     ######## ...

  3. python 邮件基础篇

    python 操作邮件,不是很方便,说实话还不是理解的特别透彻,这次想把自己碰到的东西总结下来 邮件有imap,pop,imap协议,这次使用的是imap4协议,主要用了imap4和mail类, 代码 ...

  4. python 邮件

    1:文件形式的邮件 01.#!/usr/bin/env python3 02.#coding: utf-8 03.import smtplib 04.from email.mime.text impo ...

  5. python 邮件发送 脚本

    import smtplib from email.header import Header from email.mime.text import MIMEText from_addr = 'XXX ...

  6. Python 邮件发送

    python发送各类邮件的主要方法   python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点.     一.相关模块介绍 ...

  7. python邮件SMTP的GUI编程

    写的是python中smtp的gui编程,用的163邮箱给qq邮箱发送邮件做测试,如果你发现你的发送失败,试着用以下方法解决: 1.网页登陆你的邮箱,设置中查看smtp是否开启,比如163邮箱的smt ...

  8. Python邮件发送脚本(Linux,Windows)通用

    脚本 #!/usr/bin/python #-*- coding:utf-8 -*- #Python Mail for chenglee #if fileformat=dos, update file ...

  9. python邮件

    解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...

随机推荐

  1. git移除文件夹的版本控制

    案例背景:git提交的时候把bin文件下的各种.dll提交上去了,然后每次提交都得提交好多文件,很容易忽略你真正修改的东西,故对这些不必要的东西忽略掉 解决方案:git rm 命令参数 具体实施: 1 ...

  2. when coding in a fresh system

    I have designed a component of a web system with my workmate. In detail, I am just a coder instead o ...

  3. gRPC版本的 Google APIs

    gRPC将是未来google所有客户端的库标准(DevoxxFR), 这句话的出处: https://twitter.com/chanezon/status/585724143003402240    ...

  4. Web 开发者学习路线图

      2017 Web 开发者学习路线图(头图源自谷歌) 本文是源自 Github 上 Kamran Ahmed 建立的一个仓库.在文中,作者为他的老教授分享了一组成为前端与后端开发者以及 Devops ...

  5. Vue 实现复制到粘贴板功能

    vue 实现复制到粘贴板功能需要依赖到 clipboard.js 1. 首先需要安装依赖  * 出现错误的话,可以试试 cnpm npm install --save vue-clipboard2 2 ...

  6. p2p状态码

    因为需要的确定状态太多,减少数据库的压力,采取二进制表示状态码 状态码工具类 package com.xmg.p2p.base.util; /** * 用户状态类,记录用户在平台使用系统中所有的状态. ...

  7. @transient加在属性前的作用

    我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable ...

  8. git下配置github sshkey

    教程看这里 http://xiaxveliang.blog.163.com/blog/static/29708034201341244759225/

  9. lua5.3+luasocket

    今天安装了luasocket,遇到了很多错误,百度并没有什么针对lua5.3的版本安装luasocket的文章,在这里记录一下. 1.下载lua5.3 下载到了lua-5.3.5.tar.gz版本的l ...

  10. leetcode题解之分解字符串域名

    1.题目描述 A website domain like "discuss.leetcode.com" consists of various subdomains. At the ...