将换行符添加到电子邮件中

时间:2017-06-01 08:24:07

标签: c# smtp

所以我编写了一个简单的C#WinForms应用程序,它只有一个按钮控件,我会在每个月的第25天点击,以通知我的用户支付他们的域名订阅。我将它变成一个Windows服务,以便在我有空的时候可以在以后的阶段自动运行。

我从@Tartori获得了这个SO帖子的实现:Sending emails from a windows forms application它按照我想要的方式工作。

一切都很好但现在的问题是,当我将测试邮件发送到一个电子邮件地址时,我在Outlook上设置了相同的帐户,这是一个很好的例子,但现在当我通过网络使用Gmail查看相同的测试邮件时不会按照以下两个屏幕截图附加换行符:

enter image description here enter image description here

请告诉我如何克服这个问题。我的代码如下:

        private void btnSendMail_Click(object sender, EventArgs e)
        {
            MailAddress from = new MailAddress("user@domain.co.za", "Name Surname");

            List<MailAddress> cc = new List<MailAddress>();
            cc.Add(new MailAddress("user2@domain.co.za", "Name2 Surname2"));
            string subjectText = "Friendly Domain Payment Reminder: " + DateTime.Now.ToShortDateString();
            SendEmail(subjectText, from, cc);
        }



        protected void SendEmail(string _subject, MailAddress _from, List<MailAddress> _cc, List<MailAddress> _bcc = null)
        {
            string Text = "";
            SmtpClient mailClient = new SmtpClient("mail.backlinkdesigns.co.za");
            MailMessage msgMail;
            Text = "Good day" + "</br>" + "</br>" + "I hope this message finds you well."                 msgMail = new MailMessage();
            msgMail.From = _from;
            MailAddress outlook= new MailAddress("user@domain.co.za", "User Surbname");
            MailAddress gmailAccount = new MailAddress("user@gmail.com", "Name Surname");
            msgMail.To.Add(outlook);
            msgMail.To.Add(gmailAccount );

            foreach (MailAddress addr in _cc)
            {
                msgMail.CC.Add(addr);
            }
            if (_bcc != null)
            {
                foreach (MailAddress addr in _bcc)
                {
                    msgMail.Bcc.Add(addr);
                }
            }
            msgMail.Subject = _subject;
            msgMail.Body = Text;
            msgMail.IsBodyHtml = true;
            mailClient.Send(msgMail);
            msgMail.Dispose();

            List<MailAddress> countVar = new List<MailAddress>();
            countVar.Add(outlook);
            countVar.Add(gmailAccount );
            var temp = countVar.Count;
            MessageBox.Show("Your email has been successfully sent to " + temp + " users show below: " + "\n\n" + outlook+ "\n" + gmailAccount + "\n" + "\n\n" + "From: " + _from, "Message Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
        }

更新 当我使用</br>来证明我在代码中获得换行符时,下面附带的是HTML Visualizer。它们在Outlook应用程序中显示得很好但在网络上却没有。请在发布解决方案之前尝试复制粘贴代码示例,然后查看环境.NewLine不会这样做。

enter image description here

3 个答案:

答案 0 :(得分:1)

这适用于我的Gmail和Outlook。

style

<强>的Gmail:

Displayed in Gmail

<强>展望:

Displayed in Outlook 2016

<强> [UPDATE]

对于你的特定代码,试试这个:

  public void SendMail()
    {            

        SmtpClient smtpClient = new SmtpClient(<CLIENT>);
        MailMessage message = new MailMessage(<FROM>, <TO>);

        message.Subject = "Test";
        message.IsBodyHtml = true;

        string html = "<p>hey</p><p></p><p>hey 2</p><p>hey 3</p>";
        AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, new ContentType("text/html"));

        message.AlternateViews.Add(htmlView);

        smtpClient.Send(message);
    }

答案 1 :(得分:0)

@Harold_Finch您可以使用Environment.NewLine属性而不是&lt; br&gt;。这将插入为当前环境定义的换行字符串。

答案 2 :(得分:0)

您可以使用StringBuilder课程。

StringBuilder sb = new StringBuilder();

sb.AppendLine("Your tex");

OR

sb.AppendFormat("your text \n");

它会起作用:))