3

我必须解决应用程序中的问题。该应用程序是部署到应用程序服务器的 Oracle 表单。最后的表格是按下按钮的过程,假设发送电子邮件。在按钮代码的末尾,它有一个 PL/SQL 代码,它调用 C:\ 内的 CMD 文件。当 PL/SQL 代码调用 CMD 文件时,它传递了 3 个字符串变量参数。我对第三个有问题。

这是第三个参数的示例:

'** 假期申请 **'||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 文件调用创建 Outlook 对象并将第三个变量作为 HTML 正文传递的 Vbscript。

所有这一切的问题是,当有人在电子邮件正文中收到这封电子邮件时,只会看到第一行是 ** VACATION REQUEST ** 正文的所有其他部分都丢失了。

我发现在带有 vbscript 的 Windows 中,您必须将 CHR(10) 和 CHR(13) 都放在行尾???

真的吗 ?这可能是我的问题吗?

4

2 回答 2

4

电子邮件标准 ( RCF2822 ) 规定CRLFchr(13)+chr(10)无论源平台或目标平台如何[即。这不是 Windows 问题]。

通常 CRLF 在分隔标题时最重要,但它进一步将单行文本的长度限制为不超过 998 个字符,最好不超过 78 个字符(1000,80 没有 CRLF 字符)。

在 RFC2822 第 2.3 节中,它进一步指出正文只能包含CRLF 在一起,它们不能独立出现,因此很可能邮件基础设施的某些部分首先被截断chr(10)。如果您只想在正文中包含此类字符,则需要使用不同形式的内容编码...base64例如(但这超出了您所要求的范围-我并不是建议将其作为解决方案 ;))

说了这么多……如果您上面的代码是 VBScript,您应该使用它&来将两个字符串连接在一起(不是||)。如果是 plsql 脚本,您是否确认该语句的输出是大量文本而不仅仅是第一个字符串?

于 2012-07-23T20:23:05.170 回答
2

电子邮件标准指定行应以 CR/LF (chr(13)/chr(10)) 结尾。见https://www.rfc-editor.org/rfc/rfc2822#section-2.1

通常,Windows 文本文件遵循相同的格式。

于 2012-07-23T20:20:33.823 回答