在Windows中,CHR(10)和CHR(13)都需要吗?

3
我需要修复一个应用程序中的问题。该应用程序是一个部署在应用服务器上的Oracle表单。在该表单的最后一个过程中,按下按钮应该发送一封电子邮件。在按钮代码的结尾处,有一个调用 C:\ 中 CMD 文件的 PL/SQL 代码。当 PL/SQL 代码调用 CMD 文件时,它会传递三个字符串变量作为参数。我遇到了第三个参数的问题。
这是第三个参数的示例:
'** VACATION REQUEST **'||chr(10)||
'**********************'||chr(10)||chr(10)||
'** Notice: Forward this mail to example@example.com'||chr(10)||
'           stating whether the request is approved or rejected'||chr(10)||chr(10)||
'Request Number   : '||:peticiones_vacaciones.codigo||chr(10)||
'Date of Request  : '||to_char(:peticiones_vacaciones.fecha_peticion,'dd/mm/yyyy')
  ||chr(10)||chr(10)

该cmd文件调用一个Vbscript,该脚本创建一个Outlook对象,并将第三个变量作为HTML正文传递。
问题是,当有人收到这封邮件时,在邮件正文中只会看到第一行,即“** VACATION REQUEST **”,其余部分都丢失了。
我发现在Windows系统下,使用vbscript时必须在行末加上CHR(10)和CHR(13)两个字符。
这是真的吗?这可能是我的情况出问题的原因吗?
2个回答

4
邮件标准(RCF2822)规定,无论源或目标平台如何(即这不是Windows问题),行都必须用回车和换行符(即CRLFchr(13)+chr(10))分隔。

通常,在分隔报头时,CRLF非常重要,但它进一步限制了单行文本的长度,最多不能超过998个字符,最好不要超过78个字符(1000,80不包括CRLF字符)。

RFC2822 Section 2.3中,它进一步说明正文只能包含CRLF在一起,它们不能独立出现,因此很可能某些邮件基础设施会在第一个chr(10)处截断。如果您想仅在正文中包含这样的字符,则需要使用不同形式的内容编码......例如base64(但这超出了您所要求的范围)。

所有这些都说了……如果你的代码是VBScript,你应该使用&来连接两个字符串(而不是||)。如果它是plsql脚本,你确定该语句的输出是大量文本而不仅仅是第一个字符串吗?

谢谢你的回答,我会尝试的!在PL/SQL中使用||是因为字符串是在表单内部构建的,然后作为参数传递给调用vbscript的cmd文件。上面的代码是生成字符串的PL/SQL代码。 - Alexandros
最终我自己找到了解决方案,原来这段代码是HTML代码,所以我用 <br> 替换了所有的 chr (10) 和 (13),这样我就可以使用HTML标签来格式化我的文本,毕竟HTML才是最终的结果。 - Alexandros

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接