前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python SMTP邮件发送

python SMTP邮件发送

作者头像
py3study
发布于 2020-01-16 04:21:56
发布于 2020-01-16 04:21:56
1.9K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

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

发送文本类型的邮件

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- 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()实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- 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 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()    

发送带附件的邮件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- 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!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python发送邮件源码
这是之前一个公司的面试题中的一小部分。比较习惯把这中工具性的东西单独的写成一个函数,这样以后再用到,直接拿来就好。
the5fire
2019/02/28
6840
python 发送邮件(文字、表格、附
import pandas as pd import smtplib   from email.mime.text import MIMEText   from email.mime.multipart import MIMEMultipart filename='C:\\Users\\thinkpad\\Desktop\\1.xlsx' #附件地址 def send_mail(to_list,sub,context,filename):  #to_list:收件人;sub:主题;content:邮件内容     mail_host="smtp.163.com"  #设置服务器     mail_user="XXXX@163.com"    #用户名     mail_pass="xxxxxx"   #口令      mail_postfix="163.com"  #发件箱的后缀     me="服务器"+"<"+mail_user+"@"+mail_postfix+">"   #这里的“服务器”可以任意设置,收到信后,将按照设置显示     msg = MIMEMultipart() #给定msg类型     msg['Subject'] = sub #邮件主题     msg['From'] = me     msg['To'] = ";".join(mailto_list)      msg.attach(context)     #构造附件1     att1 = MIMEText(open(filename, 'rb').read(), 'xls', 'gb2312')     att1["Content-Type"] = 'application/octet-stream'     att1["Content-Disposition"] = 'attachment;filename='+filename[-6:]#这里的filename可以任意写,写什么名字,邮件中显示什么名字,filename[-6:]指的是之前附件地址的后6位     msg.attach(att1)     try:           s = smtplib.SMTP()           s.connect(mail_host)  #连接smtp服务器         s.login(mail_user,mail_pass)  #登陆服务器         s.sendmail(me, mailto_list, msg.as_string())  #发送邮件         s.close()          return True       except Exception:             return False   if __name__ == '__main__':       mailto_list=["zhanghaili@autoht.com"]     a=pd.DataFrame({'数列1':(1,1,1,1),'数列2':(2,2,2,2),'数列3':(3,3,3,3),'数列4':(4,4,4,4)})     a.index={'行1','行2','行3','行4'} #这里dataframe类型a就是要输出的表格     sub="test"     d='' #表格内容     for i in range(len(a)):         d=d+"""         <tr>           <td>""" + str(a.index[i]) + """</td>           <td>""" + str(a.iloc[i][0]) + """</td>           <td width="60" align="center">""" + str(a.iloc[i][1]) + """</td>           <td width="75">""" + str(a.iloc[i][2]) + """</td>           <td width="80">""" + str(a.iloc[i][3]) + """</td>         </tr>"""     html = """\ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <body> <div id="container"> <p><strong>测试程序邮件发送:</strong></p> <div id="content">  <table width="30%
py3study
2020/01/06
2.3K0
python发送、抄送邮件
python发送抄送邮件 sendemial.py #!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.multipart import MIMEMultipart import time import os mail_host="smtp.miao.cn" mail_u
py3study
2020/01/08
1K0
python 使用stmp发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
py3study
2020/01/06
1.1K0
简单三步,用 Python 发邮件
0. 前言 发送电子邮件是个很常见的开发需求。比如你写了个监控天气的脚本,发现第二天要下雨,或者网站上关注的某个商品降价了,就可以发个邮件到邮箱来提醒自己。 使用 Python 脚本发送邮件并不复杂。不过在网页上搜了些教程,都亲测无效,发现或多或少有点问题,导致发送失败。所以今天我们就来讲讲如何使用 Python 发送邮件。 本文主要内容包括,了解发邮件的思路,发送邮件需要的一些设置,发送一封简单的邮件,发送一封包含附件的邮件,在写代码过程中我们需要注意哪些问题等等。(完整参考代码地址见文末) 1. 思
Crossin先生
2018/04/17
1.2K0
简单三步,用 Python 发邮件
python3实现邮件的发送
使用的email和smtplib模块,这里简单介绍下smtplib.SMTP()类
dogfei
2020/07/31
3810
python 邮件发送
  smtplib 模块 1、smtplib.SMTPAuthenticationError: (550, b'User has no permission') 2、smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') 这两个错误是你的密码用的不是授权码导致 3、554 DT:SPM 163 smtp5 这属于网易邮箱的一个退回检测机制导致,貌似跟发送比较频繁有关,被系统判定为病毒或垃圾邮件
py3study
2020/01/19
1.2K0
接口测试基础——第2篇smtplib发送文字邮件
王者荣耀真害人!这就是昨天没发的原因…… 我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIMEText mail_host = “smtp.qq.com” receivers = “123@qq.com” sender = “456@qq.com” passwd = ‘QQ邮箱的授权码’ contents = “python发送邮件” # 构造邮件正文 ms
孟船长
2018/05/18
7470
Python3实现自动发送邮件
首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。
用户9925864
2022/07/27
3380
Python3实现自动发送邮件
使用Python快速监控网站状态
群里有朋友问怎么样监控自己的网站运行情况,我这里把我用的分享给大家,使用Python运行哦。
青阳
2021/08/23
1.7K0
python发送邮件(二)——smtplib模块和email模块
一、模块介绍 1、smtplib 模块(用于邮件的发送) ①理论解释 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) 通过这个语句,可以向SMTP服务器发送指令,执行相关操作(如:登陆、发送邮件)。所有的参数都是可选的。 host:smtp服务器主机名 port:smtp服务的端口,默认是25;端口号可以省略。 但是使用25号端口有一个问题,就是保密性不够好,数据都是明文传输,没有加密。 现在一般都推荐使用SSL,Secure So
Elsa_阿尼
2021/07/27
5.3K0
python发送邮件(二)——smtplib模块和email模块
python邮件发送和图片
​ 上班时间干别的事情是不太好的,如果被别人看到的话会很大程度上影响个人的前进的步伐。但是如果工作做的差不多了,那么闲着也是闲着。反正cpu资源浪费一天就是一天的折旧,那还不如多学点东西。我们之前的过程都需要点击运行,然后出来一个图。这种方式目标太大,容易被人发现。那么我们做个定时任务。然后把图片不显示,而是保存为图片。运营结束之后将图片放到邮件里,然后发送到手机。相对短信需要花费金钱来说,邮件最好了。
写一点笔记
2020/11/27
9700
python邮件自动发送测试报告,看这篇文章就够了
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100698.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/29
4940
python邮件自动发送测试报告,看这篇文章就够了
python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)
  本篇文章与前边没有多大关联,就是对前边有关发邮件的总结和梳理。在写脚本时,放到后台运行,想知道执行情况,会通过邮件、SMS(短信)、飞信、微信等方式通知管理员,用的最多的是邮件。在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮
北京-宏哥
2019/09/11
2.3K0
python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)
10分钟教你用python如何正确把妹-不知道妹子为何生气?那是因为你没学python
当然啦,这只是测试版的效果,真正的版本可比这个厉害多啦。不过作为一个直男,另一个男的给小编发这个测试感觉还是有点怪怪的哈。
短短的路走走停停
2019/05/14
4940
Python 测试 SMTP 服务
SMTP 服务用于转发邮件,本文记录 Python 测试SMTP的方法。 SMTP SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。 核心语法 创建 SMTP 对象 语法如下: import smtplib smtpObj = smtplib.SMTP( [host [, po
为为为什么
2022/08/06
1.5K0
Python 测试 SMTP 服务
zabbix设置邮件告警
定义恢复操作,设置标题,及消息内容,随后设置一些细节,将恢复后的消息发送给具体的用户或组
dogfei
2020/07/31
1K0
zabbix设置邮件告警
python发送邮件案例分析
1、运用for循环,实现群发功能 接收方的昵称是统一的一个,可再优化一下,实现更加个性化,更加自由的发送邮件 from email.header import Header #处理邮件主题 from email.mime.text import MIMEText # 处理邮件内容 from email.utils import parseaddr, formataddr #用于构造特定格式的收发邮件地址 import smtplib #用于发送邮件 # 函数小工具 def _format_addr(s):
Elsa_阿尼
2021/07/28
8000
【python】用SMTP模块发送带附件
在书上看了用SMTP模块发邮件,试过之后发现并没有什么用。163邮箱开启了SMTP服务后,登陆了发送的时候却被拒收了。
py3study
2020/01/19
5890
python3 SMTP发送邮件
最近看了一个资料关于用python来实现SMTP发送邮件,觉得挺有意思就实践了一下。先简单介绍一下吧
行云博客
2022/05/10
6350
相关推荐
python发送邮件源码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验