我正在尝试理解使用smtp发送邮件。我看到了一个例子,它是这样的:
HELO yourhost.yourdomain.edu
MAIL FROM: <carol@yourhost.yourdomain.edu>
RCPT TO: <msgs@host1.somewhere.com>
RCPT TO: <alice@host2.somewhere.com>
DATA
Date: Sun, 30 Nov 98 nn:nn:nn EST
From: Carol <carol@yourhost.yourdomain.edu>
To: <msgs@host1.somewhere.com>
Cc: <alice@host2.somewhere.com>
Subject: Update
Mike: Cindy stubbed her toe. Bobby went to
baseball camp. Marsha made the cheerleading team.
Jan got glasses. Peter has an identity crisis.
Greg made dates with 3 girls and couldn't
remember their names.
.
QUIT
我感到困惑的是,我们一开始就有MAIL FROM和RCPT TO,为什么我们在DATA部分也有FROM:、TO:和Cc:?标题处的RCPT TO和DATA部分的TO有什么区别?如果我们假设我们用这些命令成功地发送了邮件,结果会是什么?我的意思是,接收者看到的是什么?
感谢
消息主体在协议的DATA部分传输。
但是,SMTP使用MAIL FROM和RCPT TO来记录信封信息(可能与实际邮件不同)。这在邮件列表传递中最为明显,在邮件列表中,信封是写给实际收件人的,而邮件正文通常只包含通讯组列表名称。
收件人将只能看到数据中的内容。当MTA(邮件传输代理)将内容放入邮件存储中以供MUA(邮件用户代理)检索并显示给用户时,信封将丢失。
由于值不匹配的可能性,这已经产生了多年的问题(以及无尽的垃圾邮件),但在准备RFC-822结构和SMTP传输协议及其后续协议时,这被视为最合适的机制。
实际的传输不需要以任何特定的形式格式化邮件。这是由接收系统验证的,以确保只有格式良好的邮件才能接受本地传递。
基本上:SMTP服务器,如Postfix,只对信封(MAIL FROM和RCPT TO命令)感兴趣,邮件用户代理,如Thunderbird,只对邮件内容(FROM:、TO:和Cc标头)感兴趣。
这与蜗牛邮件非常相似,信封上的地址和随附的信件通常是相同的,但不一定。
信封中的反向路径表示如果出现问题,应在哪里发送反弹消息。它可能与From标头匹配,也可能不匹配。例如,一位秘书以老板的名义发送邮件。反向路径将包含秘书的电子邮件地址,发件人标头将包含老板的姓名和邮件地址。在邮件列表的情况下也有所不同,因为它是由Pekka编写的。
前向路径(RCPT TO参数)是实际目的地。SMTP服务器不关心是因为某人在"收件人"中,还是因为他在"抄送"列表中而必须将邮件发送给他。在密件抄送地址的情况下,邮件内容中自然没有密件抄送标头!毕竟它是盲目的复写本。但是密件抄送收件人在RCPT TO命令中被列为转发路径,所以SMTP服务器会知道他们,而用户不会。