通过Sharepoint发送到Outlook的电子邮件中未显示换行符

时间:2012-09-27 22:04:43

标签: javascript sharepoint outlook

我正在尝试设置一个临时的Sharepoint页面,该页面显示一个表单,用户可以在其中输入一些文本并通过电子邮件发送。所以我有一个包含表单和提交按钮的页面,它调用一些JS将输入的文本放入Sharepoint的SOAP请求中,然后将其添加到列表中,然后发送包含该信息的电子邮件。到目前为止这么好,而且相当无痛。

我遇到的问题是Outlook忽略了任何属于输入文本的换行符。它们不被任何东西剥离,因为我可以使用“查看源”选项并在记事本中正常查看它们。我认为这是因为Outlook试图将消息显示为HTML并且不知道如何处理它们。通常,我只是抛出一些JS,用\r\n标签替换<br />的所有实例,但是将它放入SOAP请求只会导致标记在被添加到标记之前被删除。 Sharepoint列表。

我尝试过的其他事情是

  • 在每个新行的开头添加一对空格(无更改)
  • 为每个换行符添加了第二组\r\n(无更改)
  • \r\n的所有实例替换为%0D%0A(显示为文字)
  • \r\n的所有实例替换为\par(实际使用\\par,以逃避第一个反斜杠)。 (显示为文字)
  • \t附加到\r\n的所有实例。 (没有变化)
  • Prepended'。'到\r\n的所有实例。 (显示的时间段,但没有换行)

我正在使用Outlook 2007,Sharepoint 2007和Internet Explorer 8。

我读过这些问题:

这是我正在使用的JS函数来编辑文本,以及创建和POST SOAP请求。它目前设置为在每个换行符之前放置一段时间:

    function createAndPostSOAP(siteURL, listName)
    {
        var moreText = $("#MoreText")[0].innerText;

        var linebreakCount = moreText.match(/\r\n/g);

        moreText= "  " + moreText;
        for (var count = linebreakCount.length; count >= 0; count--)
        {
            moreText = moreText.replace("\r\n", ".[replace]");
        }

        while(moreText.indexOf("[replace]") != -1)
        {
            moreText = moreText.replace("[replace]", "\r\n");
        }

        var batch = 
            "<Batch OnError='Continue'> \
                    <Method ID='1' Cmd='New'> \
                        <Field Name='Text'>" + $("Text")[0].value + "</Field> \
                        <Field Name='MoreText'>" + moreText + "</Field> \
                    </Method> \
             </Batch>";

         var soapEnv =
                "<?xml version='1.0' encoding='utf-8'?> \
            <soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' \
                xmlns:xsd='http://www.w3.org/2001/XMLSchema' \
                xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> \
               <soap:Body> \
                <UpdateListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                  <listName>" + listName + "</listName> \
                  <updates> \
                    " + batch + "</updates> \
                </UpdateListItems> \
              </soap:Body> \
            </soap:Envelope>";

        $.ajax({
        url: siteURL + "/_vti_bin/lists.asmx",
        beforeSend: function(xhr) {
            xhr.setRequestHeader    ("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");
        },
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        contentType: "text/xml; charset=utf-8"
        }); 
    window.location='starting_page.htm';
    }

我主要是从Javascript端攻击这个,因为我知道这比Sharepoint更好,但是在Sharepoint 2007中有一种方法让脚本在将数据添加到<br />后将其更改为{{1}}专栏?或者我在Javascript中错过了一个角度?

1 个答案:

答案 0 :(得分:1)

您需要在代码中对所有HTML标记进行编码。含义为

&amp; → & (ampersand)
&lt; → < (less-than sign)
&gt; → > (greater-than sign)
&quot; → " (quotation mark)
&apos; → ' (apostrophe)


请尝试以下代码:

String Input = "adding this text <br/> this in next line <>";
String Output = Server.HtmlEncode(Input);
//
  

如果需要

Output = Output.Replace("\r\n", "<br />");