【LoVissy学习笔记】用Python3.82自动发送邮件。QQ邮箱

本文详细介绍了如何使用Python内置模块和Yagmail库发送邮件,包括设置QQ邮箱SMTP、发送纯文字邮件、HTML格式邮件、附件及CSV文件实现循环发送。内容涵盖SSL/TLS加密、MIME模块应用以及使用Yagmail简化邮件发送过程。
摘要由CSDN通过智能技术生成

内容题要

  • SMTP_SSL()或者.starttls()进行与服务器的安全连接
  • 用python内置的smtplib 测试发送基本的邮件
  • 发送HTML格式的内容
  • 发送附件
  • 结合CSV文件发送匹配到人的文件信息
    • 比如名字,ID,等等
  • 使用Yagmail更方便的发送邮件(傻瓜式)

准备步骤

Python内置的smtplib模块使用的是SMTP协议(Simple Mail Transfer Protocol)。方便起见,我们就以QQ邮箱的SMTP设置来一步一步的讲解。

第一步,设置QQ邮箱。

  1. 点击左上角的【设置】选项

邮箱首页

  1. 点击【账户】,然后拉到下面,看到如下设置

账号设置

  • 保证SMTP服务处于开启状态。同时,点击生成授权码

  • 生成的授权码就是通过python登录邮箱的密码

老少爷们儿,上硬菜啦

为了保证零基础也能明白每个代码的作用,我会尽量把前戏做足,保证整个过程sweet and slow。毕竟九浅一深才是最好的教学。

当然,我也考虑到很多人并不想要教学,所以我会给大家推荐一个傻瓜式的插件Yagmail,非常的方便以及人性化。如果你不想看我BB原理,可以直接跳到Yagmail

稍显复杂的办法

发送邮件之前

在发邮件之前,首先你得保证SMTP链接是加密的,为了安全,多层膜总是好的。SMTP有两种加密协议:

  • SSL (Secure Sockets Layer)
  • TLS (Transport Layer Security)

对应的在代码中的两种加密方式:

  • 在连接时就用SMTP_SSL()方法加密
  • 在连接后用.starttls()方法加密

具体怎么用后文会有代码讲解。

不过需要注意的是,我们在使用SSL加密的时候,还需要使用creat_default_context()正确的配置SSL的环境。说人话就是,有膜,也要戴紧。

使用SMTP_SSL()
import smtplib, ssl


email_host = "smtp.qq.com"  # 邮箱服务器地址
port = 465  # QQ邮箱端口
account = "my@qq.com"  # 登录账号
password = ""  # 密码,即授权码

# 配置SSL加密设置
context = ssl.create_default_context()

with smtplib.SMTP_SSL(host=email_host, port=port, context=context) as server:
    server.login(account, password)
    # TODO: Send email here

这里使用with as是因为发送邮件后,我们希望它能自动关闭。with as本质上就是__enter____exit__的结合,同时它还可以重复循环。

有不理解的地方可以看我上传的资源和笔记。

使用.starttls()

如前文所说,我们除了在连接开始时就加密以外,也可以连接以后再进行加密。

我个人不是很推荐这种方式,不太方便,也容易出错。

注意,SSL和TLS的端口不一样。

import smtplib, ssl


email_host = "smtp.qq.com"  # 邮箱服务器地址
port = 587  # QQ邮箱TLS端口
account = "my@qq.com"  # 登录账号
password = ""  # 密码,即授权码

# 配置SSL加密设置
context = ssl.create_default_context()

# 尝试登录和发送邮件
try:
    server = smtplib.SMTP(email_host, port)
    server.ehlo()  # 给服务器打个招呼,可以省略
    server.starttls(context = context)
    server.login(account, password)
    # TODO: Send email here
except Exception as e:
    # Print any error messages to stdout
    print(e)
finally:
    server.quit()
发送纯文字的邮件

发送邮件的命令需要三个最基本的参数设置,分别是:发件人,收件人,内容。这个不难理解吧?所以我们需要设置好这三个变量,然后调用.sendmail()方法。

sender_email = "my@qq.com"
receiver_email = "your@qq.com"
message = '''\
    Subject:greetings from Zauner

    Welcome to Zaun, asshole'''

server.sendmail(sender_email, receiver_email, message)

而实际使用中,文本类型为中文或者英文的设置是不同的,所以我会分开讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值