有一个使用 System.Net.Main 命名空间通过 SMTP 发送电子邮件的 .NET 程序。
它位于客户站点上,因此从那里它将经过一系列 SMTP 中继服务器,然后才到达目的地。
目前我没有关于此 smtp 重放/电子邮件基础设施的信息(并且获取该信息将会很困难)。
在电子邮件中,距行首约 100 个字符的长 URL 中的某个位置会插入一个感叹号。
编辑-实际上已经发现它大约有 1000 个字符
这在测试系统或数百个其他站点上不会发生。
我确信这与用于打破长队的转义码有关。
有人有什么想法吗?
答案1
我自己也遭遇过这种事情。
如果您正在构建一个不带任何回车符的 HTML 消息,则可能会在 1000 个字符左右的地方出现错误。
解决方案是添加几个 \r\n 字符,以便每行小于 1000 个(如果不计算 \r\n 字符,则小于 988 个)。
参见 2.1.1 节。行长度限制RFC 2822更多细节:
2.1.1. 行长度限制
本标准对一行中的字符数有两个限制。每行字符不得超过 998 个字符,并且应不超过 78 个字符(不包括 CRLF)。
答案2
在特定数量的字符处换行通常是客户端问题。如果您在其他网站或测试机器上没有看到它,我认为这不是您的代码。看看您是否无法找出正在使用哪个客户端来接收消息 - 这可能是一些在特定数量的字符处自动换行的旧东西。
答案3
如果问题没有发生在运行相同代码的许多其他网站上,那么听起来不像是 .Net 应用程序导致了这个问题。问题网站是否位于某种应用程序防火墙或反垃圾邮件设备后面,这些设备可能正在监控 smtp 流?如果是这样,可能会触发一条关于截断长 URL 的规则,从而导致电子邮件中的 URL 缩短。