返回顶部
首页 > 资讯 > 后端开发 > Python >Python调用工具包实现发送邮件服务
  • 185
分享到

Python调用工具包实现发送邮件服务

Python发送邮件方法Python发送邮件Python邮件 2023-05-20 05:05:43 185人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1.概述2.邮件模块介绍2.1. 建立连接类型3.发送邮件3.1.发送非安全连接邮件3.2.发送安全连接邮件4.设置邮件内容格式4.1.邮件文本三种类型1.概述 这篇文章主要介绍

1.概述

这篇文章主要介绍python调用工具包实现发送邮件服务。在第二篇文章中介绍封装邮件服务工具类,该工具类将可以应用到其他的项目中。

2.邮件模块介绍

Python内置了发送邮件的模块,因此不需要单独安装。

  • smtplib 模块负责发送邮件
  • email 模块负责格式化邮件内容样式

2.1. 建立连接类型

当使用smtplib模块建立发送邮件连接时可以分为非安全和安全连接两种方式。

安全连接: 当python使用smtplib模块调用邮箱服务端发送邮件过程,传输层使用了SSL加密,避免了明文传递邮件内容,通过拦截请求获取邮件内容和登录账号密码。

非安全连接:邮箱服务端采用明文发送邮件,通过连接请求可以获取邮件内容和登录账号密码。

3.发送邮件

使用python发送邮件之前,需要登录邮箱开启SMTP服务才可以发送邮件。每家的邮箱开启入口不同,开启方式搜索具体产品的邮箱。

3.1.发送非安全连接邮件

建立非安全连接邮箱服务端默认使用25端口发送邮件。

import smtplib
from email.mime.text import MIMEText
#设置服务器所需信息
#邮箱服务器地址
mail_host = 'mail.******.com'
#邮箱登录用户名
mail_user = '******@qq.com'
#密码(部分邮箱为授权码)
mail_pass = '123456'
#邮件发送方邮箱地址
sender = '******@qq.com'
#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receivers = ['32321232@qq.com']
#设置email信息
#邮件内容设置
message = MIMEText('content','plain','utf-8')
#邮件主题
message['Subject'] = 'title'
#发送方信息
message['From'] = sender
#接受方信息
message['To'] = receivers[0]
#登录并发送邮件
try:
   # 建立非安全连接smtplib.SMTP()
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host,25)
    #登录到服务器
    smtpObj.login(mail_user,mail_pass)
    #发送
    smtpObj.sendmail(
        sender,receivers,message.as_string())
    #退出
    smtpObj.quit()
    print('success')
except smtplib.SMTPException as e:
    print('error',e) #打印错误

3.2.发送安全连接邮件

建立非安全连接邮箱服务端默认使用465端口发送邮件。

import smtplib
from email.mime.text import MIMEText
#设置服务器所需信息
#邮箱服务器地址
mail_host = 'mail.******.com'
#邮箱登录用户名
mail_user = '******@qq.com'
#密码(部分邮箱为授权码)
mail_pass = '123456'
#邮件发送方邮箱地址
sender = '******@qq.com'
#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receivers = ['32321232@qq.com']
#设置email信息
#邮件内容设置
message = MIMEText('content','plain','utf-8')
#邮件主题
message['Subject'] = 'title'
#发送方信息
message['From'] = sender
#接受方信息
message['To'] = receivers[0]
# 登录并发送邮件
# 建立安全连接SMTP_SSL,注意端口号默认使用465
with smtplib.SMTP_SSL(mail_host, timeout=10, port=465) as smtpObj:
    try:
        # 登录到服务器
        smtpObj.login(mail_user, mail_pass)
        # 发送
        smtpObj.sendmail(
            sender, receivers, message.as_string())
        print('success')
    except Exception as e:
        print(e)

在使用安全连接发送邮件时可能会抛出下面的异常,这个异常的含义是Python端与邮箱服务端建立连接SSL版本号不对。

ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:997)

这个异常出现的原因:

发送邮件的邮箱服务端没有开启SSL或者不支持,这种清空可以登录邮箱服务端确认,如果不支持只能使用非安全建立连接。

端口号错误造成,邮箱服务端模式使用465端口号连接SSL连接,如果python端设置的端口号与邮箱服务端端口号不一致建立连接也会报上面的异常。

4.设置邮件内容格式

python内置的email模块负责设置邮件内容格式,它包含三个模块对应邮件三种类型的格式。下面具体介绍他们的区别。

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

4.1.邮件文本三种类型

1.MIMEText文本类型

发送普通的文本邮件内容,MIMEText对象中有三个需要我们设置的参数,一个是正文内容,一个是正文内容的类型,例如:”text/plain”和”text/html”,一个是正文内容的编码。

plain构造普通文本

# 文本内容
text_info = 'hello world '
# 构造普通文本对象,包含三个参数,邮件内容,类型,编码
text_sub = MIMEText(text_info,'plain', 'utf-8')  

完整代码

import smtplib
from email.mime.text import MIMEText
# 创建邮件连接
def create_email_connect(mail_host, timeout, port):
    try:
        return smtplib.SMTP_SSL(host=mail_host, timeout=timeout, port=port)
    except Exception as e:
        print(e)
# 构建邮件内容模板
def email_content():
    # 邮件内容设置
    text_info = 'hello world '
    message = MIMEText(text_info, 'plain', 'utf-8')
    # 邮件主题
    message['Subject'] = 'title'
    # 发送方信息
    message['From'] = sender_account
    # 接受方信息
    message['To'] = receivers_account[0]
    return message
def sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account, timeout=10, port=465):
    with create_email_connect(mail_host, timeout, port) as smtpObj:
        try:
            smtpObj.login(mail_user, mail_pass)
            # 发送邮件
            smtpObj.sendmail(
                sender_account, receivers_account, email_content().as_string())
            print('scusses')
        except Exception as e:
            print(e)
if __name__ == '__main__':
    # 设置服务器所需信息
    # 163邮箱服务器地址
    mail_host = 'smtp.163.com'
    # 163用户名
    mail_user = '******@163.com'
    # 密码(部分邮箱为授权码)
    mail_pass = '******'
    # 邮件发送方邮箱地址
    sender_account = '******@163.com'
    # 邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
    receivers_account = ['******@qq.com']
    sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account)

构造html文本

# 邮件内容
url = "https://xxxxx.com"
html_info = """
    <p>点击以下链接,查看邮件详情</p>
    <p><a href="%s">click me</a></p>
    <p>i am very glasses for you</p>
    """ % url
# 构建邮件类型html对象
html_sub = MIMEText(html_info, 'html', 'utf-8')  
# 如果不加下边这行代码的话,上边的文本是不会正常显示的,会把超文本的内容当做文本显示
html_sub["Content-Disposition"] = 'attachment; filename="email.html"'

构造base64数据流,用于发送文件的时候使用,构造附件代码

txt_file = open(r'D:\python_files\files\hello_world.txt', 'rb').read()
txt = MIMEText(txt_file, 'base64', 'utf-8')
txt["Content-Type"] = 'application/octet-stream'
# 命名发送的附件
txt.add_header('Content-Disposition', 'attachment', filename='hello_world.txt')

2.MIMEImage图片类型

构造图片类型对象

image_file = open(r'D:\python_files\images\test.png', 'rb').read()
image = MIMEImage(image_file)
image.add_header('Content-ID', '<image1>')
# 命名发送的图片
image["Content-Disposition"] = 'attachment; filename="red_people.png"'

完整代码

import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
# 创建邮件连接
def create_email_connect(mail_host, timeout, port):
    try:
        return smtplib.SMTP_SSL(host=mail_host, timeout=timeout, port=port)
    except Exception as e:
        print(e)
# 构建邮件内容模板
def email_content():
    # 邮件内容设置
    image_file = open(r'./白玉堂.jpg', 'rb').read()
    message = MIMEImage(image_file)
    # 命名发送的图片
    message["Content-Disposition"] = 'attachment; filename="red_people.png"'
    # 邮件主题
    message['Subject'] = 'title'
    # 发送方信息
    message['From'] = sender_account
    # 接受方信息
    message['To'] = receivers_account[0]
    return message
def sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account, timeout=10, port=465):
    with create_email_connect(mail_host, timeout, port) as smtpObj:
        try:
            smtpObj.login(mail_user, mail_pass)
            # 发送邮件
            smtpObj.sendmail(
                sender_account, receivers_account, email_content().as_string())
            print('scusses')
        except Exception as e:
            print(e)
if __name__ == '__main__':
    # 设置服务器所需信息
    # 163邮箱服务器地址
    mail_host = 'smtp.163.com'
    # 163用户名
    mail_user = '******@163.com'
    # 密码(部分邮箱为授权码)
    mail_pass = '******'
    # 邮件发送方邮箱地址
    sender_account = '******@163.com'
    # 邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
    receivers_account = ['******@qq.com']
    sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account)

3.MIMEMultipart

对象创建的类型有三种,此模块主要是通过attach方法把上边构造的内容传入到邮件的整体内容中

邮件类型为”multipart/alternative”的邮件正文中包括纯文本正文(text/plain)和超文本正文(text/html)。

邮件类型为”multipart/related”的邮件正文中包括图片,声音等内嵌资源。

邮件类型为”multipart/mixed”的邮件包含附件,图片,文本等都可以添加,所以发的内容多的话一般是用这个的,选择mixed类型,什么内容都可以发。

MIMEMultipart使用方法

MIMEMultipart(‘mixed’).attach(MIMEText或者MIMEImage对象),因为MIMEMultipart对象代表邮件本身,把其他的构造内容添加到MIMEMultipart对象中就可以把文本,html,附件等一起发送。

构造图片类型内容

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# 创建邮件连接
def create_email_connect(mail_host, timeout, port):
    try:
        return smtplib.SMTP_SSL(host=mail_host, timeout=timeout, port=port)
    except Exception as e:
        print(e)
# 构建邮件内容模板
def email_content():
    # 邮件内容设置
    image_file = open(r'./白玉堂.jpg', 'rb').read()
    # 创建MIMEImage类型对象
    mimei_image = MIMEImage(image_file)
    message = MIMEMultipart('mixed')
    # attach包装MIMEImage对象
    message.attach(mimei_image)
    # 命名发送的图片
    message["Content-Disposition"] = 'attachment; filename="red_people.png"'
    # 邮件主题
    message['Subject'] = 'title'
    # 发送方信息
    message['From'] = sender_account
    # 接受方信息
    message['To'] = receivers_account[0]
    return message
def sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account, timeout=10, port=465):
    with create_email_connect(mail_host, timeout, port) as smtpObj:
        try:
            smtpObj.login(mail_user, mail_pass)
            # 发送邮件
            smtpObj.sendmail(
                sender_account, receivers_account, email_content().as_string())
            print('scusses')
        except Exception as e:
            print(e)
if __name__ == '__main__':
    # 设置服务器所需信息
    # 163邮箱服务器地址
    mail_host = 'smtp.163.com'
    # 163用户名
    mail_user = '******@163.com'
    # 密码(部分邮箱为授权码)
    mail_pass = '******'
    # 邮件发送方邮箱地址
    sender_account = '******@163.com'
    # 邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
    receivers_account = ['******@qq.com']
    sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account)

构造普通类型发送附件邮件

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# 创建邮件连接
def create_email_connect(mail_host, timeout, port):
    try:
        return smtplib.SMTP_SSL(host=mail_host, timeout=timeout, port=port)
    except Exception as e:
        print(e)
# 构建邮件内容模板
def email_content():
    # 邮件内容设置
    text_file = open(r'./白玉堂.jpg', 'rb').read()
    # 创建MIMEImage类型对象
    mime_obj = MIMEText(text_file, 'base64', 'utf-8')
    # 命名发送的图片
    mime_obj.add_header('Content-Disposition', 'attachment', filename='red_people.jpg')
    mime_obj.add_header('Content-Type', 'application/octet-stream')
    # 构建mime对象
    message = MIMEMultipart('mixed')
    # attach包装MIMEImage对象
    message.attach(mime_obj)
    # 邮件主题
    message['Subject'] = '测试邮件'
    # 发送方信息
    message['From'] = sender_account
    # 接受方信息
    message['To'] = receivers_account[0]
    return message
def sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account, timeout=10, port=465):
    with create_email_connect(mail_host, timeout, port) as smtpObj:
        try:
            smtpObj.login(mail_user, mail_pass)
            # 发送邮件
            smtpObj.sendmail(
                sender_account, receivers_account, email_content().as_string())
            print('scusses')
        except Exception as e:
            print(e)
if __name__ == '__main__':
    # 设置服务器所需信息
    # 163邮箱服务器地址
    mail_host = 'smtp.163.com'
    # 163用户名
    mail_user = '******@163.com'
    # 密码(部分邮箱为授权码)
    mail_pass = '******'
    # 邮件发送方邮箱地址
    sender_account = '******@163.com'
    # 邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
    receivers_account = ['******@qq.com']
    sent_email(mail_user, mail_pass, mail_host, sender_account, receivers_account)

到此这篇关于Python调用工具包实现发送邮件服务的文章就介绍到这了,更多相关Python发送邮件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python调用工具包实现发送邮件服务

本文链接: https://lsjlt.com/news/213930.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python调用工具包实现发送邮件服务
    目录1.概述2.邮件模块介绍2.1. 建立连接类型3.发送邮件3.1.发送非安全连接邮件3.2.发送安全连接邮件4.设置邮件内容格式4.1.邮件文本三种类型1.概述 这篇文章主要介绍...
    99+
    2023-05-20
    Python发送邮件方法 Python发送邮件 Python邮件
  • Python 调用API发送邮件
    在运营或者对各种 SDK 或者 API 进行调试的时候,邮件功能基本上都会被使用到。 在测试的时候,可能很多人都会使用 SMTP 或者自己的邮箱使用 SMTP 来进行发送,通常来说是...
    99+
    2024-04-02
  • Python编写的Linux邮件发送工具
    之前有用过Linux自带的mail工具来定时发送邮件,但是要装mailx还有配mail.rc,这还比较正常,关键是到了ubantu下这工具用起来真是操蛋,如果哪天其他的unix like操作系统也有需求,那就太麻烦了,所以我用自带的pyt...
    99+
    2023-01-31
    邮件发送 工具 Python
  • C#调用OutLokk实现发送邮件
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-27
    C# OutLokk发送邮件 C# 发送邮件 C# OutLokk
  • Python实现邮件发送
    使用smtplib模块发送邮件,它对smtp协议进行了简单的封装。smtp协议的基本命令包括:    HELO 向服务器标识用户身份    MAIL 初始化邮件传输 mail from:    RCPT 标识单个的邮件接收人;常在MAIL命...
    99+
    2023-01-31
    邮件发送 Python
  • 利用Python实现邮件发送
    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是⼀一组⽤用于由源地址到⽬目的地址传送邮件的规则,由它来控制信件的中转⽅方式。python的smtplib提供了了⼀一种很⽅方便便的途径发送电⼦子邮...
    99+
    2023-05-14
    Python 邮件发送
  • java发送邮件的具体实现
    首先是继承自javax.mail.Authenticator的一个具体类。getPasswordAuthentication()方法也就是构建一个PasswordAuthentica...
    99+
    2022-11-15
    java 发送邮件
  • 如何用Python实现邮件发送
    今天小编给大家分享一下如何用Python实现邮件发送的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一. 准备用来发送邮件的邮...
    99+
    2023-07-06
  • Python如何调用API发送邮件
    这篇文章将为大家详细讲解有关Python如何调用API发送邮件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python 调用 APIPython 调用 API 非常简单,通常需要一个称为 request...
    99+
    2023-06-14
  • Python实现各种邮件发送
    目录一、发送纯文本内容二、发送附件图片三、发送纯文本附件四、发送excel表格附件前言: Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。 Pyt...
    99+
    2024-04-02
  • Python实现发送邮件到自己邮箱
    目录1、缘由2、设置SMTP服务器3、使用python发送4、总结5、补充1、缘由 在日常开发中,我们经常需要监控应用程序的状态,及时发现问题并采取措施解决。而通过邮件发送报警信息则...
    99+
    2023-05-14
    Python发送邮件到邮箱 Python发送邮件 Python 邮件 邮箱
  • nodejs如何实现邮件发送服务
    这篇文章将为大家详细讲解有关nodejs如何实现邮件发送服务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前段时间,想用python实现发送邮件的服务,用的是smtp,但...
    99+
    2024-04-02
  • python实现SMTP邮件发送功能
    一直想着给框架添加邮件发送功能、所以整理下python下邮件发送功能 首先python是支持邮件的发送、内置smtp库、支持发送纯文本、HTML及添加附件的邮件。之后是邮箱、像163、qq、新浪等邮箱默认关...
    99+
    2022-06-04
    邮件发送 功能 python
  • python实现发送邮件的方法
    这篇文章将为大家详细讲解有关python实现发送邮件的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.设置邮箱,如下图所示2.设置过程如下图所示:设置完成后,添加如下代码:# coding...
    99+
    2023-06-06
  • Python实现自动化发送邮件
    目录开门见山自动化发送邮件SMTP 介绍开启SMTP服务邮件的属性配置发送文本邮件发送HTML邮件发送附件邮件后记总结开门见山 自动化测试过程中,一般测试结果都会以邮件的形式发送给相...
    99+
    2024-04-02
  • PHP实现邮件发送时的邮件服务器选择
    随着互联网快速发展,电子邮件作为一种重要的通信方式,被广泛应用于个人和企业的日常生活和工作中。而邮件服务器是电子邮件体系结构中的核心组成部分。在使用PHP实现邮件发送时,如何选择合适的邮件服务器是非常重要的。一、邮件服务器的选择邮件服务器是...
    99+
    2023-05-22
    PHP邮件发送 实现方法 邮件服务器选择
  • PHP使用laravel邮件服务发送邮件
    目录配置生成 Mailables编写 Mailables配置发件人配置 Laravel 的邮件服务可以通过 config/mail.php 配置文件进行配置。 邮件中的每一项都在配置...
    99+
    2023-03-06
    PHP laravel发送邮件 PHP发送邮件 PHP邮件服务
  • python实现发送邮件及附件功能
    今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如果没...
    99+
    2022-06-04
    发送邮件 附件 功能
  • nodejs实现邮件发送服务实例分享
    前段时间,想用python实现发送邮件的服务,用的是smtp,但是不知道为什么一直没有成功,于是想用nodejs尝试下,意外的简单容易。 先安装模块: npm install nodemailer -...
    99+
    2022-06-04
    邮件发送 实例 nodejs
  • python发送邮件功能实现代码
    本文实例为大家分享了python发邮件精简代码,供大家参考,具体内容如下 import smtplib from email.mime.text import MIMEText from email.u...
    99+
    2022-06-04
    发送邮件 代码 功能
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作