发邮件
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. <class 'list'>
  10. <class 'str'>

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

B while 群发邮件
  1. to_addrs = []
  2. while True:
  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. import csv
  2. #引用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 in data:
  10. writer.writerow(row)
读取
1.引入csv模块;2.打开csv文件;3.读取需要的数据
  1. import csv
  2. #引用csv模块。
  3.  
  4. with open('to_addrs.csv', 'r') as f:
  5. reader = csv.reader(f)
  6. for row in reader:
  7. to_addrs=row[1]
列子:
 
 

  1. import smtplib
  2. # smtplib 用于邮件的发信动作
  3. from email.mime.text import MIMEText
  4. # email 用于构建邮件内容
  5. from email.header import Header
  6. # 用于构建邮件头
  7. import csv
  8. # 引用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. 人生苦短,我用Python
  24. '''
  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 in data:
  34. writer.writerow(row)
  35.  
  36. # 读取收件人数据,并启动写信和发信流程
  37. with open('to_addrs.csv', 'r') as f:
  38. reader = csv.reader(f)
  39. for row in reader:
  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. import math
  2. num =float(input('pls input a number:'))
  3. # 方法1,关键词:条件判断
  4. def abs_value1():
  5. if num >= 0:
  6. print('该数字的绝对值为:{}'.format(num))
  7. else:
  8. print('该数字的绝对值为:{}'.format(-num))
  9.  
  10. # 方法2,关键词:内置函数
  11. def abs_value2():
  12. num1 = abs(num)
  13. print('该数字的绝对值为:{}'.format(num1))
  14.  
  15. # 方法3,关键词:内置模块
  16. def abs_value3():
  17. num1 = math.fabs(num)
  18. print('绝对值为{}'.format(num1))
  19.  
  20. # 写完3种方法后,验证一下吧。
  21. abs_value1()
  22. abs_value2()
  23. 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. linux 查看某个进程内存占用情况命令

    1.先用ps查询进程号 ps -aux|grep 进程名字 2.查看更详细的内存占比 cat /proc/3664/status 返回结果:(其中VmRSS为进程所占用的内存)

  2. 去掉 webstorm 灰色的数据类型提示

  3. cas系列-cas登出(四)

    跟登陆一样,登出操作也很重要.由于是多应用间操作,状态保持也是一个要点,根据登出的影响范围,可以将登出操作分为两类: 单应用登出 单点登出(多应用登出) 顾名思义,单应用登出即登出只影响被操作的应用会 ...

  4. RK3288 st7703 mipi屏指令过长,程序跑飞

    本文为博主原创文章,转载请注明出处:https://www.cnblogs.com/lialong1st/p/11218433.html CPU:RK3288 系统:Android 5.1 调试 mi ...

  5. 搭建JavaWeb应用开发环境——Tomcat服务器

    学习web开发,需要先安装一台web服务器,然后再在web服务器中开发相应的web资源,供用户使用浏览器访问. 搭建JavaWeb应用开发环境——Tomcat服务器 1.疑问:学习web开发,为什么必 ...

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

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

  7. 用http请求thrift服务端出现了内存溢出的情况

    记一次内存溢出的分析经历 - Janti - 博客园 https://www.cnblogs.com/superfj/p/8474288.html 说在前面的话 朋友,你经历过部署好的服务突然内存溢出 ...

  8. angular项目目录结构分析

    详情查看:https://www.angular.cn/guide/file-structure app.module.ts 定义 AppModule, 这个根模块会告诉 Angular 如何组装该应 ...

  9. Qt 自定义信号SIGNAL

    emit toLine(lineQStr);connect(vcthread, SIGNAL(toLine(QString)), this, SLOT(appendText(QString)));

  10. 33Flutter仿京东商城项目 登录 注册相关页面布局

    加群452892873 下载对应33课文件,运行方法,建好项目,直接替换lib目录 以下列出的是本课涉及的文件. User.dart import 'package:flutter/material. ...