繁体   English   中英

ASP电子邮件表单-尝试插入前导空格

[英]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()来确定等号并添加&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

更新:为回应评论中问题,以上代码应替换;

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM