【问题标题】:email body coming in a single line单行的电子邮件正文
【发布时间】:2018-09-04 18:04:27
【问题描述】:

我正在通过 c# 发送电子邮件。邮件的正文是动态的,即用户在发送邮件之前填写它。问题是正文是单行而不是应有的多行。

using (MailMessage mm = new MailMessage(txtEmail.Text.Trim(), email.Trim()))
{
    try
    {
        mm.CC.Add(txtcc.Text.Trim());
        mm.Subject = txtSubject.Text.Trim();

        mm.Body = txtBody.Text;
        MemoryStream pdf = new MemoryStream(bytes);
        mm.Attachments.Add(new Attachment(pdf, "Report.pdf"));
        mm.IsBodyHtml = true;              
        SmtpClient smtp = new SmtpClient();
        smtp.Host = "smtp.gmail.com";
        smtp.EnableSsl = true;
        NetworkCredential credentials = new NetworkCredential();
        credentials.UserName = txtEmail.Text.Trim();
        credentials.Password = txtPassword.Text.Trim();
        smtp.UseDefaultCredentials = true;
        smtp.Credentials = credentials;
        smtp.Port = 587;
        smtp.Send(mm);
    }
    catch (Exception ex)
    {
        Alert.show1("Could not send the e-mail - error: " + ex.Message, this);
        return;
    }
}

【问题讨论】:

  • 您需要在换行符/r/n 中插入换行符。
  • @AliK 我没听懂你!!在哪里放置类似的中断 mm.Body = txtBody.Text;
  • 使用这个:mm.Body = "First Line <br /> second line";。您可以将\n 替换为<br />
  • @EhsanMohammadi 我有多行,我们有其他方法吗
  • 您将IsBodyHtml 设置为true。那么它是HTML吗?如果是这样,那么它是否在一行中并不重要。客户端将再次将<br /> 渲染到新行。如果它实际上是纯文本,那么您应该以纯文本形式发送或通过用 <br /> 替换换行符来“htmlify”内容(并可能确保它是有效的 html)

标签: c#


【解决方案1】:

如果您不需要 HTML 格式的潜力,您可以避免将电子邮件格式更改为纯文本的问题。这也可以避免用户输入可能被解析为 html 的文本。

mm.IsBodyHtml = false; 

否则你应该将结束行字符更改为html换行符:

mm.IsBodyHtml = true;
mm.Body = mm.Body.Replace(@"\n", "<br />");

如果是 html 格式选项,明智的做法是遵循 Fildor 的评论并为不支持 html 的电子邮件客户端添加纯文本 alternateView

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    相关资源
    最近更新 更多