SMTP操作使用详解并通过python进行smtp邮件发送示例

简介: SMTP操作使用详解并通过python进行smtp邮件发送示例

转载请注明出处:

1.SMTP

     SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。

  SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。

  增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

2.网易邮箱可以通过以下方式开启:

   请登录网页邮箱,点击邮箱页面上方的“设置”,选择“POP3/SMTP/IMAP”,请根据实际需求开启POP3/IMAP或者SMTP/IMAP服务,并根据页面提示进行短信验证操作。开通后即可使用foxmail、Outlook等第三方客户端进行收发邮件。(注:点击关闭,既可关闭成功

                               

  在开启服务时,需要保存好授权码:

                               

  163邮箱的smtp服务器:smtp.163.com    端口:465

  163企业邮箱端口列表:

协议类型 服务器地址 默认端口 加密端口(SSL)
POP pophz.qiye.163.com 110 995
SMTP smtphz.qiye.163.com 25 994
IMAP imaphz.qiye.163.com 143 993

 

3.使用python实现smtp邮件发送


3.1. 安装smtplib和email模块
pip install smtplib
pip install email

3.2.发送简单纯文本邮件

# -*- coding: utf-8 -*-
# 从17280xxxxx@qq.com向zjxwxxxx@outlook.com发送一封邮件
# 注意, 此处要填写你自己正确的邮件地址
import smtplib
from email.header import Header
from email.mime.text import MIMEText
fromAddr ='17****1@163.com'   # 发送邮件地址
password = 'GXKLZMSNHOMPDVXH'   # SMTP服务的密码, 就是上述图中的授权码
toAddr = '1****5@163.com'    # 目的邮件地址
subject = 'SMTP send mail'         # 邮件标题
content = 'python send mail,very goode'            # 邮件内容
def makeMail():
    mail = MIMEText(content, 'plain', 'utf-8')      # 使用MIMEText()构造一个文本格式的邮件
    mail['From'] = Header(fromAddr, 'utf-8')        # 构造邮件头From
    mail['To'] = Header(toAddr, 'utf-8')            # 构造邮件头To
    mail['Subject'] = Header(subject, 'utf-8')      # 构造邮件主题
    return mail
def sendMail(mail):
    # smtp= smtplib.SMTP()                        # 创建SMTP实例
    # smtp.connect('smtp.qq.com')                 # 连接SMTP服务器
    smtp = smtplib.SMTP_SSL("smtp.163.com")        # 此处直接一步到位
    smtp.login(fromAddr, password)                # 登录SMTP服务
    smtp.sendmail(fromAddr, toAddr, mail.as_string())    # 通过SMTP服务器发送邮件
    smtp.quit()
sendMail(makeMail())
print('success')

  运行该python脚本并验证配置:

           

  在接收方的邮箱可以看到发送的邮件:

             

3.3.发送HTML邮件: 

import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = 'xxxx@qq.com' #发件邮箱
passwd = 'lkugmgywydhfff' #发送人邮箱授权码
receivers = 'xxxx@qq.com'   #收件邮箱
subject = 'python发邮Html邮件测试' #主题
content = """         #内容,HTML格式
<p>Python 邮件发送测试...</p>
<p><a href="http://www.baidu.com">这是一个链接</a></p>
"""
msg = MIMEText(content,'html','utf-8')
# msg['Subject'] = subject
msg['Subject'] = Header(subject,'utf-8')
# msg['From'] = sender
msg['From'] = Header('大傻子','utf-8')
# msg['To'] = receivers
msg['To'] = Header('二愣子','utf-8')
try:
    s = smtplib.SMTP_SSL('smtp.qq.com',465)
    s.login(sender,passwd)
    s.sendmail(sender,receivers,msg.as_string())
    print('Send Success')
except:
    print('Send Failure')

3.4.发送图片邮件:

import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
sender = 'xxxx@qq.com'
passwd = 'lkugmgywydhfff'
receivers = 'xxxx@qq.com'
subject = 'python发邮带img的邮件测试' #主题
# 创建一个带附件的实例
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = receivers
# 创建正文
msg.attach(MIMEText('使用python smtplib模块和email模块自动发送邮件测试','plain','utf-8'))
# 创建图片附件
import os
img_file = open(os.getcwd()+"/a4.jpg",'rb').read()
msg_img = MIMEImage(img_file)
msg_img.add_header('Content-Disposition','attachment', filename = "a4.jpg")
msg_img.add_header('Content-ID', '<0>')
msg.attach(msg_img)
try:
    s = smtplib.SMTP_SSL('smtp.qq.com',465)
    s.set_debuglevel(1) #输出发送邮件详细过程
    s.login(sender,passwd)
    s.sendmail(sender,receivers,msg.as_string())
    print('Send Succese')
except:
    print('Send Failure')
3.5

.发送带附件的邮件:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
sender = 'xxxxxx@qq.com'  #发件邮箱
passwd = 'lkugmgywydhfff'  # 邮箱授权码
receivers = 'xxxxxx@qq.com'  #收件邮箱
subject = 'python发带附件的邮件测试' #主题
# 创建一个带附件的实例
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = receivers
#创建正文,将文本文件添加到MIMEMultipart中
msg.attach(MIMEText('使用python smtplib模块和email模块自动发送邮件测试','plain','utf-8'))
#构造附件1,传送当前目录下  文件
att1 = MIMEText(open('testdata.xlsx','rb').read(),'base64','utf-8') # rb以二进制方式读取
# att1["Content-Type"] = 'application/octet-stream'
# filename为附件名称,可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename = "testdata.xlsx" '
#将附件添加到MIMEMultipart中
msg.attach(att1)
#构造附件2
att2 = MIMEText(open('db.cfg','rb').read(),'base64','utf-8')
# att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename = "db.cfg" '
#将附件添加到MIMEMultipart中
msg.attach(att2)
try:
    s = smtplib.SMTP_SSL('smtp.qq.com',465)
    s.set_debuglevel(1) #输出发送邮件详细过程
    s.login(sender,passwd)
    s.sendmail(sender,receivers,msg.as_string())
    print('Send Succese')
except:
    print('Send Failure')

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.header import Header


sender = 'xxxxxx@qq.com'  #发件邮箱

passwd = 'lkugmgywydhfff'  # 邮箱授权码

receivers = 'xxxxxx@qq.com'  #收件邮箱

subject = 'python发带附件的邮件测试' #主题

# 创建一个带附件的实例

msg = MIMEMultipart()

msg['Subject'] = subject

msg['From'] = sender

msg['To'] = receivers


#创建正文,将文本文件添加到MIMEMultipart中

msg.attach(MIMEText('使用python smtplib模块和email模块自动发送邮件测试','plain','utf-8'))


#构造附件1,传送当前目录下  文件

att1 = MIMEText(open('testdata.xlsx','rb').read(),'base64','utf-8') # rb以二进制方式读取

# att1["Content-Type"] = 'application/octet-stream'

# filename为附件名称,可以任意写,写什么名字,邮件中显示什么名字

att1["Content-Disposition"] = 'attachment; filename = "testdata.xlsx" '

#将附件添加到MIMEMultipart中

msg.attach(att1)


#构造附件2

att2 = MIMEText(open('db.cfg','rb').read(),'base64','utf-8')

# att2["Content-Type"] = 'application/octet-stream'

att2["Content-Disposition"] = 'attachment; filename = "db.cfg" '

#将附件添加到MIMEMultipart中

msg.attach(att2)


try:

   s = smtplib.SMTP_SSL('smtp.qq.com',465)

   s.set_debuglevel(1) #输出发送邮件详细过程

   s.login(sender,passwd)

   s.sendmail(sender,receivers,msg.as_string())

   print('Send Succese')


except:

   print('Send Failure')

4.python 邮件发送模块与语法总结

4.1smtplib模块:

主要通过SMTP类与邮件系统进行交互。使用方法如下:

1.实例化一个SMTP对象:

s = smtplib.SMTP(邮件服务地址,端口号)
  s = smtplib.SMTP_SSL(邮件服务地址,端口号)

2.登陆邮件,权限验证:

s.login(用户名,密码)

3.发送邮件:

  s.sendmail(发件人邮箱,收件人邮箱,发送内容)

4.断开连接:

s.close()

4.2 email模块:

  email模块:支持发送的邮件内容为纯文本、HTML内容、图片、附件。email模块中有几大类来针对不同的邮件内容形式,常用如下:

  MIMEText:(MIME媒体类型)内容形式为纯文本、HTML页面。

  MIMEImage:内容形式为图片。

  MIMEMultupart:多形式组合,可包含文本和附件。

  每一类对应的导入方式:

from email.mime.text import MIMEText
  from email.mime.image import MIMEImage
  from email.mime.multipart import MIMEMultipart

4.3 MIMEText:

MIMEText(msg,type,chartset)
  msg:文本内容
  type:文本类型默认为plain(纯文本)
  ## 发送HTML格式的时候,修改为html,但同时要求msg的内容也是html的格式。
  chartset:文本编码,中文为“utf-8”
  # 构造TEXT格式的消息
  msg = MIMEText("hello.text","plain","utf-8")
  msg["Subject"] = "xxxxx"
  msg["From"] = "xxxx"
  msg["To"] = "xxxx"
  #发送以上构造的邮件内容要使用as_string将构造的邮件内容转换为string形式。
  s.sendmail("xxx","xxx",msg.as_string)

4.4 MIMEImage、MIMEMultipart:

msg = MIMEMultipart()
  #实例化一个文本对象 
  msg_sub = MIMEText("hello.text","plain","utf-8")
  #将text消息添加到MIMEMultipart中,作为邮件正文。
  msg.attach(msg_sub)
 
  #图片作为附件
  import os
  img_datas = open(os.getcwd()+ "/reports/xxxx.png","rb").read()
  msg_img = MIMEImage(img_data)
  msg_img.add_header('Content-Disposition','attachment', filename = "xxxx.png" )
  msg_img.add_header('Content-ID','<0>')
  #将图片添加到MIMEMultiplart中,作为附件发送。
  msg.attach(mag_img)

 

标签: Python , 监控

目录
相关文章
洋码头商品 API 示例指南(Python 实现)
洋码头是国内知名跨境电商平台,提供商品搜索、详情、分类等API接口。本文详解了使用Python调用这些API的流程与代码示例,涵盖签名生成、请求处理及常见问题解决方案,适用于构建选品工具、价格监控等跨境电商应用。
|
25天前
|
VIN车辆识别码查询车五项 API 实践指南:让每一俩车有迹可循(Python代码示例)
VIN(车辆识别代码)是全球唯一的17位汽车标识码,可快速获取车架号、发动机号、品牌型号等核心信息。在二手车交易、保险理赔、维修保养等场景中,准确解析VIN有助于提升效率与风控能力。本文介绍VIN码结构、适用场景,并提供Python调用示例及优化建议,助力企业实现车辆信息自动化核验。
109 1
身份证二要素核验接口调用指南 —— Python 示例
本文介绍如何在 Python 中快速实现身份证二要素核验功能,适用于用户注册、金融风控等场景。通过阿里云市场提供的接口,可校验「姓名 + 身份证号」的一致性,并获取性别、生日、籍贯等信息。示例代码展示了从环境变量读取 APP_CODE、发送 GET 请求到解析 JSON 响应的完整流程。关键字段包括 code(1-一致,2-不一致,3-无记录)、msg 和 data。常见问题如 403 错误需检查 AppCode,超时则优化网络或设置重试机制。集成后可根据业务需求添加缓存、限流等功能提升性能。
196 4
淘宝商品详情API的调用流程(python请求示例以及json数据示例返回参考)
JSON数据示例:需要提供一个结构化的示例,展示商品详情可能包含的字段,如商品标题、价格、库存、描述、图片链接、卖家信息等。考虑到稳定性,示例应基于淘宝开放平台的标准响应格式。
淘宝关键词搜索商品列表API接入指南(含Python示例)
淘宝关键词搜索商品列表API是淘宝开放平台的核心接口,支持通过关键词检索商品,适用于比价、选品、市场分析等场景。接口提供丰富的筛选与排序功能,返回结构化数据,含商品ID、标题、价格、销量等信息。开发者可使用Python调用,需注意频率限制与错误处理,建议先在沙箱环境测试。
Python办公自动化实战:手把手教你打造智能邮件发送工具
本文介绍如何使用Python的smtplib和email库构建智能邮件系统,支持图文混排、多附件及多收件人邮件自动发送。通过实战案例与代码详解,帮助读者快速实现办公场景中的邮件自动化需求。
86 0
一号店商品 API 示例指南(Python 实现)
本教程介绍如何使用 Python 调用一号店商品 API,涵盖商品搜索、详情、分类等接口的调用方法。内容包括注册认证、签名生成、代码实现及常见问题解决方案,并提供完整示例代码,帮助开发者快速接入一号店开放平台,构建电商工具与数据分析应用。
|
26天前
|
快递查询 API 对接指南(Python示例)
在电商与物流快速发展背景下,实时快递查询成为系统开发常见需求。本文介绍如何通过快递查询API快速集成物流信息,提升自动化水平与用户体验,并提供Python调用示例及问题解决方案。
108 0
身份验证API的实战指南(Python & PHP 示例)
本文介绍了基于身份证信息的实名认证API,适用于金融、电商、政务、医疗等领域的身份核验场景。内容包含Python与PHP调用示例及返回结果解析,助力开发者快速集成安全合规的身份验证功能。
91 0
掌握Python的高级用法:技巧、技术和实用性示例
本文分享了Python的高级用法,包括生成器、装饰器、上下文管理器、元类和并发编程等。生成器通过`yield`实现懒加载序列;装饰器用于增强函数功能,如添加日志或性能分析;上下文管理器借助`with`语句管理资源;元类动态定制类行为;并发编程利用`threading`和`asyncio`库提升任务执行效率。掌握这些高级概念可优化代码质量,解决复杂问题,提高程序性能与可维护性。

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问