python 收发邮件_Python 【收发邮件】

发邮件

smtplib模块主要负责发送邮件

email模块主要负责构造邮件。这两个都是Python内置模块

smtplib.SMTP.方法

#按住Ctrl键并点击SMTP ,会看到对SMTP的解释(vscode编辑器)

import smtplib

server = smtplib.SMTP()

#server = smtplib.SMTP_SSL()

#如果端口是用SSL加密,请这样写代码。其中server是变量名

server.connect(host, port)

#如果出现编码错误UnicodeDecodeError,你可以这样写:server.connect('smtp.qq.com', 465,'utf-8')

server.login(username, password)

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

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

#to_addr:邮件收件人地址

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

server.quit()

email模块

导入形式

from email.mime.text import MIMEText

from email.mime.image import MIMEImage

from email.mime.multipart import MIMEMultipart

“模块”和“包”的区别,

模块(module)一般是一个文件,

包(package)是一个目录,一个包中可以包含很多个模块

Python中的包都必须默认包含一个init.py的文件。

init.py控制着包的导入行为。

假如这个文件为空,那么我们仅仅导入包的话,就什么都做不了。

所以直接import email是行不通的。

使用from … import …语句,从email包目录下的【某个文件】引入【需要的对象】

from email.mime.text import MIMEText

email包下的text文件中引入MIMEText方法

MIMEText(msg,type,chartset)

三个参数

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

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

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

++++++++++++++++++++++++++++++++++++++++

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

email包引入Header()方法。Header()是用来构建邮件头

from email.header import Header

#邮件头可自定义

1 msg['From'] = Header('xxx') #from收件人邮箱地址 msg['From'] = Header('cool')

2 msg['To'] = Header('xxx') #to发件人邮箱地址 msg['To'] = Header('小可爱')

3 msg['Subject'] = Header('xxx') #主题 msg['Subject'] = Header('来自cool的问候')

邮件内容

先设置一个变量text用来放正文内容

1 text = 'send by python'

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

群发邮件

A 设置一个列表形式的变量

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

1 to_addrs = ['wu@qq.com','kaxi@qq.com']2 msg['To'] =Header(to_addrs)3 #直接运行程序的话,这里就会发生错误:AttributeError: 'list' object has no attribute 'decode'。4 #因为Header接受的第一个参数的数据类型必须要是字符串或者字节,列表不能解码5

6 #使用join()函数,它的功能是把字符串合并

7 print(type(['wu@qq.com','kaxi@qq.com']))8 print(type(",".join(to_addrs)))9

10

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

B while 群发邮件

1 to_addrs =[]2 whileTrue:3 a=input('请输入收件人邮箱:')4 #输入收件人邮箱

5 to_addrs.append(a)6 #写入列表

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

9 if b == 'n':10 break

11 #print(to_addrs)

C 调用csv模块

将收件人邮箱写入csv文件,在发邮件时读取csv文件

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

1 importcsv2 #引用csv模块。

3

4 data = [['wu', 'wu@qq.com'],['kaxi', 'kaxi@qq.com']]5 #待写入csv文件的内容

6

7 with open('to_addrs.csv', 'w', newline='') as f:8 writer =csv.writer(f)9 for row indata:10 writer.writerow(row)

读取

1.引入csv模块;2.打开csv文件;3.读取需要的数据

1 importcsv2 #引用csv模块。

3

4 with open('to_addrs.csv', 'r') as f:5 reader =csv.reader(f)6 for row inreader:7 to_addrs=row[1]

列子:

1 importsmtplib2 #smtplib 用于邮件的发信动作

3 from email.mime.text importMIMEText4 #email 用于构建邮件内容

5 from email.header importHeader6 #用于构建邮件头

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

9

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

11 #方便起见,你也可以直接赋值

12 from_addr = input('请输入登录邮箱:')13 password = input('请输入邮箱授权码或者密码:')14

15 #发信服务器

16 smtp_server = 'smtp.exmail.qq.com'

17

18 #邮件内容

19 text='''亲爱的学员,你好!20 我是吴老师,能遇见你很开心。21 希望学习python对你不是一件困难的事情!22

23 人生苦短,我用Python24 '''

25

26 #待写入csv文件的收件人数据:人名+邮箱

27 #记得替换成你要发送的名字和邮箱

28 data = [['qy', '123456@qq.com'],['lxz_jy', '654321@qq.com']]29

30 #写入收件人数据

31 with open('to_addrs.csv', 'w', newline='') as f:32 writer =csv.writer(f)33 for row indata:34 writer.writerow(row)35

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

37 with open('to_addrs.csv', 'r') as f:38 reader =csv.reader(f)39 for row inreader:40 to_addrs=row[1]41 msg = MIMEText(text,'plain','utf-8')42 msg['From'] =Header(from_addr)43 msg['To'] =Header(to_addrs)44 msg['Subject'] = Header('python test')45 server =smtplib.SMTP_SSL(smtp_server)46 server.connect(smtp_server,465)47 server.login(from_addr, password)48 try:49 server.sendmail(from_addr, to_addrs, msg.as_string())50 print('success')51 except:52 print('failed')53

54 #关闭服务器

55 server.quit()

报错信息

ValueError: server_hostname cannot be an empty string or start with a leading dot.

因为Python 3.7修改了ssl.py,导致smtplib.SMTP_SSL也连带产生了问题

# 改动这句代码

server = smtplib.SMTP_SSL()

# 在括号内加入host参数

server = smtplib.SMTP_SSL(smtp_server)

#############################################################

扩展:abs() 函数返回数字的绝对值

1 importmath2 num =float(input('pls input a number:'))3 #方法1,关键词:条件判断

4 defabs_value1():5 if num >=0:6 print('该数字的绝对值为:{}'.format(num))7 else:8 print('该数字的绝对值为:{}'.format(-num))9

10

11 #方法2,关键词:内置函数

12 defabs_value2():13 num1 =abs(num)14 print('该数字的绝对值为:{}'.format(num1))15

16

17

18 #方法3,关键词:内置模块

19 defabs_value3():20 num1 =math.fabs(num)21 print('绝对值为{}'.format(num1))22

23

24 #写完3种方法后,验证一下吧。

25 abs_value1()26 abs_value2()27 abs_value3()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值