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

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

参考:https://www.cnblogs.com/ysocean/p/7653252.html

   https://blog.csdn.net/qq_42543250/article/details/81586663

   https://www.cnblogs.com/captainmeng/p/7683395.html

   http://www.cnblogs.com/yufeihlf/p/5726619.html

在第三方客户端使用stmp之前需要开启邮箱中的POP3/SMTP/IMAP服务,并获取到授权码。这里使用是163邮箱

纯文本邮件

 import smtplib
from email.header import Header
from email.mime.text import MIMEText # 第三方 SMTP 服务
mail_host = "smtp.163.com" # SMTP服务器
mail_user = "*******@163.com" # 用户名
mail_pass = "*******" # 授权密码,非登录密码 sender = '********@163.com' # 发件人邮箱(最好写全, 不然会失败)
receivers = ['********@163.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 content = '这里是测试文本!' #测试文本
title = 'smtp邮件测试' # 邮件主题 #内置参数执行
def sendEmail(): message = MIMEText(content, 'plain', 'utf-8') # 内容, 格式, 编码
message['From'] = "{}".format(sender)
message['To'] = ",".join(receivers)
message['Subject'] = title try:
smtpObj = smtplib.SMTP_SSL(mail_host) # 启用SSL发信, 端口默认是25(可以不写)
smtpObj.login(mail_user, mail_pass) # 登录验证
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
print("mail has been send successfully.")
except smtplib.SMTPException as e:
print(e) #参数传入执行
def send_email2(SMTP_host, from_account, from_passwd, to_account, subject, content):
email_client = smtplib.SMTP(SMTP_host)
email_client.login(from_account, from_passwd)
# create msg
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8') # subject
msg['From'] = from_account
msg['To'] = to_account
email_client.sendmail(from_account, to_account, msg.as_string()) email_client.quit() if __name__ == '__main__':
sendEmail()

插入图片(非附件形式)

 # coding: utf-8

 import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders mail_host = 'smtp.163.com'
receivers = ['******@163.com']
receiver = ','.join(receivers)
sender = '******@163.com'
password = '*****' msg = MIMEMultipart('alternative')
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = '主题'
#插入一个html格式
msg.attach(MIMEText('<html><body><h1>Hello</h1>' +
'<p><img src="cid:0"></p>' +
'</body></html>', 'html', 'utf-8')) file_path = r'E:\stmp_test\img.png'
with open(file_path, 'rb') as f:
mm = MIMEBase('image', 'png', filename='b.png')    # 设置附件的MIME和文件名,这里是png类型:
mm.add_header('Content-Disposition', 'attachment', filename='b.jpg')  #加上必要的头信息
mm.add_header('Content-ID', '<0>')       #头信息
mm.add_header('X-Attachment-Id', '')     #头信息
mm.set_payload(f.read())    # 把附件的内容读进来
encoders.encode_base64(mm)
msg.attach(mm) try:
server = smtplib.SMTP()
# 加上这句就可以打印出所有的log,更方便我们定位问题
server.set_debuglevel(1)
server.connect(mail_host, 25)
server.login(sender, password)
server.sendmail(sender, receiver,msg.as_string())
server.close()
print ('Success')
except smtplib.SMTPException:
print( 'Error')

直接在HTML邮件中链接图片地址是不行的。引文大部分邮件服务商都会自动屏蔽带有外链的图片,因为不知道这些链接是否指向恶意网站。
只需要在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。

python smtp邮件的更多相关文章

  1. python SMTP邮件发送(转载)

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

  2. Python SMTP邮件模块

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...

  3. Python SMTP邮件发送

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块: email负责构造邮件 ...

  4. selenium+python smtp邮件

    #code:utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIM ...

  5. python大法好——Python SMTP发送邮件

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

  6. Python——SMTP发送邮件

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

  7. python QQ邮件发送邮件

    # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import ...

  8. python学习笔记(SMTP邮件发送:带附件)

    博主有段时间没有更新博客了 先整理一个之前整理过的SMTP邮件发送,这次是带附件的功能 #!/usr/bin/env python # -*- coding: utf_8 -*- from email ...

  9. python学习笔记(SMTP邮件发送)

    想着给框架添加邮件发送功能.所以整理下python下邮件发送功能 首先python是支持邮件的发送.内置smtp库.支持发送纯文本.HTML及添加附件的邮件 之后是邮箱.像163.qq.新浪等邮箱默认 ...

随机推荐

  1. JsonP的实现原理?

    动态创建script标签,通过script标签中的src跨域属性,连接对方接口,并将回调函数通过接口传递给对方,对方服务器在准备好数据后再通过调用回调函数并以传递参数的方式将数据返回来.

  2. 7. Reverse Integer Add to List★

    题目内容: Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 题目分 ...

  3. inout口在modelsim仿真的方法

    //主要是// 和**********部分是关键 1 `timescale 1ns/1ns module tb(); reg main_clk; :] addr; reg FPGA_CS0;//FPG ...

  4. rtp传输音视频(纯c代码)

    参考链接: 1. PES,TS,PS,RTP等流的打包格式解析之RTP流 https://blog.csdn.net/appledurian/article/details/73135343   2. ...

  5. erlang并发编程

    1.erlang中创建进程(非操作系统线程,比其要轻量很多)非常方便,运用spawn函数即可 spawn(Fun) -> pid() spawn(Node, Fun) -> pid() s ...

  6. Linux下挂载iso文件和配置yum本地源

    Linux的版本: [root@pbn ~]# head -n 1 /etc/issueRed Hat Enterprise Linux Server release 6.1 (Santiago) 1 ...

  7. js获取元素属性值为空的原因和解决办法

    问题描述:js获取某元素的属性值为空 代码: <!-- css定义在head中 --> <style> #box{ width: 100px; height: 100px; b ...

  8. mysql建表时

    问题:Incorrect column specifier for column 'id' 答案:原来自动增长列用int数据类型,不用varchar

  9. Python第七章(北理国家精品课 嵩天等)

    7.1文件的使用 1.1文本类型 文本文件:由单一特定编码组成的文件,如.txt 二进制文件:如.png,.avi 1.2文件的打开和关闭 打开-操作-关闭 <变量名> = open(&l ...

  10. c/c++ 栈与队列实现车库的出入与收费

      /* 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列 (大门在最南端,最先到达的第一辆车停放在车场的最北段),若停车厂内 ...