2017-04-26 1 views
1

FormView의 레이블을 기반으로 몇 가지 기본 서식으로 전자 메일을 생성하려고합니다. 나는 System.Net.Mail 대신에 Process.Start("mailto:...의 경로를 사용할 예정이므로 이메일을 기본 전자 메일 클라이언트에서 열어서 사용자에게 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)); 
    } 
} 

그러나 전자 메일이 생성되면 "예약 양식 ...."문장과 URL 사이에 줄 바꿈이 없습니다. Environment.NewLine을 문자열에 직접 넣으려고했습니다. 기본적으로 나에게 동일한 결과를 얻을 수

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

. 줄 바꿈을 추가하지 않고 어떤 이유로 든 URL을 표시하지 않는 \ <br />으로 \ n을 바꾸려고했습니다. 문제는 HtmlAttributeEncode()와 관련이 있으며 NewLine을 올바르게 파싱하는 것으로 추측 할 수 있습니다. 내가 여기서 누락 된 것이 있습니까?

+0

\ r \ n 시도해 보셨습니까? –

+0

요즘 많은 사람들이 컴퓨터에 이메일 클라이언트가 설치되어 있지 않고 웹 기반 메일 만 사용하고 있다는 것을 알고 계십니까? 아마도 이것은 모두가 Outlook을 가지고 있다는 것을 알고있는 기업 환경이지만, 공개 응용 프로그램의 경우 이는 좋은 생각이 아닙니다. – mason

+0

회사 인트라넷 응용 프로그램 용이며 Outlook은 표준 PC 배포의 일부입니다. BYOD 기기에서이 기능을 사용할 사용자는 이메일을 사용하지 않습니다. –

답변

1

본체의 인코딩을 후에 에 시도해 볼 수 있습니다. .Replace("\r\n", "<br />")

+0

을 사용하여 보내기를 코딩하면됩니다 .Replace ("\ r \ n", "
")는 HTML 형식 이메일 본문. –

+0

그 다음 출력을 한 줄에 표시합니다. '... 생성 또는 수정되었습니다.
http : // localhost : 49768/BookingForm/538' –

+0


은 HTML 이메일에서 볼 때 새 줄을 적용합니다. –

0

String 대신 StringBuilder을 사용해야합니다. 그런 다음 다음을 수행 할 수 있습니다

:

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); 
관련 문제