2017-04-26 245 views
1

我试图根据FormView中的标签生成一些基本格式的电子邮件。我将使用Process.Start("mailto:...而不是System.Net.Mail的路由,以便在默认的电子邮件客户端中打开电子邮件,以便用户有机会编辑To:CC:等,而不用创建一个新窗体来处理该窗体。我有以下代码隐藏来处理“电子邮件表单”按钮,通过电子邮件发送网络表单的URL。为HTML电子邮件正文添加换行符字符串

protected void fvBF_ItemCommand(object sender, FormViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Email") 
    { 
     Label lblBFID = (Label)fvBookingForm.FindControl("lblBFID"); 
     Label lblProjectID = (Label)fvBookingForm.FindControl("lblProjectNum"); 
     Label lblProjectName = (Label)fvBookingForm.FindControl("lblProjectName"); 
     Label lblReleaseName = (Label)fvBookingForm.FindControl("lblReleaseName"); 
     Label lblPMName = (Label)fvBookingForm.FindControl("lblPM"); 

     String strReleaseName = String.IsNullOrEmpty(lblReleaseName.Text) ? "[Description]" : lblReleaseName.Text; 

     String pmFirst = lblPMName.Text.ToString().Split()[0]; 
     String pmLast = lblPMName.Text.ToString().Split()[1]; 

     String strSubject = "BF " + lblBFID.Text + " - " + lblProjectName.Text + " - Release " + strReleaseName; 
     String strBody = "A Booking Form for Project #"+ lblProjectID.Text + " - " + lblProjectName.Text + 
      " - Release " + strReleaseName + " has been created or modified. \n\n" + Request.Url.ToString(); 

     Process.Start("mailto:" + pmFirst + "." + pmLast + "@company.com?subject=" + 
      HttpUtility.HtmlAttributeEncode(strSubject) + "&body=" + 
      HttpUtility.HtmlAttributeEncode(strBody).Replace("\n", Environment.NewLine)); 
    } 
} 

但是,当生成电子邮件时,“A Booking Form ....”句子和URL之间没有换行符。我试过把Environment.NewLine直接放在字符串中。

...created or modified. " + Environment.Newline + Environment.NewLine + Request.Url.ToString();

这基本上给了我同样的结果。我试图用<br />替换\ n,它不会添加换行符,并且出于某种原因,也不会显示URL。我只能猜测,问题与HtmlAttributeEncode()有关,并得到它来正确解析NewLine。有什么我在这里失踪?

+0

你试过\ r \ n吗? –

+0

你知道很多用户最近没有在他们的电脑上安装电子邮件客户端,只是使用基于Web的邮件?也许这是一个企业环境,你知道每个人都有Outlook,但对于公共应用程序来说,这不是一个好主意。 – mason

+0

它用于企业Intranet应用程序,Outlook是标准PC部署的一部分。那些将在BYOD设备上使用它的用户不会使用电子邮件。 –

回答

1

你可能想试试.Replace("\r\n", "<br />")你已经完成了你的身体编码。

+0

对代码进行发送.Replace(“\ r \ n”,“
”)将适用于HTML格式邮件正文。 –

+0

这使我得到以下输出,仍然在一行上。 '...创建或修改。
http:// localhost:49768/BookingForm/538' –

+0


将强制在html电子邮件中查看新行。 –

0

您应该在这里使用StringBuilder而不是String。

然后,您可以执行以下操作:

StringBuilder builder = new StringBuilder(); 
builder.AppendLine(string.Format("A Booking Form for Project #{0} - {1}",lblProjectID.Text, lblProjectName.Text)); 
builder.AppendLine(string.Format(" - Release {0} has been created or modified.", strReleaseName)); 
builder.AppendLine(); 
builder.AppendLine(Request.Url.ToString()); 
String strBody = builder.ToString(); 

您也可以在您的字符串创建(焦炭)和10(炭)13。例如:

string.Format("First Line{0}{1}Second Line", (char)10, (char)13); 
相关问题