【问题标题】:Mail function in ASP CLASSIC sends literally html tags in the bodyASP CLASSIC 中的邮件功能在正文中按字面意思发送 html 标签
【发布时间】:2026-01-10 22:45:02
【问题描述】:

几周前,我在我的 ASP Classic 代码中实现了一个邮件功能,但它会产生一些奇怪的标记/样式错误。

当使用 Mail 功能发送邮件时,它有时会在语法正确的情况下按字面输出 html 标记。

html 输出见下图:

正如您在下图中所见,字体标签按字面意思显示,而它与其他列完全相同,可以正确显示。奇怪的是,它有时会显示错误的字体,然后是一些随机的<TR> 标签,然后是 1 个未显示的边框或被弄乱的href(单击 href 会生成一些随机 % 20 个字符,当将鼠标悬停在它上面时,它会显示应有的 href)。

这是某种 ASP 经典邮件功能的错误还是..?似乎只有一个 html 标记按字面意思显示,而且从不超过 1 个。有时它也根本不生成文字标记(因此它输出正确)。

邮件功能如下:

Function SendMail(sBody,sEmail)

            set mail=server.createobject("Persits.MailSender")
            Mail.Host = "spamfilter.myWebsite.com" ' Required
            Mail.Port = 587 ' Optional. Port is 25 by default 

            Mail.From = "support@mywebsite.com"

            Mail.FromName = "My Name"

            sEmail = Uploader.Form("EMail")

            Mail.AddAddress sEmail

            Mail.Subject = "Tickets: " & FormSubject
            Mail.Body = sBody
            Mail.IsHTML = True 
            Mail.send

End Function

邮件正文是这样生成的:

sBody="<font face=""Verdana, Arial"" size=2 color=""black"">Geachte " & FormNaam & ",<br><br>"
                sBody=sBody & "Recentelijk heeft u een ticket aangemaakt betreffende '<b>" & FormSubject &  "</b>'.<br>"
                sBody=sBody & "Wij zullen proberen uw ticket zo snel mogelijk te behandelen. Informatie over uw ticket kunt u hieronder terug vinden." & "<br><br>"

                sBody=sBody &  "<br>"

                sBody=sBody &  "<table>"
                sBody=sBody &  "<tr><th style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""#000080"">Verstuur datum</th><th style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""#000080"">Voor afdeling</th><th style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""#000080"">Soort ticket</th><th style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""#000080"">Onderwerp</th><th style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""#000080"">Ticket beschrijving</th></tr>"

                sBody=sBody &  "<tr bgcolor=""#BEC0F7"">"

                sBody=sBody & "<td style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""black"">"
                sBody=sBody &  day(sToday)&"-" & month(sToday) & "-" & year(sToday) 
                sBody=sBody & "</td>"

                sBody=sBody & "<td style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""black"">"
                sBody=sBody & FormAutomatiseringClean
                sBody=sBody & "</td>"

                sBody=sBody & "<td style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""black"">"
                sBody=sBody & FormProbleemClean
                sBody=sBody & "</td>"

                sBody=sBody & "<td style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""black"">"
                sBody=sBody & FormOnderwerp
                sBody=sBody & "</td>"

                sBody=sBody & "<td style=""border: 1px solid black;""><font face=""Verdana, Arial"" size=2 color=""black"">"
                sBody=sBody & FormBeschrijving
                sBody=sBody & "</td></tr>"

                sBody=sBody & "</table><br>"

                    Randomize
                    intLength = 100000
                    intRandom = CInt((Rnd * 10000)Mod intLength) + 1

                'SELECT LAST ID OR ID OF THE SENDER/SUBJECT/SOMETHING UNIQUE
                sBody=sBody & "De status van uw ingediende ticket kunt u bijhouden via de onderstaande knop:<br><br>"
                sBody=sBody & "<table cellspacing=""0"" cellpadding=""0""><tr>" 
                sBody=sBody & "<td align=""center"" width=""200"" height=""35"" bgcolor=""#000091"" style=""-webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; color: #ffffff; display: block;"">"
                sBody=sBody & "<a href=""http://mywebsite/ticket.asp?type=ticket&ticketid="&TicketID&"&validatie="&FormRecode&""" style=""font-size:16px; font-weight: bold; font-family: Helvetica, Arial, sans-serif; text-decoration: none; line-height:40px; width:100%; display:inline-block""><span style=""color: #FFFFFF"">Ticket Status</span></a><br><br>"
                sBody=sBody & "</td></tr> </table><br>"
                sBody=sBody & "Indien de knop het niet doet kunt u de volgende link volgen: http://mywebsite/ticket.asp?type=ticket&ticketid="&TicketID&"&validatie="&FormRecode&"<br><br>"

                sBody=sBody & "With kind regards," & "<br><br>"

                sBody=sBody & "My Company B.V." & "<br><br>"
                sBody=sBody & "<font face=""Calibri, Arial"" style=""font-size:10pt;"" color=""black""><i>My company BV</i>" & "<br>"
                sBody=sBody & "<font face=""Calibri, Arial"" style=""font-size:10pt;"" color=""gray"">GSome adress 22 | Some postal zip | Place" & "<br>"
                sBody=sBody & "<font face=""Calibri, Arial"" style=""font-size:10pt;"" color=""gray"">Some text | Percel number 100" & "<br>"
                sBody=sBody & "<font face=""Calibri, Arial"" style=""font-size:10pt;"" color=""black"">T: " & "<font face=""Verdana, Arial"" size=1 color=""gray"">0416-322792" & "<br>"
                sBody=sBody & "<font face=""Calibri, Arial"" style=""font-size:10pt;"" color=""black"">F: " & "<font face=""Verdana, Arial"" size=1 color=""gray"">0416-322582" & "<br>"
                sBody=sBody & "<font face=""Calibri, Arial"" style=""font-size:10pt;"" color=""black"">E: support@mysite.com" & "<br>"
                sBody=sBody & "<font face=""Calibri, Arial"" style=""font-size:10pt;"" color=""black"">W: www.mysite.com" & "<br><br>"

                err=SendMail(sBody,sEmail)

【问题讨论】:

  • Persits 邮件库使用的任何编码方法都可能存在某种边界问题,请尝试添加一些空格,例如部分之间的 vbCRLF。是否有任何数据包含任何 如果是,请确保将它们转义为 < >
  • 这很简单,您没有正确终止标签,因此Persits.MailSender 只是将其视为文本。没有一个&lt;font&gt; 标记以&lt;/font&gt; 正确终止。您还没有构建有效的 HTML 文档(没有 &lt;html&gt;&lt;body&gt; 标记)
  • ASPEmail 上的所有示例都显示了完全限定的 HTML 结构,因此我将从验证 HTML 开始。
  • 谢谢大家。使用反馈更新了结构,它似乎(目前)正在工作。
  • “这是某种 ASP 经典邮件功能错误” - 如果您不知道,Persits Mailsender 是您必须购买和安装的第三方组件。如果您需要从其他服务器发送电子邮件,请查看 CDO。

标签: html email asp-classic


【解决方案1】:

根据使用Persits.MailSender 的经验(作为@Johnpointed out,这是一个第3 方组件,默认情况下不可用,内置替代方案是CDO)我一直发现如果 HTML 的结构不正确(即缺少标签终止符),结果将不会总是如预期的那样。

在这种特定情况下,它是一个 HTML sn-p 不是真正的文档,因为它没有正确定义;

正文>