基于SMTP协议的电子邮件客户端程序

基于SMTP协议的电子邮件客户端程序

电子邮件的完整传输过程:
​ 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人
MUA:邮件用户代理
MTA:邮件传输代理
MDA:邮件投递代理

# -*- coding: utf-8 -*-
"""
Created on Tue Dec 11 15:40:02 2018

@author: yufeng
"""

'''
    电子邮件的完整传输过程:
    发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人
    
    Python对SMTP支持有smtplib和email两个模块,
    eamil负责构造邮件,smtplib负责发送邮件
    
    邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,
    而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到MIMEText中,
    才是一封完整的邮件
'''
import smtplib
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))

# 输入Email地址 和 密码; 收件人地址;SMTP服务器地址
from_addr = input('From: ')
password = input('Password: ')
to_addr = input('To: ')
smtp_server = 'smtp.sina.com'
smtp_port = 25

# 设置收发邮件人,邮件主题,邮件正文
# 参数分别代表 邮件正文; MIME的subtype, 'plan'表示纯文本,最终是'text/plain'
# 第三个参数是编码格式,保证多种语言的兼容性

# from:XXX@sina.com 这里必须加上发送邮箱地址,
# 参考: https://blog.csdn.net/weixin_36394146/article/details/81268466
#msg = MIMEText('from:fzhiy270@sina.comhello, send by Python...', 'plain', 'utf-8')

#msg = MIMEText('<html><body><h1>Hello</h1>' +
#    '<p>send by <a href="http://www.python.org">Python</a>...</p>' +
#    '</body></html>', 'html', 'utf-8')

# 邮件对象:
msg = MIMEMultipart()

# 邮件正文是MIMEText:
#msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))
msg.attach(MIMEText('<html><body><h1>Hello</h1>' +
    '<p><img src="cid:0"></p>' +
    '</body></html>', 'html', 'utf-8'))

# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
with open(r'F:\workSpaces\PyCodes\spyder-py3\test.png', 'rb') as f:
    # 设置附件的MIME和文件名,这里是png类型:
    mime = MIMEBase('image', 'png', filename='test.png')
    # 加上必要的头信息:
    mime.add_header('Content-Disposition', 'attachment', filename='test.png')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    # 把附件的内容读进来:
    mime.set_payload(f.read())
    # 用Base64编码:
    encoders.encode_base64(mime)
    # 添加到MIMEMultipart:
    msg.attach(mime)
    
msg['From'] = _format_addr('fzhiy270 <%s>' % from_addr)
msg['To'] = _format_addr('接收邮件测试账号 <%s>' % to_addr)
msg['Subject'] = Header('基于SMTP协议发送邮件的测试', 'utf-8').encode()

# SMTP协议的默认端口号为25, SMTP协议是明文口令
server = smtplib.SMTP(smtp_server, smtp_port) 
# 在创建SMTP对象后,立刻调用starttls()方法,就创建了安全连接
server.starttls()
server.set_debuglevel(1) # 打印出和SMTP服务器交互的所有信息
server.login(from_addr, password)
# 邮件正文是一个str,as_string()把MIMEText对象变成str。
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

完整邮件接收:

在这里插入图片描述

HTML邮件接收:

在这里插入图片描述

发送附件的邮件接收:

在这里插入图片描述

发送图片:

在这里插入图片描述

小结

使用Python的smtplib发送邮件十分简单,只要掌握了各种邮件类型的构造方法,正确设置好邮件头,就可以顺利发出。

构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

Message
+- MIMEBase
   +- MIMEMultipart
   +- MIMENonMultipart
      +- MIMEMessage
      +- MIMEText
      +- MIMEImage

这种嵌套关系就可以构造出任意复杂的邮件。你可以通过email.mime文档查看它们所在的包以及详细的用法。

如果你运行程序后没有找到发送后的邮件,可以去垃圾邮件看看

参考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432005226355aadb8d4b2f3f42f6b1d6f2c5bd8d5263000

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于POP3和SMTP协议邮件收发应用程序是一种能够通过互联网发送和接收电子邮件的软件。POP3协议是一种用于接收邮件协议,它允许用户从邮件服务器上下载邮件到本地计算机上。SMTP协议则是一种用于发送邮件协议,它允许用户将邮件发送到邮件服务器上,然后由服务器将邮件发送到目标地址。 这种邮件收发应用程序通常包括一个邮件客户端和一个邮件服务器。邮件客户端是用户用来发送和接收邮件的软件,它可以连接到邮件服务器上,下载邮件并将邮件发送到服务器上。邮件服务器则是用来存储和转发邮件的软件,它可以接收用户发送的邮件并将邮件发送到目标地址。 基于POP3和SMTP协议邮件收发应用程序可以帮助用户快速、方便地发送和接收邮件,是现代通信中不可或缺的一部分。 ### 回答2: 邮件系统是现代通讯的重要组成部分,在各种应用场景中广泛使用。其中,基于pop3和smtp协议邮件收发应用程序是其中的一种应用程序。 Pop3协议是一种电子邮件协议,用于从远程服务器上获取电子邮件。使用pop3协议,应用程序可以连接到邮件服务器上的pop3端口,获取到存储在服务器上的邮件。通过pop3协议,应用程序可以获取邮件的主题、发件人、收件人、正文等信息,并且可以将获取到的邮件缓存到本地计算机上。 SMTP协议是一种电子邮件协议,用于将电子邮件传递到远程服务器上。使用smtp协议,应用程序可以连接到邮件服务器上的smtp端口,将需要发送的邮件发送到服务器上。通过smtp协议,应用程序可以将邮件发送给多个收件人,并且可以添加附件、抄送、密送等功能。 基于pop3和smtp协议邮件收发应用程序可以实现邮件的在线收发、邮件的过滤、自动回复等功能。比如,用户可以通过这种应用程序将自己的邮件同步到不同的设备上,方便用户在不同设备之间进行邮件通讯。同时,邮件过滤功能可以帮助用户对垃圾邮件进行自动过滤,避免因垃圾邮件带来的骚扰和时间浪费。自动回复功能可以帮助用户在繁忙的工作中提高工作效率,避免因忙碌而错失重要的邮件。 总之,基于pop3和smtp协议邮件收发应用程序可以帮助用户方便快捷地管理自己的邮件,提高工作效率,并且可以通过邮件通讯与他人进行沟通和交流。 ### 回答3: 随着互联网的普及,电子邮件作为一种必要的通信工具,已经被广泛地应用到各个领域。在日常生活和工作中,我们使用电子邮件收发邮件已经成为一种习惯。电子邮件涉及到多种协议,其中POP3和SMTP协议邮件收发的核心协议。 基于POP3协议邮件收取应用程序,可以实现邮件的接收功能。POP3是邮局协议的缩写,其作用是接收用户在邮件服务器上的邮件。在收取邮件时,邮件客户端邮件服务器发送请求,服务器响应请求并将邮件传输到客户端。POP3协议通过TCP协议传输数据,使用110端口。POP3协议的特点是将所有邮件下载到本地,用户可以对邮件进行管理,例如标记已读、删除、归档等操作。 基于SMTP协议邮件发送应用程序,可以实现邮件的发送功能。SMTP是简单邮件传输协议的缩写,其作用是将用户在邮件客户端上编写的邮件发送到邮件服务器。SMTP协议通过TCP协议传输数据,使用25端口。SMTP协议的特点是将邮件发送到服务器后,由服务器转发到其他邮件服务器,最终到达接收方。SMTP协议需要认证用户身份,确保发送者身份的安全。同时,SMTP协议还支持多种附件格式,例如文本、图片、音频、视频等。 邮件收发应用程序是一种基于网络的应用程序,能够帮助我们快速高效地收发邮件。在实现这种应用程序时,我们需要掌握POP3和SMTP协议的工作原理和使用方法。除此之外,还需要考虑安全性、稳定性以及易用性等因素。通过不断地优化和改进,我们可以开发出更加高效、稳定、安全的邮件收发应用程序,为用户提供更好的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值