Python3 SMTP发送邮件

news2024/9/23 13:30:19

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

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

Python创建 SMTP

<span>import</span><span> smtplib

smtpObj </span><span>=</span><span> smtplib</span><span>.</span><span>SMTP</span><span>(</span><span> </span><span>[</span><span>host </span><span>[,</span><span> port </span><span>[,</span><span> local_hostname</span><span>]]]</span><span> </span><span>)</span>

参数说明:

  • host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如:runoob.com,这个是可选参数。
  • port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下SMTP端口号为25。
  • local_hostname: 如果SMTP在你的本机上,你只需要指定服务器地址为 localhost 即可。

Python SMTP对象使用sendmail方法发送邮件,语法如下:

<span>SMTP</span><span>.</span><span>sendmail</span><span>(</span><span>from_addr</span><span>,</span><span> to_addrs</span><span>,</span><span> msg</span><span>[,</span><span> mail_options</span><span>,</span><span> rcpt_options</span><span>]</span>

参数说明:

  • from_addr: 邮件发送者地址。
  • to_addrs: 字符串列表,邮件发送地址。
  • msg: 发送消息

这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。

实例

以下是一个使用Python发送邮件简单的实例:

实例

import smtplib from email.mime.text import MIMEText from email.header import Header sender = ‘from@runoob.com’ receivers = [‘429240967@qq.com’] message = MIMEText(‘Python 邮件发送测试…’, ‘plain’, ‘utf-8’) message[‘From’] = Header(“菜鸟教程”, ‘utf-8’) message[‘To’] = Header(“测试”, ‘utf-8’) subject = ‘Python SMTP 邮件测试’ message[‘Subject’] = Header(subject, ‘utf-8’) try: smtpObj = smtplib.SMTP(‘localhost’) smtpObj.sendmail(sender, receivers, message.as_string()) print (“邮件发送成功”) except smtplib.SMTPException: print (“Error: 无法发送邮件”)

我们使用三个引号来设置邮件信息,标准邮件需要三个头部信息: From, To, 和 Subject ,每个信息直接使用空行分割。

我们通过实例化 smtplib 模块的 SMTP 对象 smtpObj 来连接到 SMTP 访问,并使用 sendmail 方法来发送信息。

执行以上程序,如果你本机安装sendmail,就会输出:

<span>$ python3 test</span><span>.</span><span>py 
</span><span>邮件发送成功</span>

查看我们的收件箱(一般在垃圾箱),就可以查看到邮件信息:

如果我们本机没有 sendmail 访问,也可以使用其他服务商的 SMTP 访问(QQ、网易、Google等)。

实例

import smtplib from email.mime.text import MIMEText from email.header import Header mail_host=“smtp.XXX.com” mail_user=“XXXX” mail_pass=“XXXXXX” sender = ‘from@runoob.com’ receivers = [‘429240967@qq.com’] message = MIMEText(‘Python 邮件发送测试…’, ‘plain’, ‘utf-8’) message[‘From’] = Header(“菜鸟教程”, ‘utf-8’) message[‘To’] = Header(“测试”, ‘utf-8’) subject = ‘Python SMTP 邮件测试’ message[‘Subject’] = Header(subject, ‘utf-8’) try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) smtpObj.login(mail_user,mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print (“邮件发送成功”) except smtplib.SMTPException: print (“Error: 无法发送邮件”)


使用Python发送HTML格式的邮件

Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html。具体代码如下:

实例

import smtplib from email.mime.text import MIMEText from email.header import Header sender = ‘from@runoob.com’ receivers = [‘429240967@qq.com’] mail_msg = “”"

Python 邮件发送测试…

这是一个链接

“”" message = MIMEText(mail_msg, ‘html’, ‘utf-8’) message[‘From’] = Header(“菜鸟教程”, ‘utf-8’) message[‘To’] = Header(“测试”, ‘utf-8’) subject = ‘Python SMTP 邮件测试’ message[‘Subject’] = Header(subject, ‘utf-8’) try: smtpObj = smtplib.SMTP(‘localhost’) smtpObj.sendmail(sender, receivers, message.as_string()) print (“邮件发送成功”) except smtplib.SMTPException: print (“Error: 无法发送邮件”)

执行以上程序,如果你本机安装sendmail,就会输出:

<span>$ python3 test</span><span>.</span><span>py 
</span><span>邮件发送成功</span>

查看我们的收件箱(一般在垃圾箱),就可以查看到邮件信息:


Python 发送带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

实例

import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header sender = ‘from@runoob.com’ receivers = [‘429240967@qq.com’] message = MIMEMultipart() message[‘From’] = Header(“菜鸟教程”, ‘utf-8’) message[‘To’] = Header(“测试”, ‘utf-8’) subject = ‘Python SMTP 邮件测试’ message[‘Subject’] = Header(subject, ‘utf-8’) message.attach(MIMEText(‘这是菜鸟教程Python 邮件发送测试……’, ‘plain’, ‘utf-8’)) att1 = MIMEText(open(‘test.txt’, ‘rb’).read(), ‘base64’, ‘utf-8’) att1[“Content-Type”] = ‘application/octet-stream’ att1[“Content-Disposition”] = ‘attachment; filename=“test.txt”’ message.attach(att1) att2 = MIMEText(open(‘runoob.txt’, ‘rb’).read(), ‘base64’, ‘utf-8’) att2[“Content-Type”] = ‘application/octet-stream’ att2[“Content-Disposition”] = ‘attachment; filename=“runoob.txt”’ message.attach(att2) try: smtpObj = smtplib.SMTP(‘localhost’) smtpObj.sendmail(sender, receivers, message.as_string()) print (“邮件发送成功”) except smtplib.SMTPException: print (“Error: 无法发送邮件”)

<span>$ python3 test</span><span>.</span><span>py 
</span><span>邮件发送成功</span>

查看我们的收件箱(一般在垃圾箱),就可以查看到邮件信息:


在 HTML 文本中添加图片

邮件的 HTML 文本中一般邮件服务商添加外链是无效的,正确添加图片的实例如下所示:

实例

import smtplib from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header sender = ‘from@runoob.com’ receivers = [‘429240967@qq.com’] msgRoot = MIMEMultipart(‘related’) msgRoot[‘From’] = Header(“菜鸟教程”, ‘utf-8’) msgRoot[‘To’] = Header(“测试”, ‘utf-8’) subject = ‘Python SMTP 邮件测试’ msgRoot[‘Subject’] = Header(subject, ‘utf-8’) msgAlternative = MIMEMultipart(‘alternative’) msgRoot.attach(msgAlternative) mail_msg = “”"

Python 邮件发送测试…

菜鸟教程链接

图片演示:

“”" msgAlternative.attach(MIMEText(mail_msg, ‘html’, ‘utf-8’)) fp = open(‘test.png’, ‘rb’) msgImage = MIMEImage(fp.read()) fp.close() msgImage.add_header(‘Content-ID’, ‘’) msgRoot.attach(msgImage) try: smtpObj = smtplib.SMTP(‘localhost’) smtpObj.sendmail(sender, receivers, msgRoot.as_string()) print (“邮件发送成功”) except smtplib.SMTPException: print (“Error: 无法发送邮件”)
<span>$ python3 test</span><span>.</span><span>py 
</span><span>邮件发送成功</span>

查看我们的收件箱(如果在垃圾箱可能需要移动到收件箱才可正常显示),就可以查看到邮件信息:


使用第三方 SMTP 服务发送

这里使用了 QQ 邮箱(你也可以使用 163,Gmail等)的 SMTP 服务,需要做以下配置:

QQ 邮箱通过生成授权码来设置密码:

QQ 邮箱 SMTP 服务器地址:smtp.qq.com,ssl 端口:465。

以下实例你需要修改:发件人邮箱(你的QQ邮箱),密码,收件人邮箱(可发给自己)。

QQ SMTP

import smtplib from email.mime.text import MIMEText from email.utils import formataddr my_sender=‘429240967@qq.com’ my_pass = ‘xxxxxxxxxx’ my_user=‘429240967@qq.com’ def mail(): ret=True try: msg=MIMEText(‘填写邮件内容’,‘plain’,‘utf-8’) msg[‘From’]=formataddr([“FromRunoob”,my_sender]) msg[‘To’]=formataddr([“FK”,my_user]) msg[‘Subject’]=“菜鸟教程发送邮件测试” server=smtplib.SMTP_SSL(“smtp.qq.com”, 465) server.login(my_sender, my_pass) server.sendmail(my_sender,[my_user,],msg.as_string()) server.quit() except Exception: ret=False return ret ret=mail() if ret: print(“邮件发送成功”) else: print(“邮件发送失败”)

<span>$ python test</span><span>.</span><span>py 
</span><span>邮件发送成功</span>

发送成功后,登陆收件人邮箱即可查看:

更多内容请参阅:https://docs.python.org/3/library/email-examples.html。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kotlin:1.9.0 的新特性

一、概述 Kotlin 1.9.0版本英语官方文档 Kotlin 1.9.0 中文官方文档 The Kotlin 1.9.0 release is out and the K2 compiler for the JVM is now in Beta. Additionally, here are some of the main highlights: Kotlin 1.9.0版本已经发布&#xff0c;用于JVM的K2编译器现在…

运用Java实现倒计时功能

这个功能其实是比较好实现的&#xff0c;一般来说java中实现倒计时有两种方法&#xff1a; 1、使用 scheduledexecutorservice创建一个可重复执行的任务&#xff0c;直到时间到&#xff1a; ScheduledExecutorService 是 Java 中一种用于安排延迟或定期任务的工具。我们可以使…

PMP--一模--解题--61-70

文章目录 14.敏捷61、 [单选] 作为估算活动持续时间过程的一部分&#xff0c;项目经理促成了与产品负责人和Scrum团队的冲刺计划会议。项目经理将用户故事分解为较小的任务项&#xff0c;以小时为单位估算所需时间&#xff0c;并根据团队的能力确定冲刺待办事项列表。尽管计划周…

6. Transforms的使用(一)--ToTensor()

Transforms的使用&#xff08;一&#xff09; 1.使用ToTensor类将数据转化为Tensor形式 导入需要使用的transforms类 from torchvision import transforms创建ToTensor类的实例 totensor transforms.ToTensor()将读取的图片ndarray数据转化为Tensor数据 img cv.imread(img_p…

SAP学习笔记 - 开发06 - CDSView + Fiori Element 之 List Report

上一章讲了Fiori UI5开发环境搭建和实践&#xff1a; - VSCode 安装Fiori Tools插件 - SEGW 创建后台程序&#xff0c;注册服务&#xff0c;Gateway Client确认服务 - 使用SEGW公开的服务来查询数据显示到页面 SAP学习笔记 - 开发05 - Fiori UI5 开发环境搭建2 Fiori Tools…

react js 使用 useEffect 钩子

起因&#xff0c; 目的: useEffect() &#xff0c; 已经遇见好几次了。 我的理解是&#xff0c; 页面加载完成之后&#xff0c;会执行这个函数。&#xff1f;&#xff1f;&#xff1f; 写个例子&#xff0c; 请求 api import React, { useState, useEffect } from "re…

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef 1. AOSPXRef1.1. http://aospxref.com/android-14.0.0_r2/1.2. build/envsetup.sh 2. AndroidXRef2.1. http://androidxref.com/9.0.0_r3/2.2. build/envsetup.sh 3. HELLO AndroidReferences 1. AOSPXRef http://aospx…

Java | Leetcode Java题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, new Comparator<int[]>() {public int compare(int[] person1, int[] person2) {if (person1[0] ! person2[0]) {return person2[0] - perso…

5.TensorBoard的使用(二)--add_image()

TensorBoard的使用&#xff08;二&#xff09; 1.使用add_image()给添加图片 首先导入Tensorboard包 from torch.utils.tensorboard import SummaryWriter创建一个SummaryWriter类的实例&#xff0c;并将所有的事件文件保存在logs文件夹中 writer SummaryWriter(logs)使用add…

【光照增强论文略读】Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement

这篇题为《用于低光照图像增强的零参考深度曲线估计》的论文介绍了一种名为Zero-DCE的创新方法&#xff0c;用于增强低光照图像。其主要创新点在于&#xff0c;它在训练过程中不需要成对或非成对的参考图像&#xff0c;因此是一种“零参考”方法。通过轻量级深度学习模型DCE-Ne…

五星级可视化页面(25):非蓝色系,金色系可视化界面。

深蓝色系的可视化界面是最常见的&#xff0c;本文专门分享一些金色系的可视化界面。

java项目之编程训练系统源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的编程训练系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 编程训练系统的主要使用者管…

TCP套接字【网络】

文章目录 TCP常见接口服务端服务端创建套接字服务端绑定服务端监听服务端获取连接服务端处理请求 客户端客户端创建套接字客户端连接服务器并发起请求 代码 TCP常见接口 创建套接字&#xff1a;&#xff08;TCP/UDP) int socket(int domain, int type, int protocol);inet_at…

超高速传输 -- 超通道Superchannel

超通道表示多个子载波在波分侧合并成一个更大带宽的光通道一起传输。 超通道基于flexible grid技术&#xff0c;能够提升频谱效率、降低滤波器级联代价。 超通道目前主要应用在波长间隔为37.5GHz的场景&#xff0c;在此场景下&#xff0c;多个ROADM单板级联时的…

速通LLaMA1:《LLaMA: Open and Efficient Foundation Language Models》全文解读

文章目录 论文总览1. 创新点和突破点2. 技术实现与算法创新3. 架构升级4. 概念补充SwiGLU激活函数AdamW 5. 总结 AbstractIntroductionApproachPre-training DataArchitecture&#xff08;架构&#xff09;Optimizer&#xff08;优化器&#xff09;Efficient implementation&am…

浅谈人工智能之基于ollama本地大模型结合本地知识库搭建智能客服

浅谈人工智能之基于ollama本地大模型结合本地知识库搭建智能客服 摘要 随着人工智能技术的飞速发展,基于大型语言模型(LLMs)的智能客服系统逐渐成为提升企业服务质量和效率的关键工具。然而,对于注重数据隐私和安全的企业而言,使用云服务可能会引发数据泄露的风险。因此…

快速打字及技巧

1.tab部首 娴 xian tab nv 楔 xie tab mu 2.用单引号间隔 xian 西安 修改技巧&#xff1a;Ctrl首字母就能快速定位到该字母的前面 3.启用U模式&#xff0c;再也不怕生僻字 u tututu 垚 u niuniuniu 犇 或者用笔画拼音缩写 u pn 㐅 4.启用V模式&#xff0c;输入法秒变计算…

Ubuntu 不重装系统增加交换空间大小

目录 一、设置交换文件 二、删除重新创建交换文件 一、设置交换文件 1、创建新的交换文件 使用 dd 命令创建一个新的交换文件。例如&#xff0c;创建一个4GB的交换文件&#xff1a; sudo dd if/dev/zero of/swapfile bs1G count4 2、设置交换文件的权限 为了安全起见&am…

蒸!--数据在内存中的存储

一.整数在内存中的存储 对于整形来说&#xff1a;数据存放内存中其实存放的是补码。 为什么&#xff1f; 在计算机系统中&#xff0c;数值⼀律⽤补码来表⽰和存储。 原因在于&#xff0c;使⽤补码&#xff0c;可以将符号位和数值域统⼀处理&#xff1b; 同时&#xff0c;加法和…

《Deep Residual Learning for Image Recognition》论文导读

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl论文背景 随着深度学习的发展,神经网络的深度逐渐成为影响模型性能的关键因素。然而,随着网络深度的增加,训练过程中的梯度消失和模型退化问题愈发严重,这限制了神经网络性能的进一步提升。《…