[英]asp email form - trying to insert leading space
我在网站上使用此脚本来收集访问者的查询表单信息。 我的一位客户报告说,当他收到生成的电子邮件时,Outlook正在操纵该行:
email=myclient@myclientsdomain.com
...包括前缀“ email =“,就好像这是电子邮件的一部分一样! (愚蠢的Outlook!)
我需要更改代码,以便在电子邮件地址之前立即插入一个前导空格,使其看起来像这样:
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-Outlooks看到文本字符串email=myclient@myclientsdomain.com在中间包含一个@符号,并将整个内容解释为电子邮件地址-这样,它使整个内容成为可单击的电子邮件链接。 如果我的表单可以产生一个不间断的空格,Outlook仍将创建该电子邮件链接,但不包含不需要的前缀。
我不能使用&nbsp-我不知道如何使用脚本自动插入它(这是我要的)。 也许您的意思是在我的html表单页面上-这不会“传递”到已批量发送的电子邮件中。
方括号具有相同的问题-如果asp表单可以以某种方式自动为我插入它们,则电子邮件将到达,Outlook可能会正确显示它们-使我的表单执行此操作是我需要知道的部分。 (我认为领先的空间可能会更好,因为这肯定会起作用)
还有其他想法吗?
这很简单,只需使用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
或者尝试使用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 and < > methods shown but < > preferred.
'sFormData = sFormData & element.Name & "= " & 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
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()
来构建Array并遍历该数组,所以您不必再进行所有字符串清理,这就是使用For Each
方法的好处之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.