2012-05-08 39 views
2

他の誰かがこの問題に遭遇したがMVCMailerを使用して電子メールを送信しようとしているかどうかはわかりません。私はT4Scaffoldingパッケージを何も問題なくインストールして更新することができました。MVCMailerの問題

レポートを作成するaspxページがあり、そのレポートを電子メールに添付します。私が振り向くとUserMailersクラスで私のSendReportメソッドを呼び出すときしかし、それはrouteDataがここ

nullである私のコードは、私が手にエラーが「価値ある

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; 
    } 
} 

であることを言ってPopulateBody呼び出しでエラーがスローされますパラメータ名:routeData "

私はオンラインで見てきましたが、この問題やこの問題に遭遇した人は何も見つかりませんでした。

+0

私もこの問題を抱えていますが、私たちが送信しているメールのうち1つまたは2つのみが奇妙なことです。 – Tim

答えて

2

Mvcメーラーの理由からです。 通常のasp.net(.aspx)プロジェクトでは使用できません。MVCプロジェクトでのみ使用できます。

+0

Filip - 私の投稿のどこにプロジェクトがMVCプロジェクトではないと言いますか? MVCプロジェクト内でWebフォームを使用する人々の例は数多くあります。 – George

+0

私の悪い、私は間違っていた:)まだ、問題が残っている、あなたが.aspx Webフォームを呼び出すと、ルートは読み込まれません。 –

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() 
     }; 
    } 
} 

を持っている - しかし、あなたが立ち往生している場合、これは動作することができます。

関連する問題