一封电子邮件的发送过程:

1. 发件人 -> MUA    MUA: 邮件用户代理    像Outlook或faxmail之类的软件就属于MUA

2. MUA -> MTA       MTA:邮件传输代理   邮件服务提供商就属于MTA,比如网易、新浪等

3、MTA->MTA       由于收发邮件双方的服务提供商可能不同,比如有的是@sina.com, 有的是@163.com  所有这时就要涉及到

MTA之间的转发

4、MTA->MDA      MDA:邮件投递代理   邮件到达MDA后,邮件会存放在目的信箱的某个服务器上。

5、MDA->MUA      收件人要取到邮件必须要通过MUA从MDA上把邮件取到电脑本地

所以编写程序来实现发送和接收邮件,本质上就是:

1. 编写MUA把邮件发到MTA   这个过程使用SMTP协议

2. 编写MUA从MDA上收邮件    这个过程使用POP3或者IMAP协议

假设我们现在有两个邮箱:xxx@163.com    xxx@qq.com

大多数的邮件服务商都需要手动打开SMTP发信和POP收信功能,否则只允许在网页登录。

(一)从163邮箱发送邮件到qq邮箱

注意:当用程序模拟MUA发送邮件时,要保证163邮箱的SMTP服务开启,而qq邮箱没有特殊设置(前提是你用网页打开邮箱)

网易默认开启这些服务,但是要成功发送邮件还要开启“客户端授权码”

开启之后会让用户设置一个授权码

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件,可以发送纯文本邮件、HTML邮件和带附件的邮件。

#!/usr/bin/python
#coding=utf-8

from email.mime.text import MIMEText

import smtplib
send_str = '''
你好:
     收到信息请回复,谢谢!
此致
   敬礼
'''
msg = MIMEText(send_str, 'plain', 'utf-8')     #构建发送的正文文本,’send_str‘就是邮件的正文,’plain‘代表纯文本

from_addr = 'xxx@163.com'        #发件人信箱
password = 'xxxxx'                       #客户端授权密码
to_addr = '871990719@qq.com'  #收件人信箱
smtp_server = 'smtp.163.com'     #smtp地址

msg['subject'] = 'python'        #邮件主题

msg['from'] = from_addr       #收件人
msg['to'] = to_addr              #发件人

server = smtplib.SMTP_SSL()     #使用SSL方式
server.connect(smtp_server, '465') #注意端口号是465
#server.set_debuglevel(1)       #设置debug模式 可以显示交互过程
server.login(from_addr, password)   #登录SMTP服务器
server.sendmail(from_addr, [to_addr], msg.as_string())   #发送邮件   可以发送多人所以收件人地址是一个list
server.quit()

注意:通过实验发现 通过163信箱发送邮件时,“邮件主题” “收件人” “发件人”不能全空,否则发送会失败

(二)发送带附件的邮件

使用MIMEMutipart为邮件添加 “发送文本”和“附件”

send_str = '<h1 style="color:red">上岸报考祝您成功</h1>'
textApart = MIMEText(send_str, 'html', 'utf-8')    #采用“html”格式发送文本,可以设置文本格式

pdfFileLocation = 'C:\\project\\io_file\\output\\'
pdfName = '报考 .pdf'   #这里如果采用utf-8编码,发送邮件中的附件格式不正确
pdfFile = (pdfFileLocation+pdfName).decode('utf-8')   #这里进行utf-8编码,以便正确查找文件位置

pdfApart = MIMEApplication(open(pdfFile, 'rb').read())
pdfApart.add_header('Content-Disposition', 'attachment', filename=pdfName)

msg = MIMEMultipart()
msg.attach(textApart)
msg.attach(pdfApart)

msg['subject'] = u'报考岗位分析'
msg['from'] = '上岸报考<exam_success@163.com>'   #这种设置便于在收件人 的收件箱中显示发件人信息
msg['to'] = to_addr

后面发送邮件步骤同(一)

利用Python收发邮件相关推荐

  1. Python实战技巧(11)使用python收发邮件时需要的邮箱授权码如何获取

    Python实战技巧(1)Python字典类型数据如何递归地通过点'.'的方式访问 Python实战技巧(2)Python的pdb调试代码方法详解 Python实战技巧(3)多版本兼容安装部署(py2 ...

  2. day21-办公自动化:利用Python发邮件

    Excel中绘制图表 下载三方库openpyxl pip install openpyxl from datetime import datetimefrom openpyxl from openpy ...

  3. Python收发邮件

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

  4. python 收发邮件_python发送各类邮件的主要基本方法

    利用python实现基本的邮件发送. 感谢以下博客的整理,本人在学习的同时也做了一些整理 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: ...

  5. 利用python发邮件

    在搜索python教程的时候,碰巧遇到了"利用python发送电子邮件"的教程,觉得很实用,也比较有意思,所以就花了点时间学习发送邮件的脚本是怎样实现的. 我主要是利用SMTP(简 ...

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

    发邮件 smtplib模块主要负责发送邮件 email模块主要负责构造邮件.这两个都是Python内置模块 smtplib.SMTP.方法 #按住Ctrl键并点击SMTP ,会看到对SMTP的解释(v ...

  7. 使用Python收发邮件

    首先邮件发送采用的是SMTP协议,邮件接收采用POP协议. 对于发邮件:python对SMTP的支持有两个模块,分别是smtplib和email 这里以QQ邮箱为例,需要先设置账户中的POP3/SMT ...

  8. 利用SMTP收发邮件

    邮件服务器: SMTP:发送.接收 POP3:分捡 测试:从shanghai向nanjing发送邮件 一.实验准备 1. shanghai IP:192.168.11.72 DNS:192.168.1 ...

  9. Python办公自动化之收发邮件--163和qq邮箱

    利用Python发送接收邮件 1.邮件相关概念 POP3:Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子 ...

  10. python 接收邮件服务器地址_Python 用IMAP接收邮件

    一.简介 IMAP(Internet Message Access Protocol),这个协议与POP一样,也是从邮件服务器上下载邮件到本机,不过IMAP比POP的功能要更加强大些,IMAP除支持P ...

最新文章

  1. 人工智能领域的未来和挑战
  2. sqlserver yml配置文件
  3. 什么是空中下载技术?学嵌入式必看!
  4. c#操作mysql数据库
  5. 公司怎么吸引和留住核心技术大牛
  6. Windows下C语言的Socket编程例子(TCP和UDP)
  7. 晶振为什么不封装进芯片内部?
  8. EXCEL表格-利用随机函数制作抽签工具(RAND)
  9. 第十三届“华中杯”大学生数学建模挑战赛题目 A 题 马赛克瓷砖选色问题
  10. 常用的第三方ui框架
  11. pdfjs转图片_PDF转图片,PDF转JPG/PNG,完全由JS实现-阿里云开发者社区
  12. AUTOSAR MCAL详解:FLS
  13. 学校学业水平测试软件,中小学生学业水平测试
  14. matlab 画渐近线,如何绘制渐近线?
  15. 使用python计算贝尔宾团队角色测评结果
  16. 复盘 | 产品经理晋级连胜的诀窍
  17. 【GEE笔记】有效像元(面积、数量)统计
  18. 彻底搞明白梯度下降算法1:方向导数与梯度概念理解
  19. Shell小技巧(一百三十一)服务器tcp连接数实时统计
  20. 传感器的灵敏度 分辨率与分辨力和精度 + 光纤光缆

热门文章

  1. PHP怎么获得斗鱼TV源地址,如何获取视频的直播源地址
  2. json离线解析格式化工具
  3. web制作、开发人员需知的Web缓存知识
  4. HTML网页设计:四、超链接
  5. java笔试题及答案
  6. 二次规划--积极集法(active set method)
  7. VBA 收集 Word关键字批量处理-Excel版
  8. 论【软件工程是不是教会不怎么会写程序的人软件开发】
  9. 使用C++实现克拉默法则(Cramer‘s law)
  10. linux下录音识别成文字软件下载,如何将录音转换成文字,这个方法你需要知道...