2014-02-28 2 views
0

한 번의 클릭에 여러 수신자에게 이메일을 보내는 ASP.net은 각각 예를내가 다른 행을 표시하는 데이터 그리드를 가지고

ROW1 COL1 일본 COL3에 대한 해당 행 기준 일치 여러 수신자에게 이메일을 보내는 링크가 col4는

ROW2 COL1 스웨덴 CO3의 col4

(링크는 모든 스웨덴 사용자에게 이메일을 보내) ................... (링크는 모든 일본 사용자에게 이메일을 보내)

이제 사용자가 다른 페이지가 열리는 링크를 클릭하면 해당 행의 모든 ​​수신자를 표시하지만 그 이메일을 보내기 전에 다른 모눈보기 컨트롤이 표시됩니다. 모든 수신자에게 나의 접근 방식은 당신이 메일 링을 할 수있는 Task를 만들 수 있습니다

DataView dv; 

if (dv.Count > 0) 
{ 
    foreach (DataRow row in dv.Table.Rows) 
    { 
     StringBuilder sbEmailBody = new StringBuilder(); 
     sbEmailBody.Append("<div id='mail' style='height:400px;width:750px; padding:10px; margin: 0 auto; '>"); 
     sbEmailBody.Append("Hi " + row["FirstName"].ToString() + ", <br/><br/>"); 
     sbEmailBody.Append("You have registered with siteName, your details match with the following clinical trial."); 
     sbEmailBody.Append("Please contact the below trial representative for further details</br></br>"); 
     sbEmailBody.Append("<b>Trial Name:</b> " + Session["trialName"].ToString() + "</br>"); 
     sbEmailBody.Append("<b>Contact Name:</b> " + Session["recName"].ToString() + "</br>"); 
     sbEmailBody.Append("<b>Contact Email:</b> " + Session["username"].ToString() + "</br>"); 
     sbEmailBody.Append("<b>Contact Telephone:</b> " + Session["tele"].ToString() + "</br>"); 
     sbEmailBody.Append("<hr> </hr>"); 
     sbEmailBody.Append("<a href='www.sitename.com' style=text-decoration:none><span id='logo' style='font-size:X-Large;font-weight:bold;color:Black;'>siteName</span></a><br/>"); 
     sbEmailBody.Append("<span id='stopEmail' style='font-size:Smaller;'>"); 
     sbEmailBody.Append("if you want to stop receiving emails from sitename please click <a href='www.bbc.co.uk' style=text-decoration:none>here</a>"); 
     sbEmailBody.Append("</span>"); 
     sbEmailBody.Append("</div>"); 


     MailMessage mailMessage = new MailMessage("[email protected]", row["EmailAdd"].ToString()); 
     mailMessage.Subject = "Clinical trial recruiter shown interest in your profile"; 
     mailMessage.BodyEncoding = System.Text.Encoding.UTF8; 
     mailMessage.Body = sbEmailBody.ToString(); 
     mailMessage.IsBodyHtml = true; 
     SmtpClient smtpClient = new SmtpClient(); 

     smtpClient.Send(mailMessage); 


    } 
} 

답변

1

에만 DataRow의 각 행에 대한 메일 메시지 객체를 생성하고 잘못되면

문제는, 내가 궁금해서 시간이 많이 걸립니다 너를 위해서.

Task.Run(() => YourMailMethod()); 

YourMailMethod 방법에는 이미 작성한 코드를 넣을 수 있습니다.

작업이 백그라운드에서 실행됩니다. thois이 물건을 고정하기 위해 같은

+0

어디에서 task.run을 호출할까요? 그 순간에 내 코드가 페이지로드 방법에 있지만 페이지가로드되기를 원하지만 백그라운드에서 실행중인 메일을 전송하는 작업이 필요합니다. –

+1

@GROVER_SYAAN : 그 다음에 넣으십시오. –

1

당신이 비동기 operstion을 할 수

공공 대리인이 무효 sendMessage 첨부 (려면 SmtpClient 클라이언트,은 MailMessage 메시지);

SendMessage Smessage = new SendMessage(ResultCallback); 
      //smtp.Send(message); 
      Smessage.BeginInvoke(smtpClient, message, null, null); 





public void ResultCallback(SmtpClient client, MailMessage m) 
     { 
      try 
      { 
       client.Send(m); 
       client.Dispose(); 
       m.Dispose(); 
      } 
      catch 
      { 

      } 
     } 
+0

토끼 같은 질문, 내 코드는 page_load 이벤트에서 실행되고 있지만 메일 메서드가 백그라운드에서 실행 중일 때 페이지가 DataGrid로로드되기를 원합니다. –

+0

@GROVER_SYAAN : 이것은 또한 완벽한 솔루션입니다. 왜 이걸 시험해 보는거야? –

관련 문제