当前位置:文档之家› Python SMTP发送邮件

Python SMTP发送邮件

Python SMTP发送邮件
Python SMTP发送邮件

Python SMTP发送邮件

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

Python创建SMTP 对象语法如下:

import smtplib

smtpObj = smtplib.SMTP([host [, port [, local_hostname]]])

参数说明:

?host: SMTP 服务器主机。你可以指定主机的ip地址或者域名如: https://www.doczj.com/doc/4c4535047.html,,这个是可选参数。

?port: 如果你提供了host 参数, 你需要指定SMTP 服务使用的端口号,一般情况下SMTP 端口号为25。

?local_hostname: 如果SMTP 在你的本机上,你只需要指定服务器地址为localhost 即可。

这里要注意一下第三个参数,msg 是字符串,表示邮件。我们知道邮件一般由标题,

发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg 的格式。这个格式就是smtp 协议中定义的格式。

实例

以下执行实例需要你本机已安装了支持SMTP 的服务,如:sendmail。

以下是一个使用Python 发送邮件简单的实例:

实例

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import smtplib from email.mime.text

import MIMEText from email.header

import Header sender = 'from@https://www.doczj.com/doc/4c4535047.html,'

receivers = ['429240967@https://www.doczj.com/doc/4c4535047.html,']

# 接收邮件,可设置为你的QQ邮箱或者其他邮箱

# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码

message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') message['From'] = Header("菜鸟教程", 'utf-8')

message['To'] = Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'

message['Subject'] = Header(subject, 'utf-8')try:

smtpObj = smtplib.SMTP('localhost')

smtpObj.sendmail(sender, receivers, message.as_string()) print"邮件发送成功"

except smtplib.SMTPException:

print"Error: 无法发送邮件"

我们使用三个引号来设置邮件信息,标准邮件需要三个头部信息:From, To,

和Subject,每个信息直接使用空行分割。

我们通过实例化smtplib 模块的SMTP 对象smtpObj来连接到SMTP 访问,并使用sendmail方法来发送信息。

执行以上程序,如果你本机安装sendmail(邮件传输代理程序),就会输出:

$ python test.py

邮件发送成功

查看我们的收件箱(一般在垃圾箱),就可以查看到邮件信息:

如果我们本机没有sendmail 访问,也可以使用其他邮件服务商的SMTP 访问(QQ、网易、Google等)。

实例

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import smtplib from email.mime.text

import MIMEText from email.header

import Header

# 第三方 SMTP 服务mail_host="https://www.doczj.com/doc/4c4535047.html,"

#设置服务器mail_user="XXXX"#用户名mail_pass="XXXXXX"

#口令sender = 'from@https://www.doczj.com/doc/4c4535047.html,'receivers = ['429240967@https://www.doczj.com/doc/4c4535047.html,'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') message['From'] = Header("菜鸟教程", 'utf-8')

message['To'] = Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'

message['Subject'] = Header(subject, 'utf-8')try:

smtpObj = smtplib.SMTP()

smtpObj.connect(mail_host, 25)

# 25 为 SMTP 端口号

smtpObj.login(mail_user,mail_pass)

smtpObj.sendmail(sender, receivers, message.as_string())

print"邮件发送成功"

except smtplib.SMTPException:

print"Error: 无法发送邮件"

使用Python发送HTML格式的邮件

Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html。具体代码如下:

实例

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import smtplib from email.mime.text

import MIMEText from email.header

import Header sender = 'from@https://www.doczj.com/doc/4c4535047.html,'receivers = ['429240967 @https://www.doczj.com/doc/4c4535047.html,']

# 接收邮件,可设置为你的QQ邮箱或者其他邮箱

mail_msg = """

Python 邮件发送测试...

这是一个链接

"""

message = MIMEText(mail_msg, 'html', 'utf-8')

message['From'] = Header("菜鸟教程", 'utf-8')

message['To'] = Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'

message['Subject'] = Header(subject, 'utf-8')try:

smtpObj = smtplib.SMTP('localhost')

smtpObj.sendmail(sender, receivers, message.as_string()) print"邮件发送成功"

except smtplib.SMTPException:

print"Error: 无法发送邮件"

执行以上程序,如果你本机安装sendmail,就会输出:

$ python test.py

邮件发送成功

查看我们的收件箱(一般在垃圾箱),就可以查看到邮件信息:

Python 发送带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

实例

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import smtplib from email.mime.text

import MIMEText from email.mime.multipart

import MIMEMultipart from email.header

import Header sender = 'from@https://www.doczj.com/doc/4c4535047.html,'

receivers = ['429240967@https://www.doczj.com/doc/4c4535047.html,']

# 接收邮件,可设置为你的QQ邮箱或者其他邮箱

#创建一个带附件的实例

message = MIMEMultipart()

message['From'] = Header("菜鸟教程", 'utf-8')

message['To'] = Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'

message['Subject'] = Header(subject, 'utf-8')

#邮件正文内容

message.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain ', 'utf-8'))# 构造附件1,传送当前目录下的 test.txt 文件att1 = MIMET ext(open('test.txt', 'rb').read(), 'base64', 'utf-8')att1["Con tent-Type"] = 'application/octet-stream'

# 这里的filename可以任意写,写什么名字,邮件中显示什么名字

att1["Content-Disposition"] = 'attachment; filename="test.txt"' message.attach(att1)

# 构造附件2,传送当前目录下的 runoob.txt 文件

att2 = MIMEText(open('runoob.txt', 'rb').read(), 'base64', 'utf -8')att2["Content-Type"] = 'application/octet-stream'att2["Co ntent-Disposition"] = 'attachment; filename="runoob.txt"'messa ge.attach(att2)try:

smtpObj = smtplib.SMTP('localhost')

smtpObj.sendmail(sender, receivers, message.as_string())print "邮件发送成功"

except smtplib.SMTPException:

print"Error: 无法发送邮件"

$ python test.py

邮件发送成功

查看我们的收件箱(一般在垃圾箱),就可以查看到邮件信息:

在HTML 文本中添加图片

邮件的HTML 文本中一般邮件服务商添加外链是无效的,正确添加突破的实例如下所示:

实例

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import smtplib from email.mime.image

import MIMEImage from email.mime.multipart

import MIMEMultipart from email.mime.text

import MIMEText from email.header

import Header sender = 'from@https://www.doczj.com/doc/4c4535047.html,'

receivers = ['429240967@https://www.doczj.com/doc/4c4535047.html,']

# 接收邮件,可设置为你的QQ邮箱或者其他邮箱

msgRoot = MIMEMultipart('related')

msgRoot['From'] = Header("菜鸟教程", 'utf-8')

msgRoot['To'] = Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'

msgRoot['Subject'] = Header(subject, 'utf-8')

msgAlternative = MIMEMultipart('alternative')

msgRoot.attach(msgAlternative)

mail_msg = """

Python 邮件发送测试...

菜鸟教程链接

图片演示:

"""

msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

# 指定图片为当前目录

fp = open('test.png', 'rb')

msgImage = MIMEImage(fp.read())fp.close()

# 定义图片 ID,在 HTML 文本中引用

msgImage.add_header('Content-ID', '')

msgRoot.attach(msgImage)try:

smtpObj = smtplib.SMTP('localhost')

smtpObj.sendmail(sender, receivers, msgRoot.as_string()) print"邮件发送成功"

except smtplib.SMTPException:

print"Error: 无法发送邮件"

$ python test.py

邮件发送成功

查看我们的收件箱(如果在垃圾箱可能需要移动到收件箱才可正常显示),就可以查看到邮件信息:

使用第三方SMTP 服务发送

这里使用了QQ 邮箱(你也可以使用163,Gmail等)的SMTP 服务,需要做以下配置:

QQ 邮箱通过生成授权码来设置密码:

QQ 邮箱SMTP 服务器地址:https://www.doczj.com/doc/4c4535047.html,,端口:25。

以下实例你需要修改:发件人邮箱(你的QQ邮箱),密码,收件人邮箱(可发给自己)。QQ SMTP

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import smtplib from email.mime.text

import MIMEText from email.utils

import formataddr my_sender='429240967@https://www.doczj.com/doc/4c4535047.html,'

# 发件人邮箱账号my_pass = 'xxxxxxxxxx'

# 发件人邮箱密码my_user='429240967@https://www.doczj.com/doc/4c4535047.html,'

# 收件人邮箱账号,我这边发送给自己

def mail(): ret=True try:

msg=MIMEText('填写邮件内容','plain','utf-8')

msg['From']=formataddr(["FromRunoob",my_sender])

# 括号里的对应发件人邮箱昵称、发件人邮箱账号

msg['To']=formataddr(["FK",my_user])

# 括号里的对应收件人邮箱昵称、收件人邮箱账号

msg['Subject']="菜鸟教程发送邮件测试"

# 邮件的主题,也可以说是标题

server=smtplib.SMTP("https://www.doczj.com/doc/4c4535047.html,", 25)

# 发件人邮箱中的SMTP服务器,端口是25

server.login(my_sender, my_pass)

# 括号中对应的是发件人邮箱账号、邮箱密码

server.sendmail(my_sender,[my_user,],

msg.as_string())

# 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件server.quit()

# 关闭连接except Exception:

# 如果 try 中的语句没有执行,则会执行下面的 ret=False

ret=False

return ret ret=mail()

if ret: print("邮件发送成功")

else: print("邮件发送失败")

$ python test.py

邮件发送成功

发送成功后,登陆收件人邮箱即可查看:

更多内容请参阅:https://https://www.doczj.com/doc/4c4535047.html,/2/library/email-examples.html。

SMTP协议发邮件流程

HELO v domain >v CRLF > 用 C++ 发邮件 近段时间,实验室电脑的 IP 频繁地改变,搞得想用远程偷下懒都不行。这时想到的 解决方法有:静态IP,动态域名,自己解决。静态 IP 虽然可以自己指定,但一关机后,与 对方冲突就完了,作罢。免费的动态域名又要手机认证,也作罢。最后只能自己解决。解决 方案是写一个程序不断地检测本机 IP ,如果改变了,就发邮件通知。检测本机 IP 很简单, 就略过。这里介绍下怎样发邮件吧。 发邮件前,需要理解 SMTP(Simple Mail Transfer Protocol) 。 SMTP 是电子邮件从 客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议。 SMTP 是请 求/ 响应协议,命令和响应都是基于 ASCII 文本,并以 CR 和 LF 符结束。响应包括一个 表示返回状态的三位数字代码。在 TCP 协议 25 端口监听连接请求。其命令如下: SMTP 命令 命令说明 识 别发送方到接收 SMTP 的一个 HELO 命令 AUTH LOGIN 登陆服务器的命令。在这条命令之后,要发送用 Base64 编 码后的用户名与密码进行登陆 MAIL FROM: v reverse-path >v CRLF>v reverse-path >为发送者地址。 此命令告 诉接收方一个新邮件发送的开始, 并对所有的状态和缓冲区进行初始化。 此命令开始一个邮 件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。

RCPT TO:v forward-path >v CRLF>v forward-path >标识各个邮件接收者的地

PYTHON发送各类邮件的主要方法

python发送各类邮件的主要方法已有1人参与 python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点。 一、相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: 1、smtplib模块 smtplib.SMTP([host[,port[,local_hostname[,timeout]]]]) SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行相关操作(如:登陆、发送邮件)。所有参数都是可选的。 host:smtp服务器主机名 port:smtp服务的端口,默认是25;如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。 smtplib模块还提供了SMTP_SSL类和LMTP类,对它们的操作与SMTP基本一致。 smtplib.SMTP提供的方法: SMTP.set_debuglevel(level):设置是否为调试模式。默认为False,即非调试模式,表示不输出任何调试信息。 SMTP.connect([host[,port]]):连接到指定的smtp服务器。参数分别表示smpt主机和端口。注意:也可以在host参数中指定端口号(如:https://www.doczj.com/doc/4c4535047.html,:25),这样就没必要给出port参数。 SMTP.docmd(cmd[,argstring]):向smtp服务器发送指令。可选参数argstring表示指令的参数。 SMTP.helo([hostname]):使用"helo"指令向服务器确认身份。相当于告诉smtp服务器“我是谁”。 SMTP.has_extn(name):判断指定名称在服务器邮件列表中是否存在。出于安全考虑,smtp服务器往往屏蔽了该指令。 SMTP.verify(address):判断指定邮件地址是否在服务器中存在。出于安全考虑,smtp 服务器往往屏蔽了该指令。

SAP SMTP邮箱系统配置手册(发送邮件)

SAP SMTP 系统配置手册 本手册包含以下内容: SAP SMTP 原理 SMTP 端口参数配置 SAPconnect 服务配置 SAPconnect 服务管理配置 邮件发送测试 系统版本: NW7.4 EHP7 FOR SAP ERP 6.0 SAP NETWEAVER 7.4 SPS08 作者 : 章 浩 PUBLIC Document version: 1.00 – 2017-03-31 QQ :334629265

目录 1.SAP SMTP原理 (2) 2.SMTP端口参数配置(RZ10) (2) 2.1配置参数 (2) 2.2端口检查 (4) 3.用户配置(SU01) (5) 3.1创建用户 (5) 3.2用户赋权 (6) 3.3分配邮箱 (6) 4. SAPconnect服务配置(SICF) (7) 4.1执行SAPconnect维护 (7) 4.2配置Host数据 (8) 4.3配置登陆数据 (9) 4.4激活SAPconnect服务 (10) 5.SAPconnect服务管理配置(SCOT) (11) 5.1创建服务节点 (11) 5.2指定节点名称 (11) 5.3指定主机名和端口 (12) 5.4指定地址类型 (12) 5.5指定地址区域 (13) 5.6指定文档输出格式 (13) 5.7取消进一步设置地址类型 (14) 5.8设置发送失败等待时间 (14) 5.9配置缺省域 (15) 5.10配置发送作业 (16) 6.邮件发送测试(SBWP) (17) 7.SAP邮件发送请求监控(SOST) (20) 8.常用外部邮箱服务器地址及端口 (20)

SMTP简单邮件传输知识培训

? ?

SMTP(Simple Mail Transfer Protocol)即,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。属于TCP/IP协议族,它帮助每台在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP 协议的发送邮件服务器,用来发送或中转发出的。 目录 展开

详细简介 SMTP 是一种提供可靠且有效传输的协议。 SMTP 是在 FTP上的一种邮 件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。 SMTP 独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。SMTP 重要特性之一是其能跨越邮件,即“ SMTP 邮件中继”。通常, SMTP 一个网络可以由公用上 TCP 可相互访问的、防火墙分隔的 TCP/IP 网络上TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非 TCP协议组成。 使用 SMTP ,可实现相同网络上处理机之间的邮件传输,也可通过中继器或实现某处理机与其它网络之间的邮件传输。 在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中 间中继器或网关主机。系统(DNS)的邮件交换可以用来识别出传输邮件的下一跳 IP 地址。 在传输文件过程中使用25号 协议原理 SMTP-简单邮件传输协议(SimpleMailTransferProtocol),是定义邮件传输的协议,它是基于TCP服务的应用层协议,由RFC0821所定义。SMTP协议规定的命令是以明文方式进行的。为了说明SMTP的工作原理,我们以向163发送邮件为实例进行说明。 在linux环境下,使用"telnet smtp.163. com 25"连接smtp.163. com 的25号端口(SMTP的规范服务端口);在windows下使用程序,远程主机指 定为smtp.163. com,而指定为25,然后连接smtp.163. com:交互过程如下: SMTP [lix@nslix]$telnet smtp.163. com 25 220 163 .com Anti-spam GT for Coremail System (163com[071018]) HELO smtp.163 .com 250 OK auth login 334 dXNlcm5hbWU6 USER加密后的用户名 334 UGFzc3dvcmQ6 PASS base64加密后的密码 235 Authentication successful MAILFROM:XXX@163 .COM 250 Mail OK RCPTTO:XXX@163 .COM 250 Mail OK DATA

SMTP简单邮件传输协议

一个网络可以由公用互联网上 TCP 可相互访问的主机、防火墙分隔的 TCP/IP 网络上 TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非TCP 传输层协议组成。使用 SMTP ,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。 在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一跳 IP 地址。 在传输文件过程中使用25号端口 编辑本段协议原理 SMTP-简单邮件传输协议(SimpleMailTransferProtocol),是定义邮件传输的协议,它是基于TCP服务的应用层协议,由RFC0821所定义。SMTP协议规定的命令是以明文方式进行的。为了说明SMTP的工作原理,我们以向163发送邮件为实例进行说明。 在linux环境下,使用"telnet smtp.163. com 25"连接smtp.163. com 的25号端口(SMTP的标准服务端口);在windows下使用telnet程序,远程主机指定为smtp.163. com,而端口号指定为25,然后连接smtp.163. com:交互过程如下: SMTP [lix@nslix]$telnet smtp.163. com 25 220 163 .com Anti-spam GT for Coremail System (163com[071018]) HELO smtp.163 .com 250 OK auth login 334 dXNlcm5hbWU6 USER base64加密后的用户名 334 UGFzc3dvcmQ6 PASS base64加密后的密码 235 Authentication successful MAILFROM:XXX@163 .COM 250 Mail OK RCPTTO:XXX@163 .COM

PHP用socket连接SMTP服务器发送邮件

PHP用socket连接SMTP服务器发送邮件学习实验记录: 分析与SMTP会话的一般流程 1. HELO XXX \r\n //XXX就是自己起个名字,和服务器打个招呼 返回 250 表示成功 2. AUTH LOGIN \r\n //请求与服务器开始验证用户(登陆) 返回 334 表示成功 3. 用户名 \r\n //直接发送用户名PHP中将用户名base64_encode()下 返回 334 表示成功 4. 密码 \r\n //直接发送密码PHP中将密码base64_encode()下 返回235表示成功 5. MAIL FROM \r\n //发件人邮箱地址,一般和上面的用户名密码对应的油箱返回 250 表示成功 6. RCPT TO \r\n //收件人地址 返回 250 表示成功 7. DATA \r\n //告诉服务器下面开始传输邮件 返回 354 表示成功 8. 传输邮件数据:可以发送邮件了,格式为 From:回信人地址 \r\n //貌似可以写别人的,嘿嘿 Subject:邮件标题 \r\n To:收件人地址 \r\n \r\n 正文数据 \r\n 以这个格式发送至服务器,返回250表示发送成功 9. QUIT \r\n 断开连接 返回 221 表示成功 PHP实验程序如下: 1 2 3 4 5 6 7 mail

C#使用163的SMTP服务器发送邮件

C#使用163的SMTP服务器发送邮件 大家都知道C#中的https://www.doczj.com/doc/4c4535047.html,.Mail.SmtpClient类是专门用来请求SMTP服务器发送邮件的,但是如果使用本地的SMTP服务器(比如本机IIS的SMTP服务器)发送邮件,会被许多大型网站的邮箱当做垃圾邮件来处理,原因是本地SMTP服务器的地址并不为人所知,发送的邮件理所当然会被当做来历不明的邮件,所以我们要借助一些大型知名网站的SMTP服务器来为我们发送邮件,这里就向大家介绍使用163的SMTP服务器发送邮件的方法。 PS:使用163的SMTP服务器发送邮件会使得你开发系统所发送的邮件都使用163的邮箱地址作为发信人的地址,但是我认为这总比把邮件每次都发送到用户的垃圾邮件箱要强,因为如果你发送的邮件全是垃圾邮件,用户可能根本就不会去看你发送的是什么,就把邮件删掉了,这才是最糟糕的.... 下面我们来看看代码: https://www.doczj.com/doc/4c4535047.html,.Mail.SmtpClient client = new https://www.doczj.com/doc/4c4535047.html,.Mail.SmtpClient(); client.Host = "https://www.doczj.com/doc/4c4535047.html,";//使用163的SMTP服务器发送邮件 https://www.doczj.com/doc/4c4535047.html,eDefaultCredentials = true; client.DeliveryMethod = https://www.doczj.com/doc/4c4535047.html,work; client.Credentials = new https://www.doczj.com/doc/4c4535047.html,workCredential("abc", "*******");// 163的SMTP服务器需要用163邮箱的用户名和密码作认证,如果没有需要去163申请个, //这里假定你已经拥有了一个163邮箱的账户,用户名为abc,密码为******* https://www.doczj.com/doc/4c4535047.html,.Mail.MailMessage Message = new https://www.doczj.com/doc/4c4535047.html,.Mail.MailMessage(); Message.From = new https://www.doczj.com/doc/4c4535047.html,.Mail.MailAddress("abc@https://www.doczj.com/doc/4c4535047.html,");//这里需要注意,163似乎有规定发信人的邮箱地址必须是163的,而且发信人的邮箱用户名必须和上面SMTP服务器认证时的用户名相同 //因为上面用的用户名abc作SMTP服务器认证,所以这里发信人的邮箱地址也应该写为abc@https://www.doczj.com/doc/4c4535047.html, Message.To.Add("123456@https://www.doczj.com/doc/4c4535047.html,");//将邮件发送给Gmail Message.To.Add("123456@https://www.doczj.com/doc/4c4535047.html,");//将邮件发送给QQ邮箱 Message.Subject = "测试标体"; Message.Body = "测试邮件体"; Message.SubjectEncoding = System.Text.Encoding.UTF8; Message.BodyEncoding = System.Text.Encoding.UTF8; Message.Priority = https://www.doczj.com/doc/4c4535047.html,.Mail.MailPriority.High; Message.IsBodyHtml = true; client.Send(Message);

基于POP3与SMTP协议的邮件收发程序的开发

一、设计思想 电子邮件指用电子手段传送信件、单据、资料等信息的通信方法。电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能象信件一样使收信者在接收端收到文字记录。电子邮件系统又称基于计算机的邮件报文系统。它承担从邮件进入系统到邮件到达目的地为止的全部处理过程。电子邮件不仅可利用电话网络, 而且可利用任何通信网传送。在利用电话网络时, 还可利用其非高峰期间传送信息,这对于商业邮件具有特殊价值。由中央计算机和小型计算机控制的面向有限用户的电子系统可以看作是一种计算机会议系统。 电子邮件的工作过程遵循客户- 服务器模式。每份电子邮件的发送都要涉及到发送方与接收方,发送方式构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。发送方通过邮件客户程序,将编辑好的电子邮件向邮局服务器(SMTP服务器)发送。邮局服 务器识别接收者的地址,并向管理该地址的邮件服务器(POP3服务器)发送消息。 一个邮件系统的传输包含用户代理User Agent 传输代理TransferAgent 及接受代理DeliveryAgent 三大部分。 用户代理是一个用户发信和收信的程序, 负责将电子邮件按照一定的标准包装,然后送至邮件服务器, 或由邮件服务器收回。传输代理负责信件的交换和传输。将信件传送至适当的邮件主机, 再由接受代理将信件分发至不同的邮件信箱。传输代理必须要能够接受用户邮件程序送来的信件,解读收信人的地址,根据SMTP协议将它正确无误地传递到目的地。现在一般的传输代理已采用Sendmail 程序完成工作。电子邮件到达邮件主机后, 在经接收代理POP协议被用户读取至自己的主机。 电子邮件在发送与接收过程中都要遵循SMTP POP3等协议,这些协议确保了电子邮件 在各种不同系统之间的传输。其中,SMTP负责电子邮件的发送,而POP3则用于接收In ternet 上的电子邮件。 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/ IP协议族, 它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器, 我们就可以把E—mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP!务器则是遵循SMTP 协议的发送邮件服务器,用来发送或中转你发出的电子邮件。 POP3(Post Office Protocol 3)即邮局协议,目前已发展到第三版,称POP3它规 定怎样将个人计算机连接到Internet 的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议 的接收邮件服务器,用来接收电子邮件的。总的来说POP3协议是让用户把服务器上的信收 到本地来所需要的一种协议。 本程序为一个基于SMTP和POP3协议的小型EMAIL收发程序,简单的实现了邮件的收发功能。

SMTP协议原理

SMTP协议原理 SMTP协议原理 SMTP-简单邮件传输协议(SimpleMailTransferProtocol),是定义邮件传输最常用的协议,它是基于TCP服务的应用层协议,由RFC821所定义。SMTP协议规定的命令是以明文方式进行的。为了说明SMTP的工作原理,我们以向163发送邮件为实例进行说明。 在linux环境下,使用"telnet smtp.163. com 25"连接smtp.163. com的25号端口(SMTP的标准服务端口);在windows下使用telnet程序,远程主机指定为smtp.163. com,而端口号指定为25,然后连接smtp.163. com:交互过程如下:[lix@nslix]$telnet smtp.163. com 25 220 163 .com Anti-spam GT for Coremail System (163com[071018]) HELO smtp.163 .com 250 OK auth login 334 dXNlcm5hbWU6 USER base64加密后的用户名 334 UGFzc3dvcmQ6 PASS base64加密后的密码 235 Authentication successful MAILFROM:XXX@163 .COM

250 Mail OK RCPTTO:XXX@163 .COM 250 Mail OK DATA 354 End data with . QUIT 250 Mail OK queued as smtp5,D9GowLArizfIFTpIxFX8AA==.41385S2 HELO是客户向对方邮件服务器发出的标识自己的身份的命令,这里假设发送者为ideal;MAILFROM命令用来表示发送者的邮件地址;RCPTTO:标识接收者的邮件地址,这里表示希望发送邮件给XXX@163. COM,如果邮件接收者不是本地用户,例如RCPTTO:ideal,则说明希望对方邮件服务器为自己转发(Relay)邮件,若该机器允许转发这样的邮件,则表示该邮件服务器是OPENRELAY的,否则说明该服务器不允许RELAY;DATA表示下面是邮件的数据部分,输入完毕以后,以一个"."开始的行作为数据部分的结束标识;QUIT表示退出这次会话,结束邮件发送。 这就是一个简单的发送邮件的会话过程,其实当使用outlookexpress等客户软件发送时,后台进行的交互也是这样的,当然,SMTP协议为了处理复杂的邮件发送情况如附件等等,定义了很多的命令及规定,具体可以通过阅读RFC821来获得。当你的一个朋友向你发送邮件时,他的邮件服务器和你的邮件服务器通过SMTP协议通信,将邮件传递给你邮件地址所指示的邮件服务器上(这里假设你的本地邮件服务器是Linux系统),若你通过telnet协议直接登录到邮件服务器上,则可以使用mail 等客户软件直接阅读邮件,但是若你希望使用本地的MUA(MailUserAgent,如

SMTP协议RFC文档中文版

RFC821 简单邮件传输协议(SMTP) (RFC821 SIMPLE MAIL TRANSFER PROTOCOL) 目录 1. 介绍 2 2. SMTP模型 3 3. SMTP过程 4 3.1. MAIL 4 3.2. 转发 5 3.3. 确认和扩展 6 3.4. 发送信件(mailing)和获得信件(sending) 7 3.5. 打开和关闭7 3.6. 转发 8 3.7. 域9 3.8. 改变角色9 4. SMTP说明9 4.1. SMTP命令9 4.1.1. 命令语法9 4.1.2. COMMAND语法格式13 4.2. SMTP响应15 4.3. 命令和应答序列16 4.4. 状态图17 4.5. 详细内容18 4.5.1. 最小实现18 4.5.2. 透明性19 4.5.3. 大小19 附录 A TCP传输服务19 附录 B NCP传输服务20 附录 C NITS 20 附录 D X.25传输服务 20 附录 E 应答码构成方法20 附录 F 一些例子22 参考资料36 1. 介绍

简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。附录A,B,C和D描述了不同传送服务下SMTP的使用。在名词表中还定义了本文档中使用的术语。 SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。 2. SMTP模型 SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。 一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK 应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。 SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个传送服务下时,通过中继SMTP服务器传送。为了能够对SMTP服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。 MAIL命令参数是回复路径,它指定邮件从何处来;而RCPT命令的参数是转发路径的,它指定邮件向何处去。向前路径是源路径,而回复路径是返回路径(它用于发生错误时返回邮件)。 当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一个数字代码。在下面,例子中可以看到哪些使用实际的命令和应答。完整的命令和应答在第四节。 命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户名大小写是敏感的。这样SMTP实现中就将用户邮箱名称保留成初始时的样子,主机名称对大小写不敏感。 命令与应答由ASCII字母表组成,当传送服务提供8位字节传送通道,每7位字符正确传送,而最高位被填充为0。当指定一般的命令或应答格式后,参数会由一些类似于语言的字符串表示出来,如""或"",这里尖括号表示这是一种类似于语言的变量。 3. SMTP过程 本节提供了SMTP中的一些过程。头一个说明的是基本发送过程(定义为发送操作)。下来描述向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终端和打开关闭交换。在本节的最后是对中断,邮件域的说明。本节的例子只是一部分命令和应答的序列,完整的例子见附录F。 3.1. MAIL 在SMTP发送操作中有三步,操作由MAIL命令开始给出发送者标识。一系列或更多的RCPT命令紧跟其后,给出了接收者信息,然后是DATA命令列出发送的邮件内容,最后邮件内容指示符确认操作。

使用本地SMTP服务群发Email

使用本地SMTP服务群发Email 自己搭建SMTP服务器发送邮件也是一种邮件投递途径,关于自建本地服务器的弊端我们另文讨论,我们这里只讨论具体的搭建过程。158邮件营销专家提供了使用本地SMTP服务群发电子邮件的功能,邮件群发软件使用此功能之前,需要客户本地搭建自己的邮箱服务器,因此这也是一种SMTP中转的邮件投递过程。 我们以Windows 2003(Win2003)为例,用Windows自带的服务组件,不需要额外软件,搭建一起来的就是企业邮箱,可以设置200个企业邮箱账号,也可以设置2000个,总归数量你自己设置就可以了,因为服务器是你自己的嘛!具体的操作步骤及设置方法为: 安装SMTP组件。 Windows Server 2003默认情况下是没有安装SMTP服务组件的,因此我们要手工添加。以系统管理员身份登录Windows Server 2003 系统。依次进入―控制面板→添加或删除程序→添加/删除Windows组件‖,在弹出的―Windows组件向导‖对话框中,选中―应用程序服务器‖选项,点击―详细信息‖按钮,接着在―Internet 信息服务(IIS)‖选项中查看详细信息,选中―SM TP Service‖选项,最后点击―确定‖按钮。此外,如果用户需要对邮件服务器进行远程Web管理,一定要选中―万维网服务‖中的―远程管理(HTML)‖组件。完成以上设置后,点击―下一步‖按钮,系统就开始安装配置POP3和SMTP服务了。 配置Windows自带的SMTP服务。 安装完成后,请检查一下:‖Internet信息服务器‖—>在‖默认SMTP 虚拟服务器‖上点击右键,进入―属性‖—>‖访问‖—-‖中继限制‖,然后选中―仅以下列表除外‖和最下边的‖允许所有通过身份验证的计算机进行中继,而忽略上表。‖ ,这样就OK了。 本地防火墙的设置 如果还出现不能连接的情况,请检查一下本地的防火墙软件是否打开,因为有些防火墙或杀毒软件会限制电脑中只有Outlook或者Foxmail可以发送邮件的。例如下面两个场景: (a)Windows防火墙:在控制面板–>> Windows防火墙中,如果防火墙是打开的,请将25端口设置到例外中; (b)VirusScan:右键点击屏幕右下角的VirusScan图标,进入―VirusScan控制

利用SMTP协议收发邮件

利用SMTP协议收发邮件 摘要 电子邮件可以达成发信人和收信人之间的信息交互。SMPT协议用来进行邮件的发送,本文分析了SMTP协议的目的意义和通信模型, 详细说明了它的命令和应答程序。并通过直接使用SMTP协议命令而在程序中实现电子邮件传送的方法。并在此基础上结合VC++ 6. 0的编程实现了接收和发送电子邮件。 关键字:SMTP协议;收发邮件;编程

目录 摘要 (1) 第一章背景知识概述 (3) 1.1 电子邮件 (3) 1.2 电子邮件体系结构和服务功能 (3) 第二章SMTP协议 (4) 2.1 SMTP协议目的及意义 (4) 2.2 SMTP协议工作原理 (4) 2.3 SMTP协议的命令和应答 (5) 第三章VC++6.0 中实现收发电子邮件 (6) 3.1 发送邮件类SMTPMail (6) 3.1.1 主要函数功能介绍 (6) 3.1.2 邮件发送程序 (7) 3.2 接收邮件 (9) 3.2.1 初始化MAPI (9) 3.2.2阅读电子邮件 (10) 3.2.3 读取电子邮件程序 (10) 第四章结论与心得体会 (11) 4.1结论 (11) 4.2 心得体会 (11) 参考文献 (11)

第一章背景知识概述 1.1电子邮件 电子邮件(E-mail,又称电子函件、电邮或邮件)是指通过互联网进行书写、发送和接收信件,目的是达成发信人和收信人之间的信息交互。电子邮件,electronic mail,简称 E-mail,标志是@,,又称电子信箱、电子邮政,电子邮件指用电子手段传送信件、单据、资料等信息的通信方法,通过网络的电子邮件系统,用户可以用低廉的价格、以快速的方式,与任何一个网络用户联系,这些电子邮件可以是文字、图象、声音等各种方式。 1.2电子邮件体系结构和服务功能 电子邮件系统主要分为两个子系统: 服务器系统和客户端系统。服务器系统的主要功能是实现电子邮件在Internet中的传输, 客户端系统的主要功能是发送电子邮件和接收电子邮件。电子邮件的工作原理遵循客户/ 服务器模式, 电子邮件的发送要涉及到发送方和接受方, 发送方构成客户端, 而接收方则为服务器。当发送方编辑好一份电子邮件。依照收件人的地址将其发送出去; 接收方服务器收到电子邮件后, 先将其存放在电子邮箱中, 并告知收件人有新邮件到来。发送方的主机与接收方的邮件服务器直接相连。 图1-1 SMTP交互命令模型 Figure. 1-1 SMTP command interaction model

C++程序中支持SMTP邮件发送的解决方案

C++程序中支持SMTP邮件发送的解决方案荟萃 (1)jwSMTP C++开发,支持Linux,BSD,Windows,支持附件、多个收件人、抄送密送、MX记录查询或直接发送到SMTP服务器。 支持LOGIN和PLAIN认证,支持Html和纯文本格式。 到2007年后,该项目未做更新。 https://www.doczj.com/doc/4c4535047.html,/projects/jwsmtp/ (2)CPJNSMTPConnection v2.92 这是一个基于MFC的SMTP协议封装类。 支持附件发送、多个收件人、抄送密送,支持HTML邮件。 支持通过SSL发送邮件,支持Gmail。 支持多种认证协议 "AUTH CRAM-MD5", "AUTH LOGIN", "AUTH PLAIN" 和 "AUTH NTLM"。支持DSN,MDN,STARTTLS CPJNSMTPConnection需要VC 2005及以上版本编译。 https://www.doczj.com/doc/4c4535047.html,/smtp.html (3)POCO C++库 POCO C++库提供了网络、加密、数据库、内存管理、文件系统、多线程支持一系列封装, 在网络部分,提供了SMTP支持。 https://www.doczj.com/doc/4c4535047.html,/ (4)Email C++库 这个库功能非常强大,支持POP3和SMTP,除了一般的附件、抄送密送、HTML邮件外,还支持HTTP代理、SOCKS4,SOCKS5代理。 但该库不开源,需要收费,价格在100美元左右。 https://www.doczj.com/doc/4c4535047.html,/email-library.asp (5)支持SSL/TLS的SMTP封装类 https://www.doczj.com/doc/4c4535047.html,/KB/IP/smtp_ssl.aspx (6)一个简单的SMTP封装类 https://www.doczj.com/doc/4c4535047.html,/KB/IP/CSmtp.aspx 在VC6下可以编译。

C++的SMTP类发送邮件

C++的SMTP类发送邮件 int CMail::sendmail() { int crecv; if(smtplogin()==0) { return 0; } //发送mail from 返回250 sprintf(m_sendbuff,"%s%s%s","mail from:<",m_user,"@https://www.doczj.com/doc/4c4535047.html,>\r\n"); if(senddata()==0) { return 0; } if(recvdata()==0) { return 0; } if(strncmp(m_recvbuff,"250",3)!=NULL) { m_error=MAIL_FROM_ERROR; return 0; } //发送rcpt to 返回250 sprintf(m_sendbuff,"%s%s%s","rcpt to:<",m_rcptto,">\r\n"); if(senddata()==0) { return 0; } if(recvdata()==0) { return 0; } if(strncmp(m_recvbuff,"250",3)!=NULL) { m_error=RCPT_TO_ERROR; return 0; } //发送data\r\n 返回354

sprintf(m_sendbuff,"%s","data\r\n"); if(senddata()==0) { return 0; } if(recvdata()==0) { return 0; } if(strncmp(m_recvbuff,"354",3)!=NULL) { m_error=DATA_ERROR; return 0; } //信头 if(!SetMailHeader(m_sendbuff)) { m_error=MAILHEADER_ERROR; return 0; } if(senddata()==0) { return 0; } //发送空行 sprintf(m_sendbuff,"%s","\r\n\r\n"); if(senddata()==0) { return 0; } //发送邮件body sprintf(m_sendbuff,"%s%s",m_data,"\r\n"); if(senddata()==0) { return 0; } if(m_attachment!=NULL) { char **pp;

计算机网络应用 SMTP协议

计算机网络应用SMTP协议 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一种电子邮件协议,它既具有客户端(发送方)发送邮件的功能,又具有服务器(接收方)接收邮件的功能。SMTP 协议允许将电子邮件从一个计算机邮件服务器发送到另一个计算机邮件服务器,并且SMTP 服务器接收本地用户发送的邮件,以便将其传输到互联网中其他邮件服务器上。 在互联网中,大多数计算机系统通过本地邮件系统服务器在本地按路径发送电子邮件。SMTP发送程序从输出邮件队列中得到邮件报文,通过多个TCP连接将邮件报文传输到目标主机的25号端口上。在发送过程中,SMTP接收程序必须能够证实本地邮件目的地址,并处理各种差错,包括传输差错以及没有足够接收空间等。 SMTP发送程序对报文的作用直到SMTP接收程序指示传输完成才结束,因此SMTP协议的作用范围仅限于SMTP发送程序和SMTP接收程序之间的对话过程。SMTP协议的主要功能是传送报文,为了保证正确传送报文,SMTP协议规定了14条命令和21种响应信息。其中,每条命令由一行文本组和四个字母的命令组成;而每一种响应信息由一个三位数据代码和简单的文字说明组成。下面介绍SMTP协议通信过程中,各阶段主要用到的命令和响应信息。 1.建立连接 邮件发送方将需要发送的邮件发送到邮件缓存中,SMTP发送程序将每隔一定时间对邮件缓存进行扫描。如果缓存有未发送的电子邮件,则使用SMTP程序端口号与目的计算机的SMTP服务器建立连接。 建立连接后,发送方将发送“220 Service ready(服务就绪)”的信息,并向SMTP服务器发送用来标识自己的HELLO命令。当接收方的SMTP程序接收到发送方所发送的信息后,则返回响应信息“250 OK(一切正常)”,以便接收发送方SMTP发送程序的身份标识。如果接收方的邮件服务器不可用,则返回响应信息“421 Service not available(服务不可用)”。2.传输邮件 当连接建立成功后,SMTP发送程序将向SMTP接收程序发送邮件报文信息。邮件报文传送包括以下三个逻辑阶段: ●用一个EAIL命令标识出邮件报文的发送方。例如,MAIL FROM: 。 ●用一个或者多个RCPT命令标识该邮件报文的接收方。例如,RCPT TO: <收信人电子 邮箱地址>。 ●用一个DATA命令标识该邮件报文的内容。 发送MAIL命令后,如果SMTP服务器已经做好接收邮件的准备,则返回响应信息“250 OK(一切正常)”。否则,返回有关无法接收邮件原因的响应信息,例如451(处理时出错)、452(存储空间不够)、500(命令无法识别)等。 RCPT命令标识邮件接收方的电子邮箱地址,多次使用该命令能够为邮件指定多个接收者,并且每个RCPT命令都会返回一个单独的响应信息。例如“550 No such user here(无此用户)”,即不存在此电子邮箱地址。RCPT命令的作用是:先检测SMTP接收服务器是否做好接收邮件的准备,然后在进行邮件传输。 3.关闭连接 邮件发送完毕后,发送方SMTP服务器程序将发送QUIT命令。当接收方SMTP服务器程序返回响应信息“211(服务关闭)”时,表明接收方SMTP服务器程序同意关闭TCP连接。

SMTP协议发送电子邮件 源代码

namespace SMTPServer { public partial class sendMailTSMI : Form { public sendMailTSMI() { InitializeComponent(); } private void sendMailTSMI_Load(object sender, EventArgs e) { fromTxt.Text = SendMail.mailFrom; prptComBox.SelectedIndex = 0; rBtnHTML.Checked = true; } private void button1_Click(object sender, EventArgs e)//浏览按钮 { OpenFileDialog oFileDialog = new OpenFileDialog(); if (oFileDialog.ShowDialog() == DialogResult.OK) { AttachTxt.Text = oFileDialog.FileName; } } private void btnSend_Click(object sender, EventArgs e)//发送按钮 { if (toTxt.Text.Trim() == "") { MessageBox.Show("收件人不能为空!"); return; } if (fromTxt.Text.Trim() == string.Empty) { MessageBox.Show("发件人不能为空!"); return;

} string mailTo = toTxt.Text.Trim(); string mailCC = ccTxt.Text.Trim(); string mailSubject = subjectTxt.Text.Trim(); string mailFrom = fromTxt.Text.Trim(); string mailBody = bodytxt.Text.Trim(); //实例化MailAddress MailAddress maddr = new MailAddress(mailFrom);//包含收件人地址的MailAddress //初始化MailMessage MailMessage mymail = new MailMessage(); mymail.To.Add(mailTo);//向收件人地址集合添加邮件地址 https://www.doczj.com/doc/4c4535047.html,.Add(mailCC);//向抄送收件人地址集合添加邮件地址 mymail.From = mailFrom;//发件人地址 mymail.Subject = mailSubject;//邮件标题 mymail.SubjectEncoding = Encoding.UTF8;//获取或设置电子邮件的主题内容实用的编码 mymail.Body = mailBody;//邮件正文 mymail.BodyEncoding = Encoding.UTF8;//获取或设置邮件正文的编码 //设置优先级 switch (prptComBox.SelectedText.ToString()) { case"高": mymail.Priority = MailPriority.High; break; case"中": mymail.Priority = MailPriority.Normal; break; case"低":

SMTP、POP3协议以及邮件服务器之间的通信过程

SMTP、POP3协议及台邮件服务器之间的通信过程 POP3(Post Office Protocol 3)即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议, 是一种提供可靠且有效电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供与来信有关的通知。它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,我们就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转你发出的电子邮件。SMTP目前已是事实上的在Internet传输 e-mail的标准,是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个 或多个接收者(在大多数情况下被确定是存在的),然后消息文本就传输了。可以很简 单地通过Telnet程序来测试一个SMTP服务器,SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX(Mail eXchange)DNS。 SMTP协议的邮件路由过程 SMTP服务器基于域名服务DNS中计划收件人的域名来路由电子邮件。SMTP服务器基于DNS中的MX记录来路由电子邮件,MX记录注册了域名和相关的SMTP中继主机,属于该域的电子邮件都应向该主机发送。若SMTP服务器 https://www.doczj.com/doc/4c4535047.html, 收到一封信要 发到shuer@https://www.doczj.com/doc/4c4535047.html,,则执行以下过程: 1、Sendmail 请求DNS给出主机https://www.doczj.com/doc/4c4535047.html,的CNAME 记录,如有,假若CNAME (别名记录)到https://www.doczj.com/doc/4c4535047.html,,则再次请求https://www.doczj.com/doc/4c4535047.html,的CNAME记录, 直到没有为止。 2、假定被CNAME到https://www.doczj.com/doc/4c4535047.html,,然后sendmail请求@https://www.doczj.com/doc/4c4535047.html, 域的DNS给 出https://www.doczj.com/doc/4c4535047.html,的MX记录(邮件路由及记录),shmail MX 5 https://www.doczj.com/doc/4c4535047.html, 10 https://www.doczj.com/doc/4c4535047.html,。 3、Sendmail组合请求DNS给出https://www.doczj.com/doc/4c4535047.html,的A记录(主机名(或域名)对 应的IP地址记录),即IP地址,若返回值为1.2.3.4(假设值)。 4、 Sendmail与1.2.3.4连接,传送这封给shuser@https://www.doczj.com/doc/4c4535047.html, 的信到1.2.3.4 邮件的收发过程 1、发信人在用户代理处编辑邮件,包挌收信人地址、发信人地址及主题等等 2、用户代理提取发件人编辑的信息,生成一封符合邮件格式标准的邮件 3、用户代理用SMTP发送到发件端服务器(即发件人邮箱所对应的服务器) 4、发件端服务器使用SMTP把邮件发送到接收端服务器(即收件人所对应的服务器) 5、收件人调用用户代理,用户代理使用POP3接收邮件 6、用户代理解释邮件并呈现给用户 服务器之间的通讯过程 1、发送端服务器(以下简称客户端)与接收端服务器(以下简称服务器)的25号端

相关主题
文本预览
相关文档 最新文档