电子邮件传输机制

一般的网络服务程序在传输信息时就像拨打电话,需要双方同时保持在线,而在电子邮件系统中,当用户发送邮件后不必等待投递工作完成即可下线。如果对方邮件服务器(MTA)宕机或对方临时离线,则发件服务器(MTA)就会把要发送的内容自动的暂时保存到本地,等检测到对方邮件服务器恢复后会立即再次投递,期间一般无需运维人员维护处理,随后收信人(MUA)就能在自己的信箱中找到这封邮件了。


简单来说,邮件的发送并不是直接将邮件从一个客户端A发送到另一个客户端B,中间要经过邮局服务器(server),这样就不需要保证通信双方同时在线了。

而SMTP是简单邮件传输协议,用于发送和中转发出的电子邮件,占用服务器的25/TCP端口。
 

 

代码实现

这里使用python的email模块实现电子邮件发送的功能。

from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib

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

user_mail = '你本人的邮箱地址'
password = '你的邮箱密码'
send_mail = '收件人的邮箱地址'
smtp_server = '你所在邮箱的smtp服务器地址'

#填写邮件的正文、发件人信息、收件人信息、主题...
msg = MIMEText('Gitchat is funny!', 'plain', 'utf-8')	
msg['From'] = _format_addr('Gitchat <%s>' % user_mail)
msg['To'] = _format_addr('管理员 <%s>' % send_mail)
msg['Subject'] = Header('Gitchat test', 'utf-8').encode()

#发出邮件要执行的动作
server = smtplib.SMTP(smtp_server, 25)	#执行邮局服务器的25端口
server.set_debuglevel(1)		#	
server.login(user_mail, password)	#登录服务器
server.sendmail(user_mail, [send_mail], msg.as_string()) #发送信件到指定的地址
server.quit()	#结束服务:wq


 

展示

客户端软件使用Foxmail验证之前的程序