手把手教你使用python发送邮件

2023-11-05

前言

发送电子邮件是个很常见的开发需求。平时如果有什么重要的信息怕错过,,就可以发个邮件到邮箱来提醒自己。
使用 Python 脚本发送邮件并不复杂。不过由于各家邮件的发送机制和安全策略不同,常常会因为一些配置问题造成发送失败。今天我们来举例讲讲如何使用 Python 发送邮件。

发送多附件邮件

该代码支持多附件发送
Python发送多附件邮件的基本思路,首先就是用MIMEMultipart()方法来表示这个邮件由多个部分组成。然后再通过attach()方法将各部分内容分别加入到MIMEMultipart容器中。MIMEMultipart有attach()方法,而MIMENouMultipart没有,只能被attach。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os
import smtplib
from email.utils import parseaddr
from email.utils import formataddr
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication


def send_email():
	'''smtp服务器	按需填写
		qq邮箱: smtp.qq.com
		126 邮箱: smtp.126.com
		163 邮箱: smtp.163.com
	'''
	host_server = 'smtp.qq.com'  
	sender = 'xxxxx@qq.com'  		# 发件人邮箱
	code = 'xxxxxx'  				# 授权码
	user = 'xxxxxx@163.com'  		# 收件人邮箱
	
	# 邮件信息
	mail_title = '标题'  			# 标题
	mail_content = '请查看附件'  	# 邮件正文内容
	senderName = "发件人名称"
	
	msg = MIMEText(mail_content, _subtype='plain', _charset='utf-8')
	
	# 格式处理 (防止中文内容邮件会显示乱码)
	msg['Accept-Language'] = 'zh-CN'
	msg['Accept-Charset'] = 'ISO-8859-1,utf-8'
	
	# 首先用MIMEMultipart()来标识这个邮件由多个部分组成
	msgAtt = MIMEMultipart()
	msgAtt.attach(msg)
	mailAttachment = [r"C:\Users\PC\Desktop\文本.txt", r"C:\Users\PC\Desktop\excel文件.xlsx", r"C:\Users\PC\Desktop\图片.png"]
	for i in mailAttachment:
	    '''
	    	MIME有很多种类型,如果附件是文本格式,就是MIMEText;如果是图片格式就行MIMEImage;如果是音频格式就用MIMEAudio,如果是其他类型的
	    	格式例如pad,word、Excel等类型的,就很难确定用那种MIME了,此时可以使用MIMEApplication()方法。MIMEApplication默认子类型是
	    	application/octet-stream,表明“这是个二进制,不知道文件的下载类型”,客户端收到这个声明后,根据文件后的扩展名进行处理。
	    '''
	    # 通过MIMEApplication构造附件
	    att = MIMEApplication(open(i, 'rb').read())
	    att["Content-Type"] = 'application/octet-stream'
	    att.add_header('Content-Disposition', 'attachment', filename=os.path.basename(i))
	    msgAtt.attach(att)
	msg = msgAtt
	
	# ----------------------- 以下为单个附件 -----------------------
	# # 构造附件
	# mailAttachment = r"C:\Users\50234\Desktop\测试文件\透视表.xlsx"
	# att = MIMEApplication(open(mailAttachment, 'rb').read())
	# att["Content-Type"] = 'application/octet-stream'
	# att.add_header('Content-Disposition', 'attachment', filename=os.path.basename(mailAttachment))
	# msgAtt.attach(att)
	# msg = msgAtt
	
	msg['Subject'] = mail_title                             # 邮件主题
	msg['From'] = formataddr(pair=(senderName, sender))     # 发件人和发件人名称
	msg['To'] = user
	
	# SMTP
	smtp = smtplib.SMTP(host_server)
	# 登录--发送者账号和口令
	smtp.login(sender, code)
	# 发送邮件
	smtp.sendmail(sender, user, msg.as_string())
	# 退出
	smtp.quit()


if __name__ == '__main__':
	send_email()

运行后,对应的测试结果如下:

结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手把手教你使用python发送邮件 的相关文章

随机推荐

  • Qt在connect中使用lambda表达式(最简单)

    若想在QT中使用lambda表达式需要在项目文件中的 pro 中加入 CONFIG c 11 例子 当点击按钮时 打印一个 输出 需要包含按钮类和打印调试类 include
  • ROS-Qt-转CMake编译以及qmake第三方库添加及其他

    Qt 开发ROS 界面的方法 方法2 带ui的工作空间配置 以ROS节点执行 步骤1 mkdir catkin qt cd catkin qt mkdir src cd src catkin init workpasce cd catkin
  • volatile足以保证数据同步吗

    在讨论之前必须先搞清四种存储介质 寄存器 高级缓存 RAM和ROM RAM与ROM大家都比较熟悉了 可以看成是我们经常说的内存与硬盘 寄存器属于处理器里面的一部分 而高级缓存cache是CPU设计者为提高性能引入的一个缓存 也可以说是属于处
  • axios post方式同时传递pram和json参数

    废话不多说 直接上代码 1 单独传递表单参数 后台使用 RequestParam接收 let postData mobile this account password this password loginType 0 let postD
  • 编译原理------语法分析器C/C++代码实现

    一 实验目的 编制一个递归下降分析程序 实现对词法分析程序所提供的单词序列的语法检查和结构分析 二 实验内容 利用C语言编制递归下降分析程序 并对简单语言进行语法分析 2 1 待分析的简单语言的语法 用扩充的BNF表示如下 lt 程序 gt
  • npm nrm安装后报错

    错误信息为 C Users Lenovo AppData Roaming npm node modules nrm cli js 9 const open require open Error ERR REQUIRE ESM require
  • Hadoop学习笔记(六)(Spark + Flink + Beam)

    spark 计算框架 速度 易用 通用性 Mapreduce是进程级别的 Spark是线程级别的 Spark生态系统 DBAS Berkeley Data Analytics Stack Mesos HDFS Tachyon 基于内存的文件
  • LRUCache详解

    1 概念 LRU是Least Recently Used的缩写 意思是最近最少使用 它是一种Cache替换算法 Cache的容量有限 因此当Cache的容量用完后 而又有新的内容需要添加进来时 就需要挑选并舍弃原有的部分内容 从而腾出空间来
  • 【C++类模板详解】——快速入门C++风靡全球的原因

    C 类模板详解 快速入门C 风靡全球的原因 C 是目前全球最为流行 应用范围最为广泛的编程语言之一 其强大的语言特性和灵活的代码设计方式使得它被广泛应用于各种领域 包括操作系统 数据库 游戏 框架等等 而在C 中 类模板是一种非常重要的编程
  • Unity中如何让物体和相机一起动

    Unity中开发VR或者AR应用中我们想要物体和相机跟随着进行移动 我们需要先获得相机的参数 其次我们需要修改物体的参数使得其跟随移动 public class TestCubeStability MonoBehaviour public
  • javascript 优雅实现时间格式化

    有的时候 我们需要一定格式的 时间 比如 2017 05 12 08 48 这样的格式 上代码先 时间格式化 第一种 function formatDate time var date new Date time var year date
  • 在 Silverlight 中管理动态内容交付,第 1 部分

    本文示例源代码或素材下载 目录 Silverlight 应用程序的大小 动态生成的 XAML 动态生成的 XAP 请求内容 缓存下载的内容 下载工具 下载仅含 XAML 的数据 使用 XAP 程序包 处理 XAP 内容 总结 任何使用富 I
  • 双向可控硅控制220v通断电路_什么是双向可控硅,它在交流调压电路中有哪些应用...

    一 导读 目前交流调压多采用双向可控硅 它具有体积小 重量轻 效率高和使用方便等优点 对提高生产效率和降低成本等都有显著效果 但它也具有过载和抗干扰能力差 且在控制大电感负载时会干扰电网和自干扰等缺点 下面来谈谈可控硅在其使用中如何避免上述
  • mysql join底层实现

    两个表join底层实现 5 5 版本之前 MySQL本身只支持一种表间关联方式 就是嵌套循环 Nested Loop Join 如果关联表的数据量很大 则join关联的执行时间会非常长 在5 5以后的版本中 MySQL通过引入BNLJ算法来
  • centos7自定义ssh端口号

    文章目录 一 背景介绍 二 步骤 1 查看本机系统属性 2 查看是否已安装ssh服务 3 修改默认端口 4 重启sshd服务 5 关于防火墙 6 验证登录流程 一 背景介绍 SSH 为 Secure Shell 由 IETF 的网络工作小组
  • 自动表单数据封装到javaBean中

    页面表单数据的自动封装到javaBean中 先定义一个Bean类 package com test public class Bean private String name private Integer sex public Strin
  • 第一章 微服务必备核⼼-快速⼊⻔SpringBoot2.X

    1 SpringBoot2 X和SpringCloud微服务的关系 SpringBoot 是一个快速开发框架 通过用MAVEN依赖的继承方式 帮助我们快速整合第三方常用框架 完全采用注解化 使用注解方式启动SpringMVC 简化XML配置
  • vue3 setup + ts + vite 项目问题解决:Cannot find module ... or its corresponding type declarations.(ts2307)

    昨日我尝试使用vue3 setup ts vite进行vue3项目的实现 遇到此问题 Cannot find module or its corresponding type declarations ts2307 文件报错类型以及ts官方
  • 转载:CCNP学习考试心得

    CCNP学习考试心得 当计算机屏幕上显示 Congralation时 我不禁长出一口气 心中想 终于考完了 我所说的终于考完是指 我终于完成了CCNP考试 四个月的学习 对于某些人来说可能太长了 但是要真正掌握ccnp的内容我感觉四个月还只
  • 手把手教你使用python发送邮件

    前言 发送电子邮件是个很常见的开发需求 平时如果有什么重要的信息怕错过 就可以发个邮件到邮箱来提醒自己 使用 Python 脚本发送邮件并不复杂 不过由于各家邮件的发送机制和安全策略不同 常常会因为一些配置问题造成发送失败 今天我们来举例讲