2010-02-23 71 views
8

我有一个proc,我生成一个链接的小html文档,并通过xp_smtp_sendmail proc发送出去。链接基于查询结果生成,并且很长。这在大多数情况下工作。然而,由于空格被插入查询字符串变量名称中,有时该链接会被破坏,即& Na me = John。xp_smtp_sendmail空格随机添加到html

这可能因电子邮件客户端而异(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   = '[email protected]', 
@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' 
+0

...再次请让我知道如果上面显示时髦,我可以发送一个干净版本的HTML我建立, – 2010-02-23 00:14:55

+0

任何进一步转发? – gbn 2010-07-17 13:17:36

回答

0

多久与价值观的联系?

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

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

另一个想法:你只需要<br>标签。 <br />是不需要的(有或没有空间),并可能有助于

+0

感谢您的回复。该链接约为428个字符。有趣的是,同样的链接可以发送到Gmail(从未见过错误)和另一个comcast电子邮件客户端(空格出现)。所以看起来,这取决于电子邮件客户端解析它的方式。到目前为止还没有弄清楚。按照您的建议,我会给
标签一个镜头。有没有其他方法可以消除潜在的包装?如果您有任何其他想法,请告诉我。 – 2010-03-22 18:59:59

+0

你可以使用tinyurl或类似的来缩短链接吗? – gbn 2010-03-22 20:06:11

0

如何将回车放入您的编码。 BR将只以HTML格式返回,但源代码本身没有回车。

1

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

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

3 - 请确保您有CR/LF之前和标签打开后(或只是LF如果这就是SMTP服务器喜欢)

4 - 告诉你谁约缩短嵌入式的长度链接 - 这是显而易见难以为继

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

6 - 寻找一个更近替代xp_smtp_sendmail,.NET xp或许是

-1

你问题是你对待mai就像一个网页。邮件是在文本控制台时发明的,并且经常有72个字符行长度限制。您需要将您的HTML包装成不超过72个字符的行,以确保它能够正确传送给所有收件人。

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

但是,我不知道如何在SQL Server中执行此操作,而不是为作业编写过程。您可以按照ASP FAQ中的建议进行操作。

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