python自动发送邮件实现

news/2024/11/20 7:03:48/

目录

    • 1 前言
    • 2 准备工作
      • 2.1 电子邮件的基础知识。
      • 2.2 python邮件库
      • 2.3 邮箱设置
    • 3 python实现邮件自动发送
      • 3.1 SMTP()和send()方法介绍
      • 3.2 python实现实例
    • 参考信息

1 前言

python功能强大,可以实现我们日常办公的很多任务。诸如批量处理word,excel,pdf等等文件,今天先主要对如何用python来实现邮件的发送作一总结。

2 准备工作

2.1 电子邮件的基础知识。

电子邮件通俗讲就是将我们的实体信件网络化,借助互联网来发送和接收。
以QQ邮箱的发送邮件界面为例,其中包括收件人(抄送人、密送人)、主题、附件、正文、发件人等部分。

在这里插入图片描述

2.2 python邮件库

使用python来实现自动发送邮件的功能,本质上也是模拟我们实操的这一过程,只是用代码模拟了这一过程。python中内置了邮件处理的库——smtplib,不过推荐使用yagmail库,其底层仍然使用的smtplib,其提供的借口更适合日常的简单使用。

2.3 邮箱设置

想要利用python实现邮件自动发送,首先必须开通自己邮箱的SMTP服务。一般在设置中就可以找到,如下例所示。
在这里插入图片描述
开启SMTP服务后,就可以获取到当前账户的授权码(该授权码一定要记得复制、保存,这会在程序实现的过程中用到),如下图所示。
在这里插入图片描述

3 python实现邮件自动发送

实现邮件的自动发送主要用到yagmail模块中的SMTP()方法和send()方法。实现邮件的发送过程可以概括为三步:

  1. 调用SMTP()方法,创建SMTP实例;
  2. 调用send()方法,执行发送邮件操作;
  3. 断开连接。

3.1 SMTP()和send()方法介绍

SMTP()方法常用的参数如下

  • user=“发件人邮箱地址”
  • password=“授权码”
  • host=“SMTP服务器域名”

常见的电子邮件服务商的SMTP服务器域名

  • 163邮箱 :smtp.163.com
  • 126邮箱 :smtp.126.com
  • qq邮箱 :smtp.qq.com
  • Gmail邮箱 :smtp.gmail.com
  • Outlook邮箱;smtp.office365.com

send()方法常用的参数如下

  • to=收件人邮箱地址,
  • subject=邮件主题,
  • contents=正文,
  • attachments=附件存储路径,
  • cc=抄送人邮箱地址,
  • bcc=秘密抄送人邮箱地址,

当收件人有多个时,使用列表存储即可;当正文有多段时,也用列表存储即可,其他诸如附件、抄送人等有多个时,同样用列表存储即可。

3.2 python实现实例

第一个实例,自己给自己邮箱发送一个‘hello’信息,测试一下。

import yagmailmail = yagmail.SMTP("14****03@qq.com","授权码","smtp.qq.com")
mail.send("14****03@qq.com","测试邮件",'hello')
mail.close()

邮箱显示结果如下:
在这里插入图片描述
第二个实例,测试给邮箱发送多段信息,包括图片,以及发送附件信息到邮箱。

import yagmailmail = yagmail.SMTP("14****03@qq.com","授权码","smtp.qq.com")
subject = '测试正文和附件结果'
contents = ['各位领导:','请查收如下开会通知信息。详情可参考图片。',yagmail.inline(r"C:\Users\mu\Pictures\Camera Roll\Sni22.jpg"),'<a href="www.baidu.com">具体查询网址']
attachments = r"C:\Users\mu\Pictures\Camera Roll\WIN_20221212_21_41_11_Pro.jpg"
mail.send( "14****03@qq.com",subject,contents,attachments)
mail.close()

收件邮箱显示结果如下:
在这里插入图片描述

参考信息

  • python发送邮件(单发/群发)——yagmail模块
  • 《快学Python:自动化办公轻松实战》 ,黄伟、朱鹏伟,电子工业出版社,9787121436345,2022

http://www.ppmy.cn/news/24178.html

相关文章

1.2(完结)C语言进阶易忘点速记

1.大端存储&#xff1a;高权位数字放在低地址处&#xff0c;低权位数字放在高地指处。(以字节为单位) 2.小端存储&#xff1a;低权位数字放在低地址处&#xff0c;高权位数字放在高地址处。(以字节为单位) 3.变量(char类型)进行运算的时候一定要注意整形提升与截断&#xff0…

姿态估计端到端新方案 | DirectMHP:用于全范围角度2D多人头部姿势估计

前言 现有的头部姿势估计主要集中在具有预先检测到的正面头部的单个人&#xff0c;这依赖于单独训练的面部检测器&#xff0c;不能很好地泛化到完整的视点。在本文中&#xff0c;作者关注全范围 MPHPE 问题&#xff0c;并提出了一个名为 DirectMHP 的直接端到端简单基线&#x…

Element UI框架学习篇(五)

Element UI框架学习篇(五) 1 准备工作 1.1 在zlz包下创建数据传输对象类EmpDTO package com.zlz.dto;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;//根据前台来的 Data public class EmpDTO {private String name;private Stri…

oralce查找返回不同的值,寻找不同的表(原创)

查找返回不同的值&#xff0c;寻找不同的表 select case a_id when 1 then (select b_id|| ||b_desc from b where b.b_ida.a_id) else (select e_id || ||e_desc from e where e.e_ida.a_id) end from a; 以上方法的缺陷是单表&#xff0c;判断。今天来了个挑战&#…

西湖论剑 2023 比赛复现

WEB real_ez_node 在 route/index.js 中&#xff1a; router.post(/copy,(req,res)>{res.setHeader(Content-type,text/html;charsetutf-8)var ip req.connection.remoteAddress;console.log(ip);var obj {msg: ,}if (!ip.includes(127.0.0.1)) {obj.msg"only for…

第44章 用户密码实体及其约束规则的定义实现

1 说明&#xff1a; 由当前程序需要兼容实现多种用户密码的加密操作&#xff0c;所以必须把“CustomerPassword”定义为实体类&#xff0c;该类用于用于把加密方式、密钥及其加密后的密码持久化到“CustomerPassword”表中&#xff0c;以便用为用户登录操作提供验证支撑。 如果…

ubuntu20.04安装docker与docker-compose

安装docker 查看系统发行版本 cat /proc/version1、更新apt包 sudo apt-get update2、安装必备的软件包以允许apt通过 HTTPS 使用存储库&#xff08;repository&#xff09;&#xff1a; sudo apt-get install ca-certificates curl gnupg lsb-release3、添加Docker官方版本…

SharkTeam:Move合约开发与合约安全

近期&#xff0c;围绕 Aptos 和 Sui&#xff0c;新兴的高性能 L1链 以及这些新链背后的 Move 智能合约编程语言引起了很多关注&#xff0c;社区也非常活跃&#xff0c;很多开发者和项目已经开始积极转向 Move。但Move相对Solidity差别较大&#xff0c;即使是相对比较接近的Rust…