发送邮件时保留文本区域的换行符

Posted

技术标签:

【中文标题】发送邮件时保留文本区域的换行符【英文标题】:Preserving line breaks from text-area when sending mail 【发布时间】:2021-12-03 14:24:37 【问题描述】:

我正在尝试创建一个网站,您可以在其中编写和自定义邮件然后发送。我有一个问题,文本区域的换行符不保留。当我用 c# 发送邮件时,没有换行符(抱歉我的英语不好,不是我的母语)。

这是我的代码:

C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Web_Mail_Manager

    public partial class WebForm1 : System.Web.UI.Page
    
        protected void Page_Load(object sender, EventArgs e)
        
        

        protected void Button1_Click(object sender, EventArgs e)
        
            string YourUsername = "(Just gonna cover my Email)";
            string YourPassword = "(Just gonna cover my password)";

            string Destination = DestinationAdress.Value;
            string YourMessageSubject = MailSubject.Value;
            string YourMessageBody = MailBody.Value;

            try
            
                using (SmtpClient client = new SmtpClient("smtp.gmail.com", 587))
                
                    client.EnableSsl = true;
                    client.DeliveryMethod = SmtpDeliveryMethod.Network;
                    client.UseDefaultCredentials = false;
                    client.Credentials = new NetworkCredential(YourUsername, YourPassword);
                    System.Net.Mail.MailMessage msgObj = new System.Net.Mail.MailMessage();
                    msgObj.To.Add(Destination);
                    msgObj.From = new MailAddress(YourUsername);
                    msgObj.Subject = YourMessageSubject;
                    msgObj.Body = YourMessageBody;
                    msgObj.IsBodyhtml = true;
                    client.Send(msgObj);
                
            
            catch (Exception)
            
            
        
    

ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Web_Mail_Manager.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet" />
    <style>
        body 
            background-color: lightgray;
            font-family: 'Poppins', sans-serif;
        

        .mailPreview 
            background-color: white;
            position: absolute;
            top: 10%;
            left: 50%;
            transform: translate(-50%);
            width: 45vw;
            height: fit-content;
            padding: 15px;
        

        #MailBody 
            white-space: pre-wrap;
        
        #MailbodyContent 
            white-space: pre-line;
        
        #MailBody 
            white-space: pre-line;
        
    </style>
    <script>
        function changeTo(val) 
            document.getElementById("toMail").innerHTML = val;
        

        function changeSubject(val) 
            document.getElementById("subject").innerHTML = val;
        

        function changeBody(val) 
            var text = val;
            document.getElementById("MailbodyContent").textContent = text;
            document.getElementById("MailbodyContent").innerHTML.replace(/\n/g, '<br>\n');
        
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <input id="DestinationAdress" oninput="changeTo(value)" runat="server" type="text" placeholder="Recievers E-mail adress" /><br />
        <input id="MailSubject" oninput="changeSubject(value)" runat="server" type="text" placeholder="Subject" /><br />
        <textarea id="MailBody" oninput="changeBody(value)" runat="server" cols="40" rows="5" placeholder="Content"></textarea><br />
        <br />

        <div class="mailPreview" id="mailPreview">
            <h3>To: <span id="toMail"></span></h3>
            <h3>From: (Just gonna cover my email)</h3>
            <br />
            <h3>Subject: <span id="subject"></span></h3>
            <br />
            <h3>Content:</h3>
            <h4 runat="server" id="MailbodyContent"></h4>
            <asp:HiddenField ID="HiddenField1" runat="server" />
        </div>
        
        <asp:Button ID="Button1" runat="server" Text="Send mail!" OnClick="Button1_Click" />
    </form>
</body>
</html>

任何帮助将不胜感激!

【问题讨论】:

您发送的是 HTML 电子邮件吗?因为 HTML 会忽略换行符,你需要用 标签替换它。 @mboldt 我正在使用 c# 发送邮件。我尝试将空格更改为 标签,但如果有意义,c# 不会使用这些标签。 如果您将 IsBodyHtml 设置为 false?然后是常规文本,使用常规换行符 【参考方案1】:

由于您要发送 HTML 电子邮件 (msgObj.IsBodyHtml = true;),您需要用 &lt;br /&gt; 标记替换换行符。

换行 string YourMessageBody = MailBody.Value;

string YourMessageBody = MailBody.Value.Replace(Environment.NewLine, "&lt;br /&gt;");

【讨论】:

但我使用 C# 发送邮件。我只是从 HTML 输入中获取内容。我可以在 html 页面上显示带有换行符的输入内容,但是 c# 代码不会选择换行符 当您在表单下方显示邮件正文时,您在 changeBody 方法中将所有换行符替换为 标记。这就是为什么它显示得很好。在您的代码示例中,没有替换 c# 代码中的换行符

以上是关于发送邮件时保留文本区域的换行符的主要内容,如果未能解决你的问题,请参考以下文章

如何用换行符回显文本区域的输入?

使用 php 读取文件时删除文本区域中的换行符

使用 Ruby on Rails 在文本区域中保留换行符

在 oracle apex 中通过电子邮件发送富文本字段

如何在表格中显示文本区域的换行符?

从文本区域获取文本时如何保留换行符?