2012-11-22 119 views
1

我想知道。邮件收发器如何不向已收到的收件人发送邮件?

假设我有一个交换服务器,(域可以[email protected]), 也,我有一个中继服务器,接受互联网域名(gmail /雅虎/等)的请求。

假设我发送邮件到:([email protected]; [email protected]) - 在

邮件被发送到交换服务器的域([email protected])从用户,那么交换机将域(company.com和gmail.com)分组= =>它将邮件放入[email protected]邮箱

然后,交换机看到它需要发送到[email protected],所以它会发送到中继服务器

中继服务器将得到SMTP请求:

来自:[email protected]

到:[email protected]; [email protected]


的问题是 - 如何做SMTP中继服务器知道不发给[email protected] - 由此导致接收到的重复邮件?

另外,gmail服务器如何知道不会再尝试发送它再次收到的邮件? (因为他们只能得到smtp请求,类​​似于发送邮件的客户端)

感谢高级!

回答

0

您看到的标题不用于传递消息。相反,SMTP定义了一个名为的包络,它具有完全不同的标头集合。作为一个常见的例子,这就是密件抄送:如何运作;收件人地址将被复制到信封中,然后从信封内的邮件​​中删除。

邮件发送时,信封发件人通常会复制到Return-Path:标题中,并且有时可以将信封收件人信息复制到Received:标题中。

在邮件服务器决定邮件应该到达哪个目的地的时候,每个不同的目的地通常会有一个邮件副本(假脱机文件,队列条目,你有什么)。因此,如果您从您@公司发送给我@公司,您@私人和朋友@ gmail,则第一台服务器可能会确定外部地址应同时发送到同一个出站中继,而内部副本则在本地发送。然后中继同样决定它需要联系两个不同的目的地,所以单个传入消息被复制到两个出站消息,一个给你@ private,另一个给friend @ gmail。

+0

所以我明白“To”字段仅用于视觉表示。 确实发送应该发生在消息的某处的实际收件人? (例如,如果我正在处理EML文件 - 就像iis虚拟服务器一样) – ArielB

+0

我不确定我是否确切地理解了您所得到的内容,但“To:”标题与实际收件人之间确实没有关系(尽管发件人通常在收件人和抄送:邮件头中指定收件人,邮件提交代理将这些邮件复制到信封;但如果发件人直接控制信封,则不需要这样),并且没有保证邮件收件人在邮件本身中可见,尽管许多邮件传输代理经常将这些信息包含在他们添加的“Received:”头部中。 – tripleee

+0

事情是,我们正在尝试自己完成邮件中继,并且我们正在使用SMTP侦听器将请求保存到磁盘,然后,我们正在创建新邮件并发送它。 我们只想将邮件发送给RCPT TO中列出的人员,现在在“to”标题中(正如您所说的那样,它不相关)。 我想知道是否通常在邮件中添加RCPT TO,但是您说它不是我所知的 – ArielB

1

邮件的内容未被交换机或中继器分析以确定邮件应发送到哪里。在这种情况下,每个人都彼此交谈SMTP,并使用RCPT协议消息指定收件人。所以你的邮件客户端告诉交换机两个RCPT,交换机决定其中一个是远程的,然后向中继器说一个RCPT,等等。 This document指定您可以阅读有关RCPT动词的SMTP协议。

+0

这是否意味着中继获得[email protected],但“到”字段将包含邮件? – ArielB

+0

是的,邮件中继或传输代理不能混淆“收件人”邮件标题。它只允许添加它自己的某些标题,出于会计目的,正如此问题中的其他评论所指出的。 –

相关问题