python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件

这篇具有很好参考价值的文章主要介绍了python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

发送邮件

1、准备工作:

2、发送纯文本信息内容:

3、发送 HTML 格式的内容:

4、发送带附件的邮件:

5、群发(一个邮件,发给多个人):


发送邮件

        以下都 以 QQ邮箱 为发送方举例;

 文章来源地址https://www.toymoban.com/news/detail-707399.html

1、准备工作:

         使用 QQ邮箱发送邮件,需要到 “设置”=>“账号” 中 开启 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

        开启服务后,点击 管理服务

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

        然后会跳转到账号与安全页面,点击生成授权码以生成授权码,并记录下授权码:

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

参考:

https://wx.mail.qq.com/list/readtemplate?name=app_intro.html#/agreement/authorizationCode

2、发送纯文本信息内容:

import smtplib
import time
from email.mime.text import MIMEText

def send_QQ_email_plain():
    sender = user = 'sender@qq.com'    # 发送方的邮箱账号
    passwd = 'abcdefgxxxxx'            # 授权码

    receiver = 'receiver@qq.com'        # 接收方的邮箱账号,不一定是QQ邮箱

    # 纯文本内容 
    msg = MIMEText(f'Python 邮件发送测试 {time.time()}', 'plain', 'utf-8')

    # From 的内容是有要求的,前面的abc为自己定义的 nickname,如果是ASCII格式,则可以直接写
    msg['From'] = f'abc <sender@qq.com>' 
    msg['To'] = receiver
    msg['Subject'] = 'Python SMTP 邮件测试'         # 点开详情后的标题

    try:
        # 建立 SMTP 、SSL 的连接,连接发送方的邮箱服务器
        smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)

        # 登录发送方的邮箱账号
        smtp.login(user, passwd)

        # 发送邮件 发送方,接收方,发送的内容
        smtp.sendmail(sender, receiver, msg.as_string())

        print('邮件发送成功')

        smtp.quit()
    except Exception as e:
        print(e)
        print('发送邮件失败')

        对于 msg['Form'] 的要求:

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

 

        如果自定义的 nickname 是非 ASCII 字符,则直接写会报错,如:

msg['From'] = f'好 <sender@qq.com>'

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

 

        正确的格式为:

msg['From'] = f'=?UTF-8?B?{base64.b64encode("好".encode()).decode()}?= <sender@qq.com>'

        如果接收方是 QQ 邮箱,则前面的 nickname 会显示在该位置:

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

        如果不需要自己定义 nickname,也可以直接使用邮箱账号:

msg['From'] = '12345@qq.com'

        则会显示邮箱账号:

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

 

         点开邮件查看详情:

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

 

3、发送 HTML 格式的内容:

import base64
import smtplib
import time
from email.mime.text import MIMEText

def send_QQ_mail_HTML():
    user = 'sender@qq.com'
    passwd = 'abcdefxxxx'
    receiver = 'receiver@qq.com'

    # 直接写
    # html_content = '''
    #     <h1>这个是邮件的内容</h1>
    # '''

    # 读入 html 文件的内容
    with open('./for_email.html', mode='r', encoding='utf-8') as f:
        html_content = f.read()

    # 指定类型是 html
    msg = MIMEText(html_content, 'html', 'utf-8')
    msg['From'] = user
    msg['To'] = receiver
    msg['Subject'] = '测试发送 HTML 内容'

    try:
        smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
        smtp.login(user, passwd)
        smtp.sendmail(user, receiver, msg.as_string())
        print('发送成功')
    except:
        print('发送失败')

        for_email.html 的内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        h1{
            color: brown;
        }
        p{
            margin: 5px;
            color: purple;
        }
    </style>
</head>
<body>
    <h1>这是一个邮件内容的标头</h1>
    <img src="https://img1.baidu.com/it/u=1890390320,3399874998&fm=253&fmt=auto&app=120&f=JPEG?w=1422&h=800">
    <div>
        <h3>From合法性检查</h3>
        <p>一、根据RFC5322协议,邮件标头中需要包含'From'信息。</p>
        <p>二、根据RFC2047, RFC822协议,邮件标头中的'From'形式为:</p>
        <p>1. 邮箱地址形式:prefix@domain, 如 'abc@qq.com'。</p>
        <p>2. 昵称+空格+&lt;邮箱地址&gt;形式:nickname &lt;prefix@domain&gt;,其中,nickname为ASCII字符集中字符组合或编码文本:</p>
        <p>(1)如果昵称全为ASCII字符,如'ABC',邮箱地址为'abc@qq.com',则标头中的'From'为'ABC &lt;abc@qq.com&gt;'。
            注意'ABC'和'&lt;abc@qq.com&gt;'之间用空格隔开;</p>
        <p>(2)如果昵称包含非ASCII字符,如中文,则请使用base64对昵称进行编码。nickname最终的形式为
            :"=?" charset "?" encoding "?" encoded-text "?="。其中,charset为字符集;
            encoding为编码方式,'B'代表base64;encoded-text为编码后的文本。例如,昵称为'QQ邮箱昵称示例',
            邮箱地址为'abc@qq.com',则对昵称进行base64编码,字符集使用UTF-8,则
            nickname为 '=?UTF-8?B?UVHpgq7nrrHmmLXnp7DnpLrkvos=?=',最终邮件标头中的
            'From'为'"=?utf-8?B?UVHpgq7nrrHmmLXnp7DnpLrkvos=?=" &lt;abc@qq.com&gt;'。
            注意编码文本和邮件地址间用空格隔开。</p>
    </div>
</body>
</html>

 

        该html中含有引用了外链的img图片,如果接收方为QQ邮箱,则默认不会显示图片:

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

        如果是其他的邮箱,图片有可能可以显示(如企业微信的邮箱),html 的样式也可能会丢失不奏效。

4、发送带附件的邮件:

import base64
import smtplib
import time
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def send_QQ_email_mul():
    sender = user = 'sender@qq.com'
    passwd = 'abcdefghijk'         # 不是密码,是生成的 授权码
    receiver = 'receiver@qq.com'

    content = MIMEMultipart()           # 创建一个包含多个部分的内容
    content['From'] = user
    content['To'] = receiver
    content['Subject'] = 'Test Email'

    # 添加文本内容
    # text = MIMEText('this is a test email.', 'plain', 'utf-8')
    # content.attach(text)

    # 添加html内容
    with open('./for_email.html', mode='r', encoding='utf-8') as f:
        html_content = f.read()
    msg = MIMEText(html_content, 'html', 'utf-8')
    content.attach(msg)

    # 添加附件
    with open('./data.xlsx', 'rb') as f:
        attachment = MIMEApplication(f.read())    # 读取为附件
        attachment.add_header('Content-Disposition', 'attachment', filename='data.xlsx')
        content.attach(attachment)

    try:
        smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
        smtp.login(user, passwd)
        smtp.sendmail(sender, receiver, content.as_string())
        print('邮件发送成功')
    except Exception as e:
        print(e)
        print('发送邮件失败')

python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件,Python,python,笔记,学习

5、群发(一个邮件,发给多个人):

        将 receiver 写成每个人的邮箱账号数组即可

import base64
import smtplib
import time
from email.mime.text import MIMEText

def send_QQ_mail():
    sender = user = '12345@qq.com'
    passwd = 'ABCD'

    # 写成数组,将发给这三者
    receiver = ['abcdef@qq.com','aaa@xxx.edu.cn','abcd@gmail.com']

    msg = MIMEText(f'Python 邮件发送测试 {time.time()}', 'plain', 'utf-8')
    msg['From'] = f'=?UTF-8?B?{base64.b64encode("好".encode()).decode()}?= <sender@qq.com>'
    msg['To'] = 'you'            # 每个人都会看到这个内容
    msg['Subject'] = 'Python SMTP 邮件测试'         # 点开详情后的标题

    try:
        # 建立 SMTP 、SSL 的连接
        smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
        # 登录
        smtp.login(user, passwd)
        # 发送邮件 发送方,接收方,发送的内容
        smtp.sendmail(sender, receiver, msg.as_string())
        print('邮件发送成功')
        smtp.quit()
    except Exception as e:
        print(e)
        print('发送邮件失败')

 

 

到了这里,关于python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一、Postfix[安装与配置、smtp认证、Python发送邮件以及防垃圾邮件方法、使用腾讯云邮件服务]

    Debian 11 apt install postfix 解释:搭建真实的邮件服务器需要在DNS提供商那里配置下面的dns 配置A记录 mail.www.com - 1.x.x.x 配置MX记录 www.com - mail.www.com 解释:按照上面的配置通常邮件格式就是 admin@www.com 其通过www.com的MX记录找到mail.www.com再通过其A记录来找到对应服务器完成通讯 解

    2024年02月15日
    浏览(48)
  • 足够详细的java邮件发送功能(基于QQ邮箱,包含踩过的坑及解决办法!!)

      由于公司最近有业务需求,需要实现批量发送邮件到指定邮箱的功能,就写了一个小的工具类,开发过程中经历了踩坑然后优化,感觉这个功能还是有些细节还是要注意的,值得写文记录一下,有在开发中碰到相同问题的各位朋友可以参考一下,希望对各位能有所帮助!

    2024年02月07日
    浏览(58)
  • Python SMTP发送邮件和线程

    SMTP(Simple Mail Transfer Protocol)即 简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式 。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。 Python创建 SMTP 对象语法如下: 参数说明: host: SMTP 服

    2023年04月11日
    浏览(41)
  • 使用SMTP协议发送邮件

    剧情介绍 今天心血来潮,学了一下Python3,里面有个章节是发送邮件,用示例里面的代码,运行后报错,然后记录一下问题是如何解决的,大家可以看一下,可以有效避坑。 SMTP简介 SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服

    2024年02月05日
    浏览(64)
  • 使用 office 365 SMTP 发送企业邮件

    最近公司的企业邮箱从 gmail 迁移到了 office 365。不得不说,微软 office 套件的功能在市场上还是无人可以取代的。公司自然需要用 office 365 向客户发送邮件,因此需要重新配置项目的 SMTP 服务器。 一开始直接将 gamil 的 SMTP 服务器地址换成 office 365 的地址即“smtp.office365.com”,

    2024年02月07日
    浏览(46)
  • 【POP3/IMAP/SMTP】QQ邮箱设置

    什么是 POP3/IMAP/SMTP 服务 POP3 (Post Office Protocol - Version 3)协议用于支持使用电子邮件客户端获取并删除在服务器上的电子邮件。 IMAP (Internet Message Access Protocol)协议用于支持使用电子邮件客户端交互式存取服务器上的邮件。 SMTP (Simple Mail Transfer Protocol)协议用于支持使用电

    2024年02月14日
    浏览(45)
  • Python发送QQ邮件

    使用Python的smtplib可以发送QQ邮件,代码如下 发送邮件服务器要用465端口,否则如下错误: login的密码不是邮箱登录密码,而是授权码,需要在QQ邮箱设置-账号里获取。 否则会报如下错误: 发送消息的From和To要用标准格式,否则报错: https://wx.mail.qq.com/list/readtemplate?name=app_

    2024年02月12日
    浏览(57)
  • QQ邮箱 网易邮箱及企业邮箱开通SMTP/POP3及设置授权码

    一 、什么是 POP3/IMAP/SMTP 服务 POP3 (Post Office Protocol - Version 3)协议用于支持使用电子邮件客户端获取并删除在服务器上的电子邮件。 IMAP (Internet Message Access Protocol)协议用于支持使用电子邮件客户端交互式存取服务器上的邮件。 SMTP (Simple Mail Transfer Protocol)协议用于支持

    2024年02月04日
    浏览(90)
  • 网工应用层:电子邮件Email、SMTP协议与使用Telnet发送电子邮件

    参考资料: https://www.bilibili.com/video/BV1c4411d7jb?p=72vd_source=e66dd25b0246f28e772d75f11c80f03c 湖科大的高军老师做的计算机网络课,去年选修的计网全靠高老师,生动,举例丰富,配套实验课,无废话纯干货,单推一波! 电子邮件(E-mail)是一种用电子手段提供信息交换的通信方式,是

    2024年02月14日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包