2017-06-01 86 views
0

因此,我編寫了一個簡單的C#WinForms應用程序,它只有一個按鈕控件,我將在每個月的第25天點擊以通知我的用戶支付其域訂閱。我會把它變成一個windows服務,這樣它就可以在我有空的時候自動運行。向電子郵件追加行間隔

我從@Tartori在此SO帖子中獲得了我的實現:Sending emails from a windows forms application,它按照我想要的方式工作。

一切都很好,但現在的問題是,當我發送測試郵件到一個電子郵件地址,我有相同的帳戶設置的Outlook是honkey dory,但現在當我通過網絡使用Gmail查看相同的測試郵件它不換行追加按照下面兩張截圖:

enter image description here enter image description here

請告知我怎樣才能克服這一點。我的代碼如下:

 private void btnSendMail_Click(object sender, EventArgs e) 
     { 
      MailAddress from = new MailAddress("[email protected]", "Name Surname"); 

      List<MailAddress> cc = new List<MailAddress>(); 
      cc.Add(new MailAddress("[email protected]", "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("[email protected]", "User Surbname"); 
      MailAddress gmailAccount = new MailAddress("[email protected]", "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); 
     } 

UPDATE: 附在下面是HTML展臺時,我使用</br>證明我收到的代碼換行符。他們在Outlook應用程序中顯示正常,但在網絡上顯示不正確。請在發佈解決方案之前嘗試複製粘貼代碼示例,因爲Environment.NewLine不會執行此操作。

enter image description here

回答

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:

Displayed in Gmail

展望:

Displayed in Outlook 2016

[UPDATE]

爲了您spesific代碼試試這個:

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("[email protected]", "password"); 
     var Text = "Good day" + "<br><br/>" + "I hope this message finds you well.";     

     msgMail.From = _from; 
     var mailCollection = new MailAddressCollection() 
     { 
      new MailAddress("[email protected]", "User Surbname"), 
      new MailAddress("[email protected]", "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); 
    } 
+0

它已經設置爲true,你可以在我的代碼片段中看到。 –

+0

你可以試試這個 string html =「The message」; AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html,new ContentType(「text/html」)); msgMail.AlternateViews.Add(htmlView); – Sondre

+0

您是否可以格式化您的評論,或者更新您的解決方案,因爲我很難弄清楚您應該考慮哪些部分的評論。 –

0

@Harold_Finch您可以只使用Environment.NewLine屬性,而不是< br>。這將插入爲當前環境定義的換行符字符串。

+0

它不添加一個新行。只是增加了一個空間。 @EdwinChua –

0

您可以使用StringBuilder類。

StringBuilder sb = new StringBuilder();

sb.AppendLine(「Your tex」); OR sb.AppendFormat( 「你的文字\ n」)

將工作:)