html中随机添加xp_smtp_sendmail空格

Posted

技术标签:

【中文标题】html中随机添加xp_smtp_sendmail空格【英文标题】:xp_smtp_sendmail blank space added to html randomly 【发布时间】:2010-02-23 00:05:28 【问题描述】:

我有一个 proc,我在其中生成带有链接的小型 html 文档,并通过 xp_smtp_sendmail proc 将其发送出去。链接是根据查询结果生成的,链接很长。这在大多数情况下都有效。但是,有时链接会由于在查询字符串变量名称中插入空格而断开,即 &Name=John。

这可能因电子邮件客户端而异(相同的链接在 Gmail 中有效,但在 comcast 中可能因空格而无效。空间似乎是随机插入的,因此在每个损坏的电子邮件链接中,空间可能会破坏其他查询字符串变量。当我这样做时从 proc 打印链接是干净的,没有空格。

这是我在主进程中执行的邮件进程示例(获取查询结果并为@Message 生成 html)。无论我是否对网址进行编码,似乎都会插入空格。

提前感谢您的帮助。如果此处显示不正确,我可以发送更简洁的代码版本。

....上面的查询结果

SET @Message = NULL
SET @Message = @Message +
+ '<br/>Dear ' + @FirstName + ' ' + @LastName + ','
+ '<br/><br/>Recently you took "' + @Title + '". ' 
+ 'In response to the question "What is it?" ' 
+ 'you responded "' + @Response + '".' 
+ '<br/><br/>Following up on previous mailing'
+ '<br/><br/>Please click on the link below'
+ '<br/><br/><a href="' + @Link + '">Please click here</a>'
+ '<br/><br/>plain text'
+ '<br/><br/>plain text,'
+ '<br/><br/>plain text<br/>
plain text<br/>
plain text<br/>
plain text<br/>
plain text<br/>
plain text

EXEC @rc = master.dbo.xp_smtp_sendmail
 @FROM         = 'any@any.com',
 @FROM_NAME    = 'Any User',
 @TO           = @Email,
 @priority     = N'NORMAL',
 @subject      = N'My email',
 @message      = @Message,
 @messagefile  = N'',
 @type         = N'text/html', 
 @attachment   = N'',
 @attachments  = N'',
 @codepage     = 0,
 @server       = 'smtp.server.any'

【问题讨论】:

...如果上面看起来很时髦,请再次告诉我,我可以发送我构建的 HTML 的干净版本, 【参考方案1】:

1 - 检查您生成的消息的长度并切换到从长度接近 4000 字符的文件发送。

2 - 在每个句子或段落之前注入 cr/lf 字符。

3 - 确保在打开标签之前和之后都有 cr/lf(如果 smtp 服务器喜欢,则只有 lf)

4 - 与您需要的人讨论缩短该嵌入式链接的长度 - 这显然是不可持续的

5 - 询问 smtp 服务器上的任何配置选项,让您以完全编码的二进制格式发送电子邮件(需要 MIME 标头和 Base64 编码)

6 - 寻找 xp_smtp_sendmail 的更新替代品,也许是 .NET xp

【讨论】:

【参考方案2】:

与值的链接有多长?

我的猜测是发生了一些换行,并且您将换行符更改为空格。

它看起来是随机的,因为值的长度不同,所以拆分是随机发生的。

另一个想法:你只需要&lt;br&gt; 标签。 &lt;br /&gt; 不需要(有或没有空格),可能会有所贡献

【讨论】:

感谢您的回复。该链接大约有 428 个字符。有趣的是,可以将相同的链接发送到 gmail(那里从未见过错误)和另一个 comcast 电子邮件客户端(出现空格)。因此,它似乎因电子邮件客户端解析它的方式而异。到现在还想不通。我会按照您的建议试一试 标签。有没有其他方法可以消除潜在的包装?如果您有任何其他想法,请告诉我。 你可以使用 tinyurl 或类似的方法来缩短链接吗?【参考方案3】:

如何将回车符放入您的编码中。 BR 只会在 HTML 中“回车”,但源本身没有回车。

【讨论】:

【参考方案4】:

您的问题是您将 mai 视为网页。邮件是在纯文本控制台时代发明的,通常有 72 个字符的行长度限制。您需要将 HTML 包装在不超过 72 个字符的行中,以确保将其正确传递给所有收件人。

为此,请使用带引号的可打印编码并将行换行至最多 72 个字符。

但是,除了为这项工作编写一个过程之外,我不知道如何在 SQL Server 中执行此操作。您可以按照ASP FAQ 中的建议进行操作。

它所说的基本上是通过技巧或使用链接缩短服务来缩短链接。

【讨论】:

以上是关于html中随机添加xp_smtp_sendmail空格的主要内容,如果未能解决你的问题,请参考以下文章

如何用 JavaScript 给当前网页中的所有链接后面添加随机数

将计时器和网络链接添加到随机图像系统?

用Python新建用户并产生随机密码

iOS开发-随机图片验证码

Google 跟踪代码管理器 - 将 CSP 随机数添加到自定义 HTML 代码段的任何可能方式?脚本属性被剥离

SQL语法:寄信