python使用SMTP发送qq或sina邮件

接下来我将详细讲解如何使用 Python 连接 QQ 或 SINA 邮箱的 SMTP 服务器来发送邮件,并提供两个示例。

步骤一:准备工作

在使用 Python 发送邮件之前,我们需要先开通 SMTP 远程登录授权码。

  1. QQ 邮箱:登录 QQ 邮箱,在“设置”-“账户”中开启 POP3/SMTP 服务,然后再获取授权码。

  2. SINA 邮箱:登录 SINA 邮箱,在“设置”-“基本设置”-“POP3/SMTP/IMAP”中开启 SMTP 服务,然后再获取授权码。

步骤二:引入库并设置参数

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

# 邮箱参数
SMTP_SERVER = 'smtp.qq.com'  # SMTP 服务器地址
SMTP_PORT = 465  # SMTP 服务器端口,QQ邮箱端口为465,SINA邮箱端口为25
MAIL_USERNAME = 'example@qq.com'  # 发件人邮箱账号
MAIL_PASSWORD = '授权码'  # 发件人邮箱授权码

# 邮件内容
FROM_ADDR = 'example@qq.com'  # 发件人邮箱地址
TO_ADDR = 'example@sina.com'  # 收件人邮箱地址
MAIL_BODY = '请查收附件!'  # 邮件正文内容,可以是纯文本或 HTML
MAIL_SUBJECT = 'Python SMTP 邮件测试'  # 邮件主题

以上代码中,我们成功导入了 smtplibMIMETextHeader 三个模块。随后,我们设置了邮件发送所需的参数,包括发件人和收件人的邮箱地址、SMTP 服务器地址、SMTP 服务器端口、发件人邮箱账号和授权码等信息。最后,我们还定义了邮件正文和邮件主题。

步骤三:连接邮箱服务器并进行认证

try:
    server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
    server.login(MAIL_USERNAME, MAIL_PASSWORD)
    print("登录成功")
except smtplib.SMTPException as e:
    print("登录失败,原因:", e)

在以上代码中,我们使用 smtplib 模块中的 SMTP_SSL 方法建立与 SMTP 服务器的 SSL 加密连接,并调用 login 方法进行账户认证。其中,login 方法需要传入发件人邮箱账号和授权码两个参数。

步骤四:构造邮件内容并发送邮件

try:
    message = MIMEText(MAIL_BODY, 'plain', 'utf-8')
    message['From'] = Header(FROM_ADDR, 'utf-8')
    message['To'] = Header(TO_ADDR, 'utf-8')
    message['Subject'] = Header(MAIL_SUBJECT, 'utf-8')
    server.sendmail(FROM_ADDR, [TO_ADDR], message.as_string())
    print("邮件发送成功")
except Exception as e:
    print("邮件发送失败,原因:", e)
finally:
    server.quit()

在以上代码中,我们使用 MIMEText 类构造邮件正文,并使用 Header 类添加发件人、收件人和主题信息。然后,我们调用 sendmail 方法发送邮件。该方法需要传入发件人邮箱地址、收件人邮箱地址和邮件内容三个参数,其中邮件内容需要使用 message.as_string() 方法将其转换为字符串类型。最后,我们调用 quit 方法断开与 SMTP 服务器的连接。

示例一:发送纯文本邮件

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

# 邮箱参数
SMTP_SERVER = 'smtp.qq.com'
SMTP_PORT = 465
MAIL_USERNAME = 'example@qq.com'
MAIL_PASSWORD = '授权码'

# 邮件内容
FROM_ADDR = 'example@qq.com'
TO_ADDR = 'example@sina.com'
MAIL_BODY = '这是一封使用 Python 发送的纯文本邮件!'
MAIL_SUBJECT = 'Python SMTP 邮件测试'

try:
    server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
    server.login(MAIL_USERNAME, MAIL_PASSWORD)

    message = MIMEText(MAIL_BODY, 'plain', 'utf-8')
    message['From'] = Header(FROM_ADDR, 'utf-8')
    message['To'] = Header(TO_ADDR, 'utf-8')
    message['Subject'] = Header(MAIL_SUBJECT, 'utf-8')
    server.sendmail(FROM_ADDR, [TO_ADDR], message.as_string())
    print("纯文本邮件发送成功")
except Exception as e:
    print("邮件发送失败,原因:", e)
finally:
    server.quit()

在以上示例中,我们发送了一封纯文本邮件。其中,我们使用 MIMEText 类构造邮件正文,并将第二个参数设置为 plain。这意味着邮件正文以纯文本方式展示。此外,所有的 HTML 标签都将被忽略。

示例二:发送带附件的邮件

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header

# 邮箱参数
SMTP_SERVER = 'smtp.qq.com'
SMTP_PORT = 465
MAIL_USERNAME = 'example@qq.com'
MAIL_PASSWORD = '授权码'

# 邮件内容
FROM_ADDR = 'example@qq.com'
TO_ADDR = 'example@sina.com'
MAIL_BODY = '请查收附件!'
MAIL_SUBJECT = 'Python SMTP 邮件测试'

try:
    server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
    server.login(MAIL_USERNAME, MAIL_PASSWORD)

    message = MIMEMultipart()
    message.attach(MIMEText(MAIL_BODY, 'plain', 'utf-8'))

    # 添加附件
    with open("example.zip", "rb") as f:
        attachment = MIMEApplication(f.read(), _subtype='zip')
        attachment.add_header('Content-Disposition',
                              'attachment', filename='example.zip')
        message.attach(attachment)

    message['From'] = Header(FROM_ADDR, 'utf-8')
    message['To'] = Header(TO_ADDR, 'utf-8')
    message['Subject'] = Header(MAIL_SUBJECT, 'utf-8')
    server.sendmail(FROM_ADDR, [TO_ADDR], message.as_string())
    print("带附件的邮件发送成功")
except Exception as e:
    print("邮件发送失败,原因:", e)
finally:
    server.quit()

以上示例中,我们发送了一封带有附件的邮件。其中,我们使用 MIMEMultipart 类构造多部分邮件内容,并使用一个 MIMEText 对象来保存邮件正文。随后,我们使用 MIMEApplication 类构造附件,并将其添加到邮件中,然后使用 add_header 方法为附件添加一个头部。最后,我们使用 sendmail 方法将邮件发送出去。

这两个示例中的代码块都是使用标准的 Markdown 格式编写的,可以在 GitHub 和博客等平台上直接复制粘贴使用。希望这个完整攻略对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python使用SMTP发送qq或sina邮件 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Python–模块(Module)和包(Package)详解

    下面是关于Python模块和包的完整攻略。 模块和包的概念 什么是模块(Module)? 在Python中,模块就是一个包含Python代码的文件。这些文件包含了变量、函数、类等Python代码,可以使用import语句导入到其他Python脚本中使用。 什么是包(Package)? 包是一个包含了多个模块的文件夹。包中的模块可以彼此之间调用,组合形成一个功…

    python 2023年5月13日
    00
  • 更改函数中的变量(Python 3.x)

    【问题标题】:Change variable in function (Python 3.x)更改函数中的变量(Python 3.x) 【发布时间】:2023-04-03 18:06:01 【问题描述】: 如果你有这样的python代码: thing = “string” def my_func(variable): variable = input(“Ty…

    Python开发 2023年4月8日
    00
  • python保存二维数组到txt文件中的方法

    以下是详细讲解“python保存二维数组到txt文件中的方法”的完整攻略。 1.准备工作 在保存二维数组到txt文件中之前,我们需要先导入Python的相关模块,如下所示: import numpy as np 这里我们选择使用Python常用的科学计算库NumPy。 2.二维数组的创建 接下来,我们需要创建一个二维数组。我们可以通过NumPy的array函…

    python 2023年6月5日
    00
  • python编程-将Python程序转化为可执行程序[整理]

    Python编程:将Python程序转化为可执行程序 在这篇攻略中,我们将详细讲解如何将Python程序转化为可执行程序。通常情况下,我们编写完Python程序之后可以直接使用Python解释器执行,但是这种方式往往需要在安装好Python解释器的情况下才能正常运行。如果我们需要将程序分享给其他人或发布到生产环境中,则可能需要将Python程序转化为可执行程…

    python 2023年5月23日
    00
  • 拆分字节数组然后在Python中将其转换为字符串的有效方法

    【问题标题】:Efficient way to split a bytes array then convert it to string in Python拆分字节数组然后在Python中将其转换为字符串的有效方法 【发布时间】:2023-04-04 11:32:01 【问题描述】: 我有一个包含字符的 numpy 字节数组,后跟 b”,然后是其他字符(…

    Python开发 2023年4月6日
    00
  • python字符串string的内置方法实例详解

    下面是“python字符串string的内置方法实例详解”的完整攻略: Python字符串string的内置方法实例详解 一、前言 在 Python 中,字符串是一个非常常用且重要的数据类型,常常使用其中内置的方法来进行各种字符串操作。本文旨在详细介绍 Python 字符串的内置方法,以及如何使用它们。 二、字符串的表示方式 字符串可以使用单引号(’)或双引…

    python 2023年6月5日
    00
  • python语言元素知识点详解

    下面让我详细讲解一下“Python语言元素知识点详解”的完整攻略: Python语言元素知识点详解 什么是Python语言元素 Python语言元素是构成Python程序的最小单位,包括标识符、关键字、常量、变量、表达式等等。本攻略将详细介绍Python语言元素的各种知识点,以便帮助初学者更好地理解和掌握Python编程语言。 标识符 标识符是用来标识变量、…

    python 2023年6月3日
    00
  • 总结Python函数参数的六种类型

    下面就为大家详细讲解Python函数参数的六种类型。 Python函数参数的六种类型 在Python中,函数参数可以分为六种类型: 位置参数(Positional Arguments) 默认参数(Default Arguments) 可变长位置参数(Variable-Length Positional Arguments) 可变长关键字参数(Variable…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部