【问题标题】:How do you get line breaks to show up in web email message using MVC smtp message body?如何使用 MVC smtp 消息正文在 Web 电子邮件消息中显示换行符?
【发布时间】:2015-10-27 19:57:33
【问题描述】:

我要么疯了,要么之前没有我能理解的答案(这可能发生)。

Gmail 在电子邮件正文中显示此内容(在 devbox 上使用 IIS,因此链接中使用“localhost”):

请点击此链接确认您的帐户:http://localhost:53891/Account/ConfirmEmail?userId=526b54e1-2275-4bb0-bc8347289f413a69&code=ErXrRF8f%2BPZFK43WxwxQJjfT7%2BIIgd6HhglTNq8btRDdRZwbBxgwtmtuGhBDozgr9vyy2cy%2Bs0yweATeY4Hgv6BmjtOK7fJ7S2rS%2B8ShjhILM7kXZNqMBK4sTGSHoSozURZRgfTQcSB2OBgTFk8v%2BvlslF5Xsilz %2Bd0OwnJz6KwOqNzzMrB6DgUyjUAIOJTt 或者点击并复制浏览器中的链接。

当我单击它并注册我时它会起作用,但我似乎无法格式化它,因此它有中断/换行符。魔鬼在细节中哈哈!

这是我发送电子邮件的 MVC IdentityConfig.cs:

               string html = HttpUtility.HtmlEncode("Please confirm your account by clicking this link: " + 

Environment.NewLine + Environment.NewLine + message.Body);
               html += HttpUtility.HtmlEncode(Environment.NewLine);
               html += HttpUtility.HtmlEncode(Environment.NewLine);
               html += HttpUtility.HtmlEncode(Environment.NewLine);
               html += HttpUtility.HtmlEncode("Or click on and copy the link in your browser.");
               html.Replace(Environment.NewLine, "<br />");

【问题讨论】:

    标签: html asp.net-mvc email smtp line-breaks


    【解决方案1】:

    您没有提供带有替换的 html。

    html = html.Replace(Environment.NewLine, "<br />");
    

    对吗?

    编辑:更多示例 - https://dotnetfiddle.net/slm90h

        string html = "";
        html += Environment.NewLine;
        html += Environment.NewLine;
        html += Environment.NewLine;
        html += Environment.NewLine;
        html += Environment.NewLine;
        html.Replace(Environment.NewLine, "<br />");
        Console.WriteLine(html);
        Console.WriteLine("^---- Doesn't work");
        html = html.Replace(Environment.NewLine, "<br />");
        Console.WriteLine(html);
        Console.WriteLine("^----- Does work");
    

    【讨论】:

    • 嗯。不确定你在说什么。 html 是一个字符串变量,应该用替换填充。除非 Environment.NewLine 不是 html。 . 。你有什么建议吗?创建消息时(第二个代码块)没有人看到它。所以我可能没有为 C# 代码使用正确的换行符语法。感谢您这么快回答。
    • 替换方法返回字符串。如果你没有对返回的数据做任何事情,那么它什么也不会做。
    • 不确定你在用 .NET Fiddle 做什么。我在电子邮件的消息正文中使用 html 字符串,并将其发布在问题的第一个代码块中。没有换行符,或者换行符的语法错误。没有什么,只有纯文本。
    • 您在顶部的数据仍然是错误的。 html.Replace(Environment.NewLine, "
      ");不会更新您的 html 变量。它只会返回一个用
      替换 .NewLine 的字符串。我的 .net 小提琴首先显示您的代码(html.Replace(xxx) 本身),然后显示我在哪里执行 html = html.Replace(xxx)。您必须将方法的结果应用于变量,否则它就会丢失。
    • 我已经知道什么都没有出现。我需要一个解决方案,认为我必须对其进行编码。
    【解决方案2】:

    你是否设置了 IsBodyHtml = true; ?

    【讨论】:

    • 是的。我明白你的问题。有2种配置:text和html。
    【解决方案3】:

    叹息。这比我想象的要简单。并且不需要 htmlEncode,因为 html 位于电子邮件页面中,而不是网页中。 (我认为这是有道理的)。 我把所有的 Environment.Newline 和 htmlEncode 都去掉了,然后放了一个 html break。

       string html = "Please confirm your account by clicking this link: " + "<br /><br />" + message.Body;
       html += "<br /><br /><br />";
       html += "Or click on and copy the link in your browser.";
    

    这是电子邮件正文中的内容(所有中断都发生了):

    请点击此链接确认您的帐户:

    http://localhost:xxxxx/Account/ConfirmEmail?userId=c56dfcd7-e63e-4a08-8c38-16419d8ff1c9&code=WgoxvI%2FEdCUjMgJwnXgZ3siP1vKSE1%2BlJ5SCX%2FjL3GPwk7kmycRrdVeNDygl65gQ3HuOlmid1iYKNaX6pRhBTNuBDk0dMM7w%2F%2BOnC%2BkE1vXHRDV1cv9Fcifk4i51ZXQef9%2BoKVfCPeqjYZoDPnQBsxZzYJEiVSSn8NvEBdjYG%2FpE1CM7QeShH9oDB2XJ1nFC

    或者在浏览器中点击并复制链接。

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 2015-06-17
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多