8

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

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

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

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

....上面的查询结果

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'
4

4 回答 4

1

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

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

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

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

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

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

于 2010-07-14T10:56:35.923 回答
0

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

于 2010-04-07T15:55:06.907 回答
0

与价值观的联系有多长?

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

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

另一个想法:你只需要<br>标签。<br />不需要(有或没有空间),可能会有所贡献

于 2010-03-20T20:08:33.973 回答
-1

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

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

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

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

于 2010-07-25T06:50:31.473 回答