asp电子邮件表单 - 尝试插入领先空间

时间:2014-07-31 09:04:47

标签: email asp-classic prefix cdonts

我在我的网站上使用此脚本来收集访问者的查询表单信息。我的一位客户报告说,当他收到生成的电子邮件时,Outlook正在操纵该行:

email=myclient@myclientsdomain.com

...包含前缀“email =”,好像这是电子邮件的一部分! (愚蠢的展望!)

我需要更改我的代码,以便在电子邮件地址之前插入一个前导空格,使其看起来更像这样:

email= myclient@clientsdomain.com

这样,当我的客户点击电子邮件回复用户时,会使用正确的电子邮件(没有附加到电子邮件正面的前缀!)

总之,Outlook在创建电子邮件链接时包含前缀,因为电子邮件和前缀之间没有任何空格。

我不是一个程序员,广泛的搜索使我失望。我尝试了很多建议,但我的表格似乎要么失败要么没有修复。

<!--START CODE FOR SENDFORM.ASP -->
<%@ LANGUAGE="VBScript" %>
<%
Dim sFormTitle, sFormSender, sFormSubject, sFormDestination

'============================================
' You only need to change the details below!
'============================================
sFormTitle = "enquiries"
sFormSender = “myemail@mydomain.com"
sFormDomain = “mydomain.com"
sFormSubject = "Enquiry From Website."
sFormDestination = “me@mydomain.com"
'sFormDestination = “mail@mydomain.com"
'============================================
' And that's it!
'============================================

Dim sRawForm, aFormArray, sElement, sFormData

sRawForm = request.form
aFormArray = Split(sRawForm, "&")
for i = 0 to UBOUND(aFormArray)
sElement = Unescape(aFormArray(i))
sElement = Replace( sElement, "+", " " )
sFormData = sFormData & sElement & vbCrLf
next
%>

<%
Dim sRecipients, sBody, sSubject
sRecipients = Request.Form( sFormDestination )
sBody = sFormData
sSubject = sFormSubject

dim msg
set msg = Server.CreateOBject( "JMail.SMTPMail" )
msg.Logging = true
msg.silent = true
msg.Sender = sFormSender
msg.SenderName = sFormTitle
msg.AddRecipient sFormDestination
msg.Subject = sSubject
msg.Body = sBody
msg.ServerAddress = "IP GOES HERE - REMOVED IT FOR THIS POSTING"


if not msg.Execute then
Response.redirect "http://mydomain.co.uk/sorry.html"
else
Response.redirect "http://mydomain.co.uk/thanks.html"
end if
%>
<!--END CODE FOR SENDFORM.ASP -->

编辑以下对LANKYMART的建议:

Lankymart - Outlook看到文本字符串email=myclient@myclientsdomain.com在中间包含一个@符号,并将整个事物解释为电子邮件地址 - 因此它使整个事情成为可点击的电子邮件链接。如果我的表单可以生成一个非中断空间,Outlook仍会使其成为电子邮件链接,但不包含不需要的前缀。

我无法使用&amp; nbsp - 我不知道如何使用脚本自动插入它(这就是我要问的)。也许你的意思是在我的html表单页面上 - 这不会“贯穿”到已经批量发送的电子邮件。

方括号有相同的问题 - 如果asp表单可能以某种方式自动为我插入这些,电子邮件将到达,Outlook可能会正确显示它 - 让我的表单执行此操作是我需要知道的部分。 (我觉得领先的空间可能会更好,因为这肯定会有效)

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

很简单,只需使用Replace()来识别等号并添加&nbsp(不间断空格)。

sRawForm = Request.Form
aFormArray = Split(sRawForm, "&")
For i = 0 To UBound(aFormArray)
  sElement = Unescape(aFormArray(i))
  sElement = Replace(sElement, "=", "&nbsp;=")
  sElement = Replace(sElement, "+", " " )
  sFormData = sFormData & sElement & vbCrLf
Next

或者使用<;

尝试> Replace()方法
sRawForm = Request.Form
aFormArray = Split(sRawForm, "&")
For i = 0 To UBound(aFormArray)
  sElement = Unescape(aFormArray(i))
  sElement = Replace(sElement, "=", "=<") & ">"
  sElement = Replace(sElement, "+", " " )
  sFormData = sFormData & sElement & vbCrLf
Next 

如果您只是希望表单值不输出name=value,只需遍历Request.Form集合,就像;

Dim element

For Each element In Request.Form
  sFormData = sFormData & element.Value & vbCrLf
Next

这是我首选的迭代Request.Form集合的方法,如果你想要键值对方法name=value,你仍然可以这样做;

Dim element

For Each element In Request.Form
  'Both &nbsp; and < > methods shown but < > preferred.
  'sFormData = sFormData & element.Name & "=&nbsp;" & element.Value & vbCrLf
  sFormData = sFormData & element.Name
  'Only add < > if it's the email element.
  If element.Name = "email" Then
    sFormData = sFormData & "=<" & element.Value & ">" & vbCrLf 
  Else
    sFormData = sFormData & "=" & element.Value & vbCrLf 
  End If
Next

<强>更新 在回复question in the comments时,上述代码应该替换;

sRawForm = request.form
aFormArray = Split(sRawForm, "&")
for i = 0 to UBOUND(aFormArray)
sElement = Unescape(aFormArray(i))
sElement = Replace( sElement, "+", " " )
sFormData = sFormData & sElement & vbCrLf
next

因为你通过Request.Form集合而不是使用Split()来构建一个数组并循环遍历它,所以你不再需要进行所有字符串清理,这是其中一个好处使用For Each方法。