我有一个proc,我生成带有链接的小html文档,并通过xp_smtp_sendmail proc发送出去。链接是根据查询结果生成的,并且很长。这适用于大多数情况。但是,由于空格被插入到querystring变量名中,有时链接会被破坏,即& Na me = John。
这可能因电子邮件客户端而异(相同的链接在Gmail中有效,但由于空格可能无法在comcast中使用。空间似乎是随机插入的,因此在每个损坏的电子邮件链接空间中可能会破坏其他查询字符串变量。当我这样做时来自proc的PRINT链接是干净的,没有空格。
这是我在main proc中执行的邮件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'
答案 0 :(得分:1)
1 - 检查您生成的消息的长度,并切换到从文件发送它的长度接近4000 char。
2 - 在每个句子或段落之前注入cr / lf字符。
3 - 确保在标签打开之前和之后你有cr / lf(或者只是如果这是smtp服务器喜欢的那样)
4 - 与任何关于缩短嵌入链接长度的人交谈 - 这显然是不可持续的
5 - 询问smtp服务器上的任何配置选项,以便将电子邮件作为完全编码的二进制文件发送(需要MIME标头和Base64编码)
6 - 寻找更新的xp_smtp_sendmail替代方案,也许是.NET xp
答案 1 :(得分:0)
与值的链接有多长时间?
我的猜测是会发生一些换行,并且换行符会变为空格。
它似乎是随机的,因为值的长度不同,因此分割是随机发生的。
另一个想法:您只需要<br>
个标签。不需要<br />
(有或没有空格)并且可以贡献
答案 2 :(得分:0)
如何将回车放入编码中。 BR只会'回车'以HTML格式返回,但源本身没有回车符。
答案 3 :(得分:-1)