我在想。
假设我有一台交换服务器,(域名可以是me@company.com), 另外,我有一个中继服务器,接受对互联网域的请求(gmail / yahoo / etc)。
假设我发送邮件至:(you@company.com; him@gmail.com) - 来自域中的用户(me@company.com)
邮件被发送到交换服务器,然后交换机对域进行分组(company.com和gmail.com)=>它将邮件放入 you@company.com邮箱。
然后,交易所发现它需要发送到him@gmail.com,因此它会将其发送到中继服务器。
中继服务器将获取SMTP请求:
来自:me@company.com
至:you@company.com; him@gmail.com
问题是 - smtp中继服务器如何知道不将其发送到you@company.com - 从而导致收到重复的邮件?
另外,gmail服务器如何知道不再尝试发送它收到的邮件? (因为他们只获得smtp请求,类似于发送邮件的客户端)
先谢谢!
答案 0 :(得分:1)
邮件的内容不会被交换机或中继解析,以确定邮件的去向。此上下文中的每个人都在互相讨论SMTP,并使用RCPT协议消息指定收件人。所以你的邮件客户端告诉交换两个RCPT,交换决定其中一个是远程的,然后说一个RCPT到中继,依此类推。 This document指定您可以阅读有关RCPT动词的SMTP协议。
答案 1 :(得分:0)
您看到的标头不会用于传递邮件。相反,SMTP定义了一个名为 envelope 的概念,它具有完全不同的标头集。作为一个常见的例子,这也是Bcc:如何运作;收件人地址被复制到信封中,然后从信封内的信息中删除。
邮件发送时,信封发件人通常会被复制到Return-Path:
标题中,您有时会看到信封收件人信息被复制到Received:
标题中。
在邮件服务器决定邮件应该到达哪个目的地时,通常会为每个不同的目标提供一个邮件副本(假脱机文件,队列条目,你有什么)。因此,如果您从@ company转发给@ company,@ private和friend @ gmail,则第一台服务器可能会确定外部地址都应该转到同一个出站中继,而内部副本是在本地交付的。然后,中继同样决定它需要联系两个不同的目的地,因此单个传入消息被复制到两个出站消息,一个给你@ private,另一个给朋友@gmail。