我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python SMTP邮件发送

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python SMTP邮件发送

本例使用的时python2.7环境,python3的操作应该也是差不多的。
需要用到smtplib和email两个包。

发送文本类型的邮件

下面看个发送文本邮件的例子(使用网易163的SMTP):

# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr

# 第三方SMTP
mail_host = "smtp.163.com" # SMTP服务器
mail_user = "sender@163.com" # 发送者邮箱
mail_pass = "******" # 邮箱的客户端授权码

sender = "sender@163.com" # 邮件的发送者
recivers = ["bob@qq.com", "someone@gmail.com"] # 邮件接收者,可以指定多个

# 三个参数:第一个为文本内容,第二个设置文本格式,第三个设置字符编码
message = MIMEText('Python邮件发送测试', 'plain', 'utf-8')
message['From'] = sender;
# == message['From'] = formataddr(['sender', sender])
message['To'] = ", ".join(recivers)
# == message['To] = formataddr(['ok', ', '.join(recivers)])
subject = 'Python 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mali_host, 25) # 连接SMTP,端口为25
    smtpObj.set_debuglevel(1)
    smtpObj.login(mail_user, mail_pass)
    smtpObj.sendmail(sender, recivers,message.as_string())
    print "emails send successfully"
except smtplib.SMTPException:
    print "Error:cannot send emails"
smtpObj.quit() # 关闭连接

好像网易的SMTP有坑,message['From']和message['To']都要和sender和recivers一致才可以,还有标题和内容尽量不要有敏感词,否则会被服务器判为垃圾邮件而发不出去,我第一次就因为Subject带有“SMTP”而被拦截(滑稽.gif)。
如果邮件发送失败,可以查看set_debuglevel()函数返回的状态码来判定什么原因。

发送HTML格式的邮件

与发送文本不同的地方就是将MIMEText中的_subtype设为html,发送带图片的HTML还要创建MIMEMultipart()实例。

# -*- coding: UTF-8 -*-

import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

# 第三方SMTP
mail_host = "smtp.163.com" # SMTP服务器
mail_user = "sender@163.com" # 发送者邮箱
mail_pass = "******" # 邮箱的客户端授权码

sender = "sender@163.com"
recivers = ["bob@qq.com", "alice@qq.com"]  # 接收邮件

msg = MIMEMultipart('related')
msg['From'] = sender
msg['To'] = ", ".join(recivers)
subject = 'HTML 1m4g3'
msg['Subject'] = Header(subject, 'utf-8')
mail_msg = """
<h1>HTML image测试</h1>
<p><a href="http://www.baidu.com">learn more</a></p>
<p><img class="lazy" data-src="cid:image1"></p>
"""
msgAlternative = MIMEMultipart('alternative')
msg.attach(msgAlternative)
msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

# 指定当前目录的图片
fp = open('test1.gif', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# 定义图片ID,在HTML中引用
msgImage.add_header('Content-ID', '<image1>')
msg.attach(msgImage)

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)  # 25 SMTP Port
    smtpObj.set_debuglevel(1)
    smtpObj.login(mail_user, mail_pass)
    smtpObj.sendmail(sender, recivers, msg.as_string())
    print "emails send sucessfully"

except smtplib.SMTPException:
    print "Error:cannot send emails"
smtpObj.quit()    

发送带附件的邮件

# -*- coding: UTF-8 -*-

import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

# 第三方SMTP
mail_host = "smtp.163.com"  # 设置服务器
mail_user = "sender@163.com"
mail_pass = "******"

sender = "sender@163.com"
recivers = ["bob@qq.com", "alice@qq.com"]  # 接收邮件

# 创建附件实例
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = ", ".join(recivers)
subject = '邮件附件'
msg['Subject'] = Header(subject, 'utf-8')
# 邮件正文:
MIMEText('邮件正文如下', 'html', 'utf-8')

# 构造附件,传送当前目录下的txt文件:
att1 = MIMEText(open('test1.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意命名,成为邮件中显示的文件名
att1["Content-Disposition"] = 'attachment;filename="test_1.txt"'
msg.attach(att1)

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)  # 25 SMTP Port
    smtpObj.set_debuglevel(1)
    smtpObj.login(mail_user, mail_pass)
    smtpObj.sendmail(sender, recivers, msg.as_string())
    print "emails send sucessfully"

except smtplib.SMTPException:
    print "Error:cannot send emails"

smtpObj.quit()

发送正常的就会返回250状态码:

发送失败返回的554:

总结

搞这些操作一是想弄明白智能合约CTF里怎么实现用邮箱发来flag的,再一个就是想补补编程(你打代码像cxk.gif)。
总之在里面遇到很多坑,而且大部分都是返回的554(可能被判为垃圾邮件而拦截掉了),这里的原因大概率是因为Subject有些文字不符(像“test"这种都会被拦截)。还有在批量发送时,recivers是一个list,那么message['To']中需要用逗号和join()函数转成字符串。
over!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python SMTP邮件发送

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python SMTP邮件发送

本例使用的时python2.7环境,python3的操作应该也是差不多的。需要用到smtplib和email两个包。发送文本类型的邮件下面看个发送文本邮件的例子(使用网易163的SMTP):# -*- coding: UTF-8 -*-im
2023-01-31

什么用Python SMTP发送邮件?

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
什么用Python SMTP发送邮件?
2024-04-23

python实现SMTP邮件发送功能

一直想着给框架添加邮件发送功能、所以整理下python下邮件发送功能 首先python是支持邮件的发送、内置smtp库、支持发送纯文本、HTML及添加附件的邮件。之后是邮箱、像163、qq、新浪等邮箱默认关闭SMTP服务,需要我们手动打开,
2022-06-04

Python中如何使用SMTP发送邮件

本篇文章为大家展示了Python中如何使用SMTP发送邮件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python创建 SMTP 对象语法import smtplib smtpObj = smtp
2023-06-02

Python中怎么使用SMTP发送邮件

这篇“Python中怎么使用SMTP发送邮件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中怎么使用SMTP发送
2023-06-28

Python 发送SMTP邮件的简单教程

目录一、两个模块二、SMTP端口三、四大步骤1、构造邮件内容2、连接邮件服务器3、登陆邮件服务器4、发送邮件四、常用场景1、纯文本邮件2、发送html文本3、发送附件一、两个模块Python使用SMTP发送邮件的两个模块:smtplib模块
2022-06-02

Python实现SMTP发送邮件详细教程

简介 Python发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详细的环境调试导致,所以今天特出一个详细的教程
2022-06-04

Golang如何实现smtp邮件发送

本文小编为大家详细介绍“Golang如何实现smtp邮件发送”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang如何实现smtp邮件发送”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。使用函数SendMai
2023-07-05

Python 使用SMTP发送邮件的代码小结

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp
2022-06-04

怎么在Python项目中利用SMTP发送邮件

这期内容当中小编将会给大家带来有关怎么在Python项目中利用SMTP发送邮件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。通常使用邮件 API 的邮件发送服务都需要额外的收费。因此我们再邮件测试发送的时
2023-06-14

python 邮件发送

环境:python2.7 1 #coding:utf-8 2 from __future__ import unicode_literals 3 __author__ = 'crista' 4 5 import smtplib 6 fro
2023-01-30

python 发送邮件

#!/usr/bin/env python#coding:utf-8import smtplib,time,stringfrom email.mime.text import MIMETextSMTPserver = 'smtp.exmai
2023-01-31

C#实现SMTP邮件附件发送功能详解

这篇文章主要为大家详细介绍了如何利用C#实现SMTP邮件附件发送的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-28

python发送、抄送邮件

python发送抄送邮件sendemial.py#!/usr/bin/python# -*- coding: UTF-8 -*-import smtplibfrom email.mime.text import MIMETextfrom e
2023-01-31

python发送邮件

python通过smtp发送qq邮件import smtplibfrom email.mime.text import MIMETextfrom email.header import Header"""1》测试邮件发送2》有收件人、发件人
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录