发邮件
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. 2018-2019-2 20165114《网络对抗技术》Exp7 网络欺诈防范

    Exp7 网络欺诈防范 目录 一.实验内容 二.基础问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 (2)在日常生活工作中如何防范以上两攻击方法 三.实践过程记录 3.1简单应用SET ...

  2. git 设置git用户名和邮箱,并生成秘钥

    1.设置 git 用户名 aaron@ubuntu:~$ git config --global user.name "xxx" 2.设置 git 邮箱 aaron@ubuntu: ...

  3. git补充(关于pull request)转自知乎

    当你想更正别人仓库里的错误时,要走一个流程: 1先 fork 别人的仓库,相当于拷贝一份,不会有人直接让你修改原仓库的 2.clone 到本地分支,做一些 bug fix 3.发起 pull requ ...

  4. Linux信号使用及自定义信号

    linux自定义信号:https://www.cnblogs.com/bigben0123/p/3186661.html linux信号.值及解释:https://blog.csdn.net/luot ...

  5. ngx.shared.DICT.set

    ngx.shared.DICT.set 原文: ngx.shared.DICT.set syntax: success, err, forcible = ngx.shared.DICT:set(key ...

  6. ab 压测

    Linux学习14-ab报错apr_pollset_poll: The timeout specified has expired (70007) 前言 使用ab压力测试时候出现报错apr_polls ...

  7. 一个项目里,httpclient竟然出现了四种

    有网友提问: 今年年初,到一家互联网公司实习,该公司是国内行业龙头.不过技术和管理方面,却弱爆了.那里的程序员,每天都在看邮件,查问题工单.这些问题,多半是他们设计不当,造成的.代码写

  8. C++在线编程网站

    1.推荐 http://www.dooccn.com/cpp/ 2.https://wandbox.org/ 3.https://www.tutorialspoint.com/compile_cpp_ ...

  9. VS版本 与 VC版本 的对应关系

    Visual Studio 6 : vc6Visual Studio 2003 : vc7Visual Studio 2005 : vc8Visual Studio 2008 : vc9Visual ...

  10. LC 990. Satisfiability of Equality Equations

    Given an array equations of strings that represent relationships between variables, each string equa ...