【问题标题】:ASP Classic CDOSYS Email via HTMLBody format通过 HTMLBody 格式的 ASP 经典 CDOSYS 电子邮件
【发布时间】:2017-10-22 02:43:03
【问题描述】:

我在使用 HTMLBody 格式的 ASP Classic 中使用 CDOSYS 消息系统发送电子邮件时遇到问题。它似乎有字符限制,并且在发送电子邮件时,它会在电子邮件底部附近切断消息。起初,我以为在写完整封电子邮件之前就发送了消息,但经过一些故障排除和研究,使用 HTMLBody 时存在某种 CDOSys 消息字符限制。我的问题是,有没有办法超越字符限制或绕过限制?这仅适用于 HTMLBODY。

编辑:“重复”标志对我没有帮助。这不是截断问题,而是 HTMLBody 限制的问题,这些限制会阻止冗长的消息在消息中完全发送。我检查了那篇文章,这不是我想要的答案。这个帖子上的回答足以回答我的问题。谢谢大家。

这是我的代码:

         Set myMail=CreateObject("CDO.Message")


                        HTML = HTML & "<html>"
                        HTML = HTML & "<body>"
                        HTML = HTML & "<font face='calibri'>"

                        HTML = HTML & "<img src='http://" & SupportTagURLWebPath & "/images/SkypeEmailHeader.png'>"
                        HTML = HTML & "<br><Br>"

                        HTML = HTML & "<font face='calibri'>"                   
                        HTML = HTML & "<b>To " & Request.Form("SkypeTemplateName") & ":</b>"
                        HTML = HTML & "<br><br>"

                        HTML = HTML & "Thank you for contacting the Bank of America Service Desk. We're committed to providing seamless support in the moments that matter."
                        HTML = HTML & "<br><br>"                            
                        HTML = HTML & "We heard your concerns with Skype for Business audio/video, and recommend using approved Skype for Business devices to resolve the issue."
                        HTML = HTML & "<br><br>"
                        HTML = HTML & "<h4><font color='red'>What do I need to do?</font></h4>"

                        HTML = HTML & "<div style='background-color: #FFF8DC;'>"
                        HTML = HTML & "1. Visit the <a href='http://u.go/pchk'>Skype for Business Peripheral Checker</a> & complete the form.<br>"
                        HTML = HTML & "<img src='http://" &SupportTagURLWebPath & "/images/SkypeEmailbody.png'><br>"
                        HTML = HTML & "4. Once approved, your new device(s) will be shipped to you. To get started, visit the <a href='http://u.go/tIxvB5'>Skype for Business page</a> and select <i>Setup your equipment</i> tab."                     
                        HTML = HTML & "</div>"
                        HTML = HTML & "<br><br>"

                        HTML = HTML & "<br>"
                        HTML = HTML & "If you still encounter Skype for Business audio/visual issues with your new device(s), please <a href='http://u.go/7I76vm'>submit a web ticket</a> and one of our expert Bank of America Service Desk employees will reach out to you."
                        HTML = HTML & "Thank you,"
                        HTML = HTML & "<br>"
                        HTML = HTML & "Premium Service Desk"            


                        HTML = HTML & "<br><Br>"
                        HTML = HTML & "<img src='http://" & SupportTagURLWebPath & "/images/SkypeEmailFooter.png'>"     

                        HTML = HTML & "</font>"                 
                        HTML = HTML & "</body>"
                        HTML = HTML & "</html>" 



     myMail.Subject= "Skype for Business audio/visual experience"
     myMail.From=EMAILADDRESS
     myMail.To=Request.Form("SkypeTemplateEmail")
     'mymail.CC= Request.Form("displayemail")
     myMail.BCC="psd.wmwhc@bao.com"
     myMail.ReplyTo="Do Not Reply"
     'myMail.TextBody="This is a message."
     myMail.Configuration.Fields.Item _
     ("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
     'Name or IP of remote SMTP server
     myMail.Configuration.Fields.Item _
     ("http://schemas.microsoft.com/cdo/configuration/smtpserver")="amta3dns.bo.com"
     'Server port
     myMail.Configuration.Fields.Item _
     ("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25 
    myMail.Configuration.Fields.Update


    'myMail.TextBody= Request.Form("genfeedback") 
    myMail.HTMLBody=HTML

    myMail.Send
     set myMail=nothing 

【问题讨论】:

  • 如果您在.Send 之前执行Response.Write(Server.HTMLEncode(HTML)),您会看到整个消息吗?
  • 感谢您的回复。我刚试过这个,它甚至没有那么远。仍然被切断。

标签: asp-classic cdo.message


【解决方案1】:

这是一个行长问题。如果没有 crlf,您会在 998 个字符处超出最大长度。最好的办法是编写一个函数,将内容拆分为中间字符串,避免使用 html 标签。 HTML 文本,例如在段落中,忽略换行符。

RFC

本标准对数量有两个限制 一行中的字符。每行字符必须不超过 998 个字符,并且应该不超过 78 个字符,不包括 CRLF。

998 个字符的限制是由于许多实现中的限制 发送、接收或存储 Internet Message Format 消息 根本无法在一行中处理超过 998 个字符。接收 实现可以很好地处理任意大的数字 为了稳健起见,一行中的字符数。然而,有这么 许多实现(符合运输 [RFC2821] 的要求)不接受包含更多 每行超过 1000 个字符,包括 CR 和 LF,这很重要 实现不创建此类消息。

比较保守的78个字符推荐是为了容纳 显示这些的用户界面的许多实现 可能会截断或灾难性地包装显示的消息 每行超过 78 个字符,尽管这样的事实 实现不符合这个意图 规范(以及 [RFC2821] 的规范,如果它们实际上导致 信息丢失)。同样,即使设置了这个限制 消息,它依赖于显示消息的实现

感谢emailonacid 的博客提供指针。

【讨论】:

  • 感谢您提供此信息。这绝对是比每 3-5 行添加 vbCrLf 更好的方法,这在我看来很草率但有效。我会试一试,看看结果如何。感谢您的帮助!
【解决方案2】:

我能够通过另一个线程进行谷歌搜索来解决这个问题。如果您为电子邮件的每 3-5 行放置以下行,它似乎会“重置”或将数量限制循环回到开头,而不会更改电子邮件的格式。我不确定这是否是处理它的正确方法,但它似乎适用于我今天创建的许多消息,这些消息具有相当长的消息,否则在发送消息时会被切断。我希望这可以帮助其他人解决这个问题。

HTML = HTML & vbCrLf

【讨论】:

    【解决方案3】:

    我没有在脚本中插入消息正文并使用大量 HTML = HTML &“文本在此处”,而是创建了一个实际的 HTML 文件并将每一行读入 HTMLBody:

    Set myFSO=Server.CreateObject("Scripting.FileSystemObject")
    
    ' Read Email Template File
    
    Set myFile=myFSO.OpenTextFile(Server.MapPath("..\msg\"+Request.Form("Template")+".html"), 1)
    EmailBodyTemplate=""
    Do While myFile.AtEndOfStream=False
      EmailBodyTemplate=EmailBodyTemplate&myFile.ReadLine
    Loop
    myFile.Close
    
    Set myFile=Nothing
    Set myFSO=Nothing
    
    
    myMail.HTMLBody=EmailBodyTemplate
    

    这不仅会在从文件中读取的每一行的末尾自动放置一个 vbCrLf,而且还会使函数具有通用性,以便您可以通过更改模板名称发送任何您想要的电子邮件。

    【讨论】:

    • 附加的警告是,您可以在浏览器中打开 HTML 电子邮件模板并查看其外观。
    • 此外,通过在 HTML 模板文件中使用占位符,如 [FirstName] 等,您可以使用以下代码轻松自定义模板:EmailBodyTemplate=Replace(EmailBodyTemplate,"[FirstName]", Request.Form("FirstName"))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多