0

以下に示すように、Quartz を使用して簡単なメール送信テストを実行していますが、何らかの形でトレース ログに次のエラーが表示されます。

12:42:00 [ServerScheduler_Worker-7] DEBUG HelloWorldQuartzDotNet.HelloWorldJob - 
***
Failed: Value cannot be null.
Parameter name: address
***

これは、app.config キー値から値を引き出すことに関係していると思います。誰かが私が間違っていることを親切にアドバイスしてもらえますか? メールコード部分を抽出して、新しいプロジェクトでスタンドアロンとして試してみたので、メール送信コードが正常に機能していることを確認できます。

ありがとう。

 public void Execute(IJobExecutionContext context)        
    {
        try
        {
            Log.DebugFormat("{0}****{0}Job {1} fired @ {2} next scheduled for {3}{0}***{0}",
                            Environment.NewLine,
                            context.JobDetail.Key,
                            context.FireTimeUtc.Value.ToString("r"),
                            context.NextFireTimeUtc.Value.ToString("r"));

            MailMessage mail = new MailMessage();
            mail.IsBodyHtml = true;
            mail.From = new MailAddress(ConfigurationManager.AppSettings.Get("COMPANYEMAIL"),
                                        ConfigurationManager.AppSettings.Get("COMPANYNAME"));
            mail.To.Add("me1234@hotmail.com");
            mail.Subject = "Daily Email";

            string body = "";
            string filePath =
                HttpContext.Current.Server.MapPath("~/" + ConfigurationManager.AppSettings["EmailTemplates"] + "/");

            if (File.Exists(filePath + "Test.htm"))
            {
                FileStream f1 = new FileStream(filePath + "Test.htm", FileMode.Open);
                StreamReader sr = new StreamReader(f1);
                body = sr.ReadToEnd();
                body = body.Replace("<%UserName%>", "Mr Big");
                f1.Close();
            }

            mail.Body = body;
            mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess |
                                               DeliveryNotificationOptions.OnFailure;

            var Th = new Thread(() => Email.Send(mail, 3, 3000, true));
            Th.Start();

            Log.DebugFormat("{0}***{0}Daily Email Sent!{0}***{0}", Environment.NewLine);
        }
        catch (Exception ex)
        {
            Log.DebugFormat("{0}***{0}Failed: {1}{0}***{0}", Environment.NewLine, ex.Message);
        }
    }

私のapp.configの一部:

<quartz>
    <add key="quartz.scheduler.instanceName" value="ServerScheduler"/>
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
    <add key="quartz.threadPool.threadCount" value="10"/>
    <add key="quartz.threadPool.threadPriority" value="2"/>
    <add key="quartz.jobStore.misfireThreshold" value="60000"/>
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>

    <add key="USER_DEFAULTPHOTO_PATH" value="UserProfilePhoto/default.png" />
    <add key="USER_PROFILEPHOTO_PATH" value="UserProfilePhoto" />
    <add key="MAX_INBOX_COUNT" value="200" />
    <add key="FAILONANYADDRESS" value="false" />
    <add key="COMPANYEMAIL" value="coy1234@hotmail.com" />
    <add key="COMPANYNAME" value="MyApp" />
    <add key="EMAILTEMPLATES" value="EmailTemplates" />
    <system.net>
      <mailSettings>
        <smtp deliveryMethod="Network" from="coy1234@hotmail.com">
          <network host="smtp.live.com" port="25" userName="coy1234@hotmail.com" password="123456789" />
        </smtp>
      </mailSettings>
    </system.net>
  </quartz>
4

1 に答える 1

0

Quartz.NET インフラストラクチャのみを意味する Quartz 構成セクション内に完全に構​​成があります。クォーツで始まるキーのみ。そこにあるはずです。これが ConfigurationManager.AppSettings が null を返す理由です。

正しい構成は次のようになります。

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </configSections>

  <appSettings>
    <add key="USER_DEFAULTPHOTO_PATH" value="UserProfilePhoto/default.png" />
    <add key="USER_PROFILEPHOTO_PATH" value="UserProfilePhoto" />
    <add key="MAX_INBOX_COUNT" value="200" />
    <add key="FAILONANYADDRESS" value="false" />
    <add key="COMPANYEMAIL" value="coy1234@hotmail.com" />
    <add key="COMPANYNAME" value="MyApp" />
    <add key="EMAILTEMPLATES" value="EmailTemplates" />
  </appSettings>

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="coy1234@hotmail.com">
        <network host="smtp.live.com" port="25" userName="coy1234@hotmail.com" password="123456789" />
      </smtp>
    </mailSettings>
  </system.net>

  <quartz>
    <add key="quartz.scheduler.instanceName" value="ServerScheduler"/>
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
    <add key="quartz.threadPool.threadCount" value="10"/>
    <add key="quartz.threadPool.threadPriority" value="2"/>
    <add key="quartz.jobStore.misfireThreshold" value="60000"/>
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>
  </quartz>
</configuration>
于 2013-06-02T16:12:43.433 に答える