2012-05-08 4 views
2

다른 사람이이 문제를 겪었지만 MVCMailer를 사용하여 전자 메일을 보내려하는지 확실하지 않습니다. 나는 그것을 설치하고 어떤 문제도없이 T4Scaffolding 패키지를 업데이트 할 수있었습니다.MVCMailer 문제

보고서를 작성하는 aspx 페이지가 있는데 그 보고서를 전자 메일에 첨부하려고합니다. 내가 돌아와 UserMailers 클래스 내 SendReport 메서드를 호출 할 때 그러나, 그것은으로 RouteData 여기

은 내가 오류가 내 코드

public class UserMailer : MailerBase, IUserMailer 
{ 
    /// <summary> 
    /// Email Reports using this method 
    /// </summary> 
    /// <param name="toAddress">The address to send to.</param> 
    /// <param name="viewName">The name of the view.</param> 
    /// <returns>The mail message</returns> 
    public MailMessage SendReport(string toAddress, string viewName) 
    { 
     var message = new MailMessage { Subject = "Report Mail" }; 
     message.To.Add(toAddress); 

     ViewBag.Name = "Testing-123"; 

     this.PopulateBody(mailMessage: message, viewName: "SendReport"); 

     return message; 
    } 
} 

이다 "값이 null 인 것을 말하는 PopulateBody 호출에 오류가 발생합니다 null 일 수 없음 매개 변수 이름 : routeData "

나는 온라인에서 봤지만이 문제 또는이 문제와 관련이있는 사람을 찾지 못했습니다.

+0

나는 또한이 문제를 받고 있지만 이상하게도 우리가 보내고있는 이메일 중 하나 또는 두 가지에 대해서만 이상하게 여기고 있습니까? – Tim

답변

2

Mvc 메일러가 있습니다. MVC 프로젝트에서만 일반적인 asp.net (.aspx) 프로젝트에서 사용할 수 없습니다.

+0

Filip - 내 게시물의 어디에 프로젝트가 MVC 프로젝트가 아니라고 언급했는지 알려주십시오. MVC 프로젝트 내에서 웹 양식을 사용하는 수많은 사례가 있습니다. – George

+0

내 잘못, 내가 잘못 생각했습니다. :) .aspx 웹 폼을 호출해도 여전히 문제가 남아 있습니다. 경로가로드되지 않습니다. –

0

Filip은 ControllerContext/RequestContext이 없기 때문에 ASP.NET ASPX 페이지의 코드 숨김 내에서 사용할 수 없다고 말했습니다.

가장 쉬운 방법은 컨트롤러 동작을 만든 다음 WebClient을 사용하여 ASPX 페이지에서 http 요청을하는 것입니다. 그런 다음

protected void Button1_Click(object sender, EventArgs e) 
    { 
     WebClient wc = new WebClient(); 

     var sendEmailUrl = "https://" + Request.Url.Host + 
          Page.ResolveUrl("~/email/SendGenericEmail") + 
          "[email protected]" + "&template=Template1"; 

     wc.DownloadData(sendEmailUrl); 
    } 

나는 간단한 컨트롤러 보안, 프로토콜 (컨트롤러가 원래 페이지에 액세스 할 수 없습니다), 오류 처리 등 많은 문제가있다 물론

public class EmailController : Controller 
{ 
    public ActionResult SendGenericEmail(string emailAddress, string template) 
    { 
     // send email 
     GenericMailer mailer = new GenericMailer(); 

     switch (template) 
     { 
      case "Template1": 

       var email = mailer.GenericEmail(emailAddress, "Email Subject"); 
       email.Send(mailer.SmtpClient); 
       break; 

      default: 
       throw new ApplicationException("Template " + template + " not handled"); 
     } 

     return new ContentResult() 
     { 
      Content = DateTime.Now.ToString() 
     }; 
    } 
} 

에게있다 -하지만 당신이 꼼짝 못하게되면이 일을 할 수 있습니다.