下面是一些我试图改变的经典Asp VB脚本,所以我可以让它在我的Windows 2012服务器上运行。 (我知道它的老唐不会问:()。这在我们旧的2003年的盒子上工作,但它使用的库在2012年不支持。我现在使用存储过程发送这封电子邮件。我面临的问题是,当我连接sMailBody
字符串时,我必须有一些不允许它连接的' or "
语法。当我Response.Write(strRSs)
我得到字符串但所有的HTML呈现。
EXEC [dbo].[MailPackage] 'test@test.com', 'tteesstt@ttessttt.com', 'tset' {visible HTML}
for x = 0 to uBound(aRecipientID)
'-- Plugin real content
sMailBody = Replace(sMailBody,"{*~BACKGROUND~*}","'"Session("LiveURL")&"")
sMailBody = Replace(sMailBody,"{*~HEADER~*}",Session("LiveURL")&"images/testing.jpg")
sMailBody = Replace(sMailBody,"{*~BODY~*}",sBody)
sMailBody = Replace(sMailBody,"{*~URL~*}",Session("LiveURL") & "/viewpackage.asp?p=" & sPackageKey & "&u=" & aRecipientID(x) & "&s=" & nSendID&"'")
Dim strRS
strRS = "EXEC [dbo].[MailPackage] " + "'" + aRecipientEmail(x) + "', '" + Session("FromAddress") + "', '" + sSubject + "', '" + sMailBody + "'"
Response.Write(sMailBody)
Response.Write(strRS)
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Session("ConnectionString")
Conn.Execute strRS
如何更正语法,以便将sMailBody
作为我的邮件正文传递到我的存储过程中。
答案 0 :(得分:1)
假设您要将{*~BACKGROUND~*}
中的占位符sMailBody
替换为Session("LiveURL")
的内容:
变化
sMailBody = Replace(sMailBody,"{*~BACKGROUND~*}","'"Session("LiveURL")&"")
到
sMailBody = Replace(sMailBody, "{*~BACKGROUND~*}", Session("LiveURL"))
基本规则:
& ""
- 是浪费时间其他替换行编译,但是没有Next
丢失?
感谢@ Lankymart的评论
...假设您要将{*~BACKGROUND~*}
中的占位符sMailBody
替换为Session("LiveURL")
的单引号内容...
原始代码中的错误以及我对jackncode意图的错误解释表明,通过连接构建字符串会使表达式产生如此多的噪音,以至于很容易搞砸。查看将引用的路径和其他参数放入.Run或.Exec的命令行中的数百万个问题。
对于这种情况,编写执行“拥抱”功能的功能是值得的。这样你DRY就会发出有趣的字母:
>> Function q(s) : q = "'" & s & "'" : End Function
>> Function qq(s) : qq = """" & s & """" : End Function
>> s = "x"
>> t = "<tag attr=@>"
>> WScript.Echo Replace(t, "@", q(s))
>> WScript.Echo Replace(t, "@", qq(s))
>>
<tag attr='x'>
<tag attr="x">
(参见here)