完成一个项目的流程

1.明确项目目标

2.分解过程、拆解项目

3.逐步执行、代码实现

目标:Python群发邮件

目标:学会学习新模块

掌握【学习模块的方式】→掌握学习新知识的方式

版本1.0:学习模块,发一封简单邮件

学习方法引导:

搜索关键词“发送邮件 python”,找到解决方案→先纵观搜索出来的内容,找共同点(比如可以知道1.Python可以解决这个问题;2.方法是smtplib,email这两个模块。smtplib是用来发送邮件用的,email是用来构建邮件内容的。这两个都是Python内置模块)→学习这两个模块

学习模块——smtplib模块

1.搜 ‘smtplib python’(高手使用,因为会进官方网站)

2.搜 ‘smtplib 教程 ’(新手使用,比较友好)

多比较几个文档,对于重复部分多的代码,就是你要找的内容。

注意在搜索时,关键词越多越准确,可以使用+或空格连接或and连接关键词

import smtplib #引入smtplib模块

server = smtplib.SMTP() #server是一个变量,smtplib.SMTP()是变量server的值,若不知道SMTP,

#可以在本地编辑器中按住Ctrl键并点击SMTP ,会看到对SMTP的解释

server.connect(host, port) #连接(connect)指定的服务器,host是指定连接的邮箱服务器;port 是“端口”的意思,一般情况下SMTP默认端口号为25。

#如果25行不通,你可以通过搜索或者去邮箱设置里面查看端口。比如,如果我打算用自己的企业邮箱来发邮件,登录邮箱后,在【设置-选项-POP和IMAP】查看端口数字

#QQ 邮箱一般默认关闭SMTP服务,我们得先去开启它:登录你的邮箱。然后点击位于顶部的【设置】按钮,选择【账户设置】开启

server.login(username, password) #username:登录邮箱的用户 password:授权码(在【账户】处获得,用此码登录,而不是你的qq邮箱登录密码)

server.sendmail(sender, to_addr, msg.as_string()) #sendmail是“发送邮件”的意思

#是发送邮件用的,sendmail()方法需要三个参数:发件人,收件人和邮件内容

#from_addr:邮件发送地址,就是上面的username

#to_addr:邮件收件人地址

#msg.as_string():为一个字符串类型

server.quit() #quit是“退出”的意思,就是退出服务器

学习模块——email模块

from email.mime.text import MIMEText #内容形式为纯文本、HTML页面

from email.mime.image import MIMEImage #内容形式为图片

from email.mime.multipart import MIMEMultipart #多形式组合,可包含文本和附件

MIMEText(msg,type,chartset)

# msg:文本内容,可自定义

# type:文本类型,默认为plain(纯文本)

# chartset:文本编码,中文为“utf-8”

#文本类型和文本编码,我们默认用'plain'和'utf-8'

建议的代码结构

1.导入模块:smtplib模块 和 email 模块

2.定义变量:包括发件人、密码、收件人、正文内容、服务器

3.使用方法:连接、登录、发送、退出

# 1.导入模块

# smtplib 用于邮件的发信动作

import smtplib

from email.mime.text import MIMEText # email 用于构建邮件内容

# 2.定义变量:

# 发信方的信息:发信邮箱,QQ 邮箱授权码

from_addr = 'xxx@qq.com'

password = '你的授权码数字'

# 收信方邮箱

to_addr = 'xxx@qq.com'

# 发信服务器

smtp_server = 'smtp.qq.com'

# 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码

msg = MIMEText('send by python','plain','utf-8')

# 3.使用方法:

# 开启发信服务,这里使用的是加密传输

server = smtplib.SMTP_SSL()

server.connect(smtp_server,465)

# 登录发信邮箱

server.login(from_addr, password)

# 发送邮件

server.sendmail(from_addr, to_addr, msg.as_string())

# 关闭服务器

server.quit()

常见报错信息:ValueError: server_hostname cannot be an empty string or start with a leading dot.

解决办法:server = smtplib.SMTP_SSL()改成server = smtplib.SMTP_SSL(smtp_server)

版本2.0:给自己发一封完整邮件

1.丰富文件头

包括主题、发件人、收件人等信息

方法:搜索“发邮件 Python”,看别人的代码是怎么样写的

from email.header import Header

msg['From'] = Header('xxx') #发件人邮箱地址/也可自定义其他内容

msg['To'] = Header('xxx') #收件人邮箱地址/也可自定义其他内容

msg['Subject'] = Header('xxx') #邮件主题

2.丰富正文内容

如果你想要写很长的内容,建议先设置一个变量text用来放正文内容,

正文需要换行,这时用到了三引号的用法啦

例如:

text = '''亲爱的学员,你好!

​ 我是吴枫老师,能遇见你很开心。

​ 希望学习Python对你不是一件困难的事情!

人生苦短,我用Python

'''

msg = MIMEText(text,'plain','utf-8')

版本3.0:群发完整邮件

设置一个列表形式的变量

1.将收件人信箱的变量设置成一个可以装多个内容的列表

例如:

to_addrs = ['wufeng@qq.com','kaxi@qq.com']

2.然而列表不能解码,只能变成字符串形式(使用join()函数)

msg['to'] = Header(",".join(to_addrs))

join()的用法是str.join(sequence),str代表在这些字符串之中你要用什么字符串来连接,你可以用逗号,空格,下划线等等,sequence可以是列表等

使用while循环

1.定义一个空列表to_addrs,用来存放收件人邮箱地址

2.输入邮箱地址的时候,地址会被追加写进列表

to_addrs = []

while True:

a=input('请输入收件人邮箱:')

#输入收件人邮箱

to_addrs.append(a)

#写入列表

b=input('是否继续输入,n退出,任意键继续:')

#询问是否继续输入

if b == 'n':

break

print(to_addrs)

while True: 只要不遇到break,就会一直循环下去。

写入csv模块

步骤:1.引入csv模块;2.提供需要写入csv文件的数据,3.建文件并写入。

import csv # 引用csv模块,用于读取邮箱信息

data = [['wufeng ', 'wufeng@qq.com'],['kaxi', 'kaxi@qq.com']] # 待写入csv文件的收件人数据:人名+邮箱

with open('to_addrs.csv', 'w', newline='') as f:

writer = csv.writer(f)

for row in data:

writer.writerow(row)

# 读取收件人数据,并启动写信和发信流程

with open('to_addrs.csv', 'r') as f:

reader = csv.reader(f)

for row in reader:

to_addrs=row[1]

msg = MIMEText(text,'plain','utf-8') #这些要都写到for循环下

msg['From'] = Header(from_addr)

msg['To'] = Header(to_addrs)

msg['Subject'] = Header('python test')

server = smtplib.SMTP_SSL()

server.connect(smtp_server,465)

server.login(from_addr, password)

server.sendmail(from_addr, to_addrs, msg.as_string())

# 关闭服务器

server.quit()

python发邮件附件带变量_Python 第17关——邮件还能这样发(QQ邮箱)!相关推荐

  1. python怎么宏定义符号变量_python中定义宏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 什么是宏? 宏类似python中的函数,可以传参数进去,但不能有返回值! 在实际 ...

  2. python怎么输出字加变量_python输出文字加变量

    python print 如何在输出中插入变量 没有任何基础在学编程,用的是简明Python教程,因为他讲的过于简单,所print '在此输出'+str(a)+'月有兔子'+str(b)+'只' pr ...

  3. python数据库查询怎么用变量_python中带变量的SQL查询

    我正在制作一个程序,它是一个小学教师设置的测验的用户界面.我正在尝试使用用户在上一页键入的数据进行此查询.它正在数据库中查找与相关用户名和测验编号匹配的人.这是为了让老师看到学生们在某些测验中的表现. ...

  4. python发送html邮件样式变了_Python自动发送HTML格式邮件

    要活成两种样子:发光和不发光,不发光的时候都是在为发光做准备 这篇我们继续,python如何实现自动发送HTML格式邮件的~ 邮件正文发汇总数据,附件发明细数据,这才是python邮件自动化的正确打开 ...

  5. python如何进行格式化输出变量_Python变量格式化输出实现原理解析

    print() 函数使用以 % 开头的转换说明符对各种类型的数据进行格式化输出. 转换说明符(Conversion Specifier)只是一个占位符(也称为格式化操作符),它会被后面表达式(变量.常 ...

  6. python装饰器模式带参数_Python装饰器使用实例:验证参数合法性 请教Python 使用装饰器实现单例模式的原理...

    python中一层装饰器的函数可以带参数吗 可以的, 装饰器分为可带参数和不可带参数的两种:但是如果带参数,则带参数装饰器的"参数"及"return"必须也是一 ...

  7. python装饰器模式带参数_Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)...

    Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...

  8. python中var是什么变量_python变量

    1.变量的命名: --变量名由字母.数字.下划线组成: --数字不能开头: --不可以使用关键字: 2.变量的赋值 --是变量声明和定义的过程: --a=1 3.数据类型 Python有五个标准的数据 ...

  9. python格式化输出多个变量_Python变量的格式化输出

    print() 函数使用以 % 开头的转换说明符对各种类型的数据进行格式化输出. 转换说明符(Conversion Specifier)只是一个占位符(也称为格式化操作符),它会被后面表达式(变量.常 ...

最新文章

  1. TODO: ping和telnet
  2. 【转】ABP源码分析十一:Timing
  3. 空中交警:借你一双“慧眼”,让你看透这飞机的“黑色十分钟”
  4. 谈谈中兴捧月大赛决赛以及总结
  5. Git从远程主分支切换出一个开发分支
  6. linux 基础知识大全(收藏这一篇就够了)
  7. stm8s stvd 编译出错
  8. 三区三线划定-永久基本农田
  9. TeraTerm下载方法
  10. 施柏阁保时捷设计酒店全球陆续开设15家酒店;汉庭新品旗舰店在武汉街道口商圈亮相;开元酒店用国潮赋能中高端品牌 | 全球旅报...
  11. 如何区分电梯卡为id卡ic卡_电梯ic卡系统与ID卡系统有什么区别
  12. 【微信小程序】表单校验
  13. nekohtml解析html(string或是文件流)
  14. 基于TP5、EasyWeChat、fastadmin微信公众号网页授权登录
  15. DSP营销百亿点击量背后原理竟然是这样
  16. 网络市场与群体练习题
  17. Docker 4 之 Docker 客户端和守护进程
  18. 倾一世烟花,爱已成痴
  19. android10热点验证身份,通过Android的AccountManager类进行Twitter身份验证
  20. 批处理系统、分时系统和实时系统各有什么特点?你能简单的分析下各操作系统采用了哪些设计思路来实现这些特点呢?

热门文章

  1. 微信旧版本存在远程代码执行漏洞:小心奇特用户名的聊天对象
  2. java创建画板_Java版画板的实现方法
  3. Swift编译 SIL分析
  4. RK3399 Qt+RTSP+FFMPEG+MPP+RGA解码
  5. 一个机械专业小混混 gooogleman 学习嵌入式ARM的真实经历
  6. JMeter 接口测试-if控制器
  7. 登录过期--localStorage加sessionStorage实现7天登录过期
  8. H ICPC Standings
  9. 图2——利用邻接表创建有向图
  10. 120帧手机动态壁纸_热门动态壁纸主题锁屏墙纸精选app下载-热门动态壁纸主题锁屏墙纸精选最新版下载v6.2...