【问题标题】:Append Line Breaks to Email将换行符附加到电子邮件
【发布时间】:2017-11-02 06:57:27
【问题描述】:

所以我编写了一个简单的 C# WinForms 应用程序,它只有一个按钮控件,我将在每个月的 25 日单击它来通知我的用户支付他们的域订阅费用。我会把它做成一个windows服务,以便以后有时间时它可以自动运行。

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

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

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

        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);
        }

更新: 下面附上 HTML Visualizer,当我使用 &lt;/br&gt; 来证明我在代码中得到换行符时。它们在 Outlook 应用程序中显示良好,但在网络上却没有。请在发布解决方案之前尝试复制粘贴代码示例,因为 Environment.NewLine 不能解决问题。

【问题讨论】:

    标签: c# smtp


    【解决方案1】:

    这适用于我的 Gmail 和 Outlook。

      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);
        }
    

    Gmail:

    展望:

    [更新]

    对于你的特殊代码试试这个:

    protected void SendEmail(string _subject, MailAddress _from, List<MailAddress> _cc, List<MailAddress> _bcc = null)
        {
    
            SmtpClient mailClient = new SmtpClient("mail.backlinkdesigns.co.za");
            MailMessage msgMail = new MailMessage(); 
            mailClient.UseDefaultCredentials = false;
            mailClient.Credentials = new NetworkCredential("user@domain.co.za", "password");
            var Text = "Good day" + "<br><br/>" + "I hope this message finds you well.";                
    
            msgMail.From = _from;
            var mailCollection = new MailAddressCollection()
            {
                new MailAddress("user@domain.co.za", "User Surbname"),
                new MailAddress("user@gmail.com", "Name Surname")
            };
    
            foreach (var mailAddress in mailCollection)
            {
                msgMail.To.Add(mailAddress);
            }
    
            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.IsBodyHtml = true;
    
            AlternateView htmlView = AlternateView.CreateAlternateViewFromString(Text, new ContentType("text/html"));
            msgMail.AlternateViews.Add(htmlView);
    
            mailClient.Send(msgMail);
            msgMail.Dispose();
    
    
            MessageBox.Show("Your email has been successfully sent to " + mailCollection.Count + " users show below: " + "\n\n" + mailCollection[0].User + "\n" + mailCollection[1].User + "\n" + "\n\n" + "From: " + _from, "Message Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
        }
    

    【讨论】:

    • 你可以试试这个字符串 html = "The message"; AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, new ContentType("text/html")); msgMail.AlternateViews.Add(htmlView);
    • 您能否格式化您的评论或更新您的解决方案,因为我发现很难弄清楚我应该考虑您评论的哪一部分。
    • 正如我所提到的,在 Outlook 中它可以正常工作,但在网络上却不行。这是在测试了您的解决方案之后。
    • 天哪,今天我着火了:/
    • 这里抛出异常:mailClient.Send(msgMail);
    【解决方案2】:

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

    【讨论】:

    • 它不会添加新行。只是增加了一个空格。 @EdwinChua
    【解决方案3】:

    你可以使用StringBuilder类。

    StringBuilder sb = new StringBuilder();
    
    sb.AppendLine("Your tex");
    

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

    它会起作用的:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多