我读过,通过电子邮件标准的第一部分是区分大小写的,但是我试着将电子邮件发送到name@example.com,Name@example.com和NAME@example.com-它在每种情况下已经到来.
邮件服务器如何处理用户名?是否有可能错过案例并且不会传递该消息?使用与提供电子邮件地址时注册时所写的完全相同的字母大小写真的非常重要吗?
在我们的邮件应用程序中,我们发送带有以下标题的电子邮件:
FROM: marketing@customer.com
TO: subscriber1@domain1.com
Return-PATH: bouncemgmt@ourcompany.com
Run Code Online (Sandbox Code Playgroud)
我们面临的问题是,某些电子邮件服务器会立即退回邮件,并使用来自或反向路径(marketing@customer.com)代替我们的反弹管理服务器.我们想知道如果我们能够捕获所有跳出,我们是否在标题中修改回复与返回路径相同.
欢迎任何其他想法?
我们使用以下文档作为参考: VERP RFC Bounce Messages
编辑1:更多信息,看看我们是否可以得到这个解决方案.
我们想知道中继邮件的电子邮件服务器将在什么时候选择使用回复路径与返回路径.我们注意到,当第一个中继消息的smtp服务器被拒绝时,它会将其发送到reply-to,但是当它在一跳之后发生时它将它发送到返回路径.
我们为客户托管了许多Web应用程序.很明显,他们希望使用自己的域来引用这些应用程序,通常他们希望任何键入http://www.customer1.example或http://customer1.example转到其Web应用程序的用户.
我们面临的情况是,我们需要具备在不久的将来更改IP地址的灵活性.我们不希望依赖客户对其域名进行A记录更改.所以我们认为使用CNAME记录会起作用,但是我们发现CNAME记录不适用于根域.
基本上:
customer1.example IN CNAME customer1.mycompanydomain.example //this is invalid as the RFC
www.customer1.example IN CNAME customer1.mycompanydomain.example //this is valid and will work
Run Code Online (Sandbox Code Playgroud)
我们希望能够更改IP地址customer1.mycompanydomain.example或A记录,我们的客户将遵循我们控制的记录.
在我们的DNS中它看起来像:
customer1.mycompanydomain.example IN A 192.0.2.1
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
是否可以使用RegEx来验证或清理Base64数据?这是一个简单的问题,但推动这个问题的因素是让它变得困难的因素.
我有一个Base64解码器,不能完全依赖输入数据来遵循RFC规范.所以,我面临的问题可能是Base64数据可能没有被分解成78个问题(我认为它是78,我必须仔细检查RFC,所以如果确切的数字是错误的话,请不要告诉我)线条,或线条可能不以CRLF结尾; 因为它可能只有CR,或LF,或者两者都没有.
所以,我有一段时间解析Base64数据格式化.因此,以下示例变得不可能可靠地解码.为简洁起见,我只会显示部分MIME标头.
Content-Transfer-Encoding: base64
VGhpcyBpcyBzaW1wbGUgQVNDSUkgQmFzZTY0IGZvciBTdGFja092ZXJmbG93IGV4YW1wbGUu
Run Code Online (Sandbox Code Playgroud)
好的,所以解析没问题,这正是我们所期望的结果.在99%的情况下,使用任何代码来至少验证缓冲区中的每个字符都是有效的base64字符,完美地运行.但是,下一个例子会给混合物带来麻烦.
Content-Transfer-Encoding: base64
http://www.stackoverflow.com
VGhpcyBpcyBzaW1wbGUgQVNDSUkgQmFzZTY0IGZvciBTdGFja092ZXJmbG93IGV4YW1wbGUu
Run Code Online (Sandbox Code Playgroud)
我在一些病毒和其他试图利用某些邮件阅读器的东西中看到的Base64编码版本希望不惜一切代价解析mime,而不是严格按照本书,或者说RFC; 如果你愿意的话.
我的Base64解码器将第二个示例解码为以下数据流.请记住,原始流是所有ASCII数据!
[0x]86DB69FFFC30C2CB5A724A2F7AB7E5A307289951A1A5CC81A5CC81CDA5B5C1B19481054D0D
2524810985CD94D8D08199BDC8814DD1858DAD3DD995C999B1BDDC8195E1B585C1B194B8
Run Code Online (Sandbox Code Playgroud)
任何人都有一个很好的方法来解决这两个问题?我不确定它是否可能,除了对应用了不同规则的数据进行两次转换,并比较结果之外.但是,如果您采用这种方法,您信任哪个输出?似乎ASCII启发式算法是最好的解决方案,但是代码,执行时间和复杂性会增加多少像病毒扫描程序一样复杂的东西,这个代码实际上涉及到什么?您如何训练启发式引擎以了解什么是可接受的Base64,什么不是?
对于这个问题继续得到的观点数量,我已经决定发布我已经在C#应用程序中使用的简单RegEx 3年了,有数十万个事务.老实说,我喜欢Gumbo给出的最好的答案,这就是我选择它作为选定答案的原因.但是对于任何使用C#的人来说,并且寻找一种非常快速的方法来至少检测字符串或byte []是否包含有效的Base64数据,我发现以下内容对我来说非常有用.
[^-A-Za-z0-9+/=]|=[^=]|={3,}$
Run Code Online (Sandbox Code Playgroud)
是的,这仅适用于Base64数据的STRING,而不是格式正确的RFC1341消息.因此,如果您正在处理此类数据,请在尝试使用上述RegEx之前将其考虑在内.如果您正在处理Base16,Base32,Radix甚至Base64用于其他目的(URL,文件名,XML编码等),那么强烈建议您阅读Gumbo在其答案中提到的RFC4648,因为您需要做得好在尝试使用此问题/答案集中的建议之前,请了解实现所使用的字符集和终止符.
哪个RFC描述了现代HTTP标头中用于日期/时间的格式,如"Last-Modified"和"If-Modified-Since",以及如何根据这种格式在PHP中生成日期/时间字符串?
有些消息来源指向RFC 2822,正如DateTime类所示,它使用的是D, d M Y H:i:s O格式,但从我的测试来看,这种格式+0000不是GMT最后生成的.我尝试了其他时区说明符,但它们似乎都没有放在GMT最后,我得到的最接近的结果是UTC.但是,正如Firebug所示,所有站点都GMT在HTTP标头中使用而不是+0000或UTC.
那么实际使用的是什么格式?如何以与其他网站相同的方式格式化日期/时间?
<form enctype=multipart/form-data>将文件上传到Web服务器时为什么需要?
以下网址有效吗?
http://www.example.com/module.php/lib/lib.php
根据http://tools.ietf.org/html/rfc1738部分,URL的hpath元素不能包含'.'.(期).在上面的例子中有'.' 在根据RFC1738不允许的"模块"之后.
我是在读错了RFC还是这个RFC被另一个RFC取得了成功?其他一些RFC允许'.' 在URL(http://tools.ietf.org/html/rfc1808)中.
根据RFC1738,可以在URL中使用未编码的星号(*)":
因此,只有字母数字,特殊字符"$ -_.+!*'(),"和用于其保留目的的保留字符可以在URL中未编码使用.
然而,w3.org的命名和寻址材料表明,星号"保留用于在特定方案中具有特殊的重要性",并暗示它应该被编码.
此外,根据RFC3986,URL是一个URI:
术语"统一资源定位符"(URL)指的是URI的子集,其除了标识资源之外,还通过描述其主要访问机制(例如,其网络"位置")来提供定位资源的手段.
它还指定星号是"sub-delim",它是"保留集"的一部分,并且:
URI生成应用程序应对与保留集中的字符对应的数据八位字节进行百分比编码,除非URI方案明确允许这些字符表示该组件中的数据.
它还明确指定它更新RFC1738.
我将所有这些都理解为要求将星号编码在URL中,除非它们用于URI方案定义的特殊用途.
是RFC1738的HTTP URI方案标准基准?它是否以某种方式免除星号编码,或者由于RFC3986而在这方面是否过时?
维基百科说,"当没有保留目的时,他不需要对字符进行百分比编码." RFC1738是否删除了星号的保留用途?
各种资源和工具似乎在这个问题上分开了.
PHP urlencode和rawurlencode- 后者声称遵循RFC3986 - 对星号进行编码.
然而,JavaScript的escape和encodeURIComponent 不编码的星号.
并且Java URLEncoder 不对星号进行编码:
特殊字符"."," - ","*"和"_"保持不变.
流行的在线 工具(谷歌搜索"在线网址编码器"的前两个结果)也不编码星号.该URL编码和解码工具明确指出,"[T]他保留的字符只有在特定情况下进行编码." 它继续列出星号和&符作为保留字符.它编码&符号,但不编码星号.
Stack Exchange社区中的其他类似问题似乎有陈旧,不完整或难以令人信服的答案: