发邮件
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
#邮件头可自定义
 msg['From'] = Header('xxx')    #from收件人邮箱地址 msg['From'] = Header('cool')
msg['To'] = Header('xxx') #to发件人邮箱地址 msg['To'] = Header('小可爱')
msg['Subject'] = Header('xxx') #主题 msg['Subject'] = Header('来自cool的问候')
 
邮件内容
先设置一个变量text用来放正文内容
 text = 'send by python'
msg = MIMEText(text,'plain','utf-8')

群发邮件
 

A 设置一个列表形式的变量
将收件人信箱的变量设置成一个可以装多个内容的列表
 to_addrs = ['wu@qq.com','kaxi@qq.com']
msg['To'] = Header(to_addrs)
#直接运行程序的话,这里就会发生错误:AttributeError: 'list' object has no attribute 'decode'。
#因为Header接受的第一个参数的数据类型必须要是字符串或者字节,列表不能解码 #使用join()函数,它的功能是把字符串合并
print(type(['wu@qq.com','kaxi@qq.com']))
print(type(",".join(to_addrs)))
<class 'list'>
<class 'str'>

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

B while 群发邮件
 to_addrs = []
while True:
a=input('请输入收件人邮箱:')
#输入收件人邮箱
to_addrs.append(a)
#写入列表
b=input('是否继续输入,n退出,任意键继续:')
#询问是否继续输入
if b == 'n':
break
#print(to_addrs)
C 调用csv模块
将收件人邮箱写入csv文件,在发邮件时读取csv文件
1.引入csv模块;2.提供需要写入csv文件的数据,3.建文件并写入
 import csv
#引用csv模块。 data = [['wu ', 'wu@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)
读取
1.引入csv模块;2.打开csv文件;3.读取需要的数据
 import csv
#引用csv模块。 with open('to_addrs.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
to_addrs=row[1]
列子:
 
 

 import smtplib
# smtplib 用于邮件的发信动作
from email.mime.text import MIMEText
# email 用于构建邮件内容
from email.header import Header
# 用于构建邮件头
import csv
# 引用csv模块,用于读取邮箱信息 # 发信方的信息:发信邮箱,QQ邮箱授权码
# 方便起见,你也可以直接赋值
from_addr = input('请输入登录邮箱:')
password = input('请输入邮箱授权码或者密码:') # 发信服务器
smtp_server = 'smtp.exmail.qq.com' # 邮件内容
text='''亲爱的学员,你好!
我是吴老师,能遇见你很开心。
希望学习python对你不是一件困难的事情! 人生苦短,我用Python
''' # 待写入csv文件的收件人数据:人名+邮箱
# 记得替换成你要发送的名字和邮箱
data = [['qy ', '123456@qq.com'],['lxz_jy', '654321@qq.com']] # 写入收件人数据
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')
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addrs)
msg['Subject'] = Header('python test')
server = smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server,465)
server.login(from_addr, password)
try:
server.sendmail(from_addr, to_addrs, msg.as_string())
print('success')
except:
print('failed') # 关闭服务器
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() 函数返回数字的绝对值
 import math
num =float(input('pls input a number:'))
# 方法1,关键词:条件判断
def abs_value1():
if num >= 0:
print('该数字的绝对值为:{}'.format(num))
else:
print('该数字的绝对值为:{}'.format(-num)) # 方法2,关键词:内置函数
def abs_value2():
num1 = abs(num)
print('该数字的绝对值为:{}'.format(num1)) # 方法3,关键词:内置模块
def abs_value3():
num1 = math.fabs(num)
print('绝对值为{}'.format(num1)) # 写完3种方法后,验证一下吧。
abs_value1()
abs_value2()
abs_value3()

Python 【收发邮件】的更多相关文章

  1. Python收发邮件

    发送邮件使用SMTP协议,接受POP3或IMAP: 创建邮件内容email模块,发送邮件smtplib模块.发送邮件比较简单,只需先创建SMTP对象,登录服务器后根据发收邮箱地址发送即可: POP3接 ...

  2. 转--python -- 收发邮件

    官方 import smtplib from email.mime.text import MIMEText from email.header import Header # 发送邮箱服务器 smt ...

  3. python收发邮件的方法

    def acptmail(): email = 'xxx@163.com' #input('Email:') password = 'xxx' #input('Password: ') pop3_se ...

  4. 使用python的email、smtplib、poplib模块收发邮件

    使用python的email.smtplib.poplib模块收发邮件 一封电子邮件的旅程是: MUA:Mail User Agent——邮件用户代理.(即类似Outlook的电子邮件软件) MTA: ...

  5. python的email、smtplib、poplib模块收发邮件

    一封电子邮件的旅程是: MUA:Mail User Agent--邮件用户代理.(即类似Outlook的电子邮件软件) MTA:Mail Transfer Agent--邮件传输代理,就是那些Emai ...

  6. python SMTP邮件发送(转载)

    Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...

  7. python发邮件遇到的端口号问题

    在学习使用python发邮件的过程中, 遇到了一个问题:由于测试的时候使用的是QQ邮箱,要求必须使用SSL/TLS加密,所以有了下面的代码, from email.mime.text import M ...

  8. DouNet学习_收发邮件

    一.收发邮件 --->第一步:发邮件首先要有发送者的邮箱地址和登录的密码才能发送 这些都写在APP里  不要写死 --->第二步:发邮件就要有网络,要添加net.Mail命名空间 要发送的 ...

  9. 使用python发邮件

    使用python发邮件 网上有很多发邮件的例子,本人在网上找了一份,稍加修改后使用 上源码 # encoding=utf-8 from email.mime.image import MIMEImag ...

  10. Outlook Express 收发邮件出现&quot;0x800CCC0F&quot;错误代码解决方法

    非常多网友在使用Outlook Express收发邮件的过程中,有时能够发送邮件,但出现不能接收信件的问题.每次在收邮件都会在某个地方停止不动,然后报超时,出现错误代码0x800CCC19或0x800 ...

随机推荐

  1. python学习:模块(第一节)

    1.什么是模块? 如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了.为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这 ...

  2. 鲁班学院java架构vip课程

    1.wps文档地址 https://docs.qq.com/doc/DRVNLUndvTmFSdEhO 2.百度网盘地址 https://pan.baidu.com/s/1uxaTzJZHKrsw_H ...

  3. 《Glibc内存管理》笔记DAY2

    目录 Ptmalloc内存管理设计 Main_arena 与 non_main_arena chunk 的组织 空闲 chunk 容器 sbrk 与 mmap 内存分配概述 内存回收概述 边界标记法 ...

  4. 2018-2019 20175234 实验三《敏捷开发与XP实践》实验报告

    目录 2018-2019 20175234 实验三<敏捷开发与XP实践>实验报告 实验内容 实验中的问题 码云链接 参考资料 2018-2019 20175234 实验三<敏捷开发与 ...

  5. 2018-2019-2 网络对抗技术 20165222 Exp 8 Web基础

    1.实践内容 (1).Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. 使用service apache2 start启 ...

  6. Java判断整数溢出

    开题报告第一版写完发给老师了,熬了两周终于搞出来了,等着被怼了之后再改吧.晚上选了Leetcode一道简单的题,整数反转,就是将一个int类型的数反转.原本确实很简单,最后出现个问题有意思--整数溢出 ...

  7. DNN在推荐系统中的应用参考资料

    参考资料 DSSM算法计算文本相似度:https://www.cnblogs.com/wmx24/p/10157154.html Deep Neural Network for YouTube Rec ...

  8. rpm包和deb分别是什么?

    一.RMP 是 LINUX 下的一种软件的可执行程序,你只要安装它就可以了.这种软件安装包通常是一个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀 ...

  9. Microsoft Visual C++ 2017 Redistributable

    版本:14.10.25008https://download.microsoft.com/download/4/5/4/454AC59C-DC3F-4AD3-950F-6DCBDF672071/vc_ ...

  10. python 设计模式之模板方法模式

    1.模板方法模式定义 模板模式定义如下:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤.子类实现的具体方法叫作基本方法,实现对 ...