HangFire 排队的电子邮件 "Succeeding" 但未发送
HangFire Queued Emails "Succeeding" But not Sending
不使用hangfire时,我可以使用该方法发送电子邮件。
当从 hangfire 调用该方法时,它显示为成功,但电子邮件没有发送。
BackgroundJob.Schedule(
() => Email(Subject),
TimeSpan.FromMinutes(1)
);
public void Email(string Subject)
{
try
{
//Initialize WebMail
WebMail.SmtpServer = "relay.example.com";
WebMail.SmtpPort = 587;
WebMail.SmtpUseDefaultCredentials = false;
WebMail.UserName = "xxxx";
WebMail.Password = "xxxx";
WebMail.From = "\"Reports\" <Reports@example.com>";
//Send Email
WebMail.Send(to: "client@example.com",
subject: Subject,
body: "Test Email"
);
}
catch (Exception e)
{
}
}
出于安全考虑,已删除用户名、密码和中继服务以及实际电子邮件地址。
我已经删除了 try/catch 块,看看是否有任何错误产生。
通常,它和以前一样成功,但偶尔会抛出以下错误。
System.NullReferenceException
Object reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.WebPages.Scope.AspNetRequestScopeStorageProvider.get_RequestScopeInternal()
at System.Web.WebPages.Scope.AspNetRequestScopeStorageProvider.get_CurrentScope()
at System.Web.Helpers.WebMail.set_SmtpServer(String value)
at Email(String Subject)
然后我尝试了允许类型传递的版本。
BackgroundJob.Schedule<WebMail>(
() => Email(Subject),
TimeSpan.FromMinutes(1)
);
然而,这会引发有关使用静态类型的编译器错误。
感谢大家的帮助。
编辑:
仍有更好的选择。但是我确实找到了一个厚颜无耻的工作。我能够通过创建一种方法来实现这一点,该方法将 post 请求发送到页面以实际发送电子邮件。而 Hangfire 只是激活 post 请求。
编辑:NVM 解决方法是误报,因为测试中留下了额外的一行
WebMail class 旨在用于 ASP.NET 网页上下文。当在该上下文之外使用时,它可能没有所需的一切,因此您将得到一个 NullReferenceException。
而是使用 SmtpClient class。
不使用hangfire时,我可以使用该方法发送电子邮件。
当从 hangfire 调用该方法时,它显示为成功,但电子邮件没有发送。
BackgroundJob.Schedule(
() => Email(Subject),
TimeSpan.FromMinutes(1)
);
public void Email(string Subject)
{
try
{
//Initialize WebMail
WebMail.SmtpServer = "relay.example.com";
WebMail.SmtpPort = 587;
WebMail.SmtpUseDefaultCredentials = false;
WebMail.UserName = "xxxx";
WebMail.Password = "xxxx";
WebMail.From = "\"Reports\" <Reports@example.com>";
//Send Email
WebMail.Send(to: "client@example.com",
subject: Subject,
body: "Test Email"
);
}
catch (Exception e)
{
}
}
出于安全考虑,已删除用户名、密码和中继服务以及实际电子邮件地址。
我已经删除了 try/catch 块,看看是否有任何错误产生。 通常,它和以前一样成功,但偶尔会抛出以下错误。
System.NullReferenceException
Object reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.WebPages.Scope.AspNetRequestScopeStorageProvider.get_RequestScopeInternal()
at System.Web.WebPages.Scope.AspNetRequestScopeStorageProvider.get_CurrentScope()
at System.Web.Helpers.WebMail.set_SmtpServer(String value)
at Email(String Subject)
然后我尝试了允许类型传递的版本。
BackgroundJob.Schedule<WebMail>(
() => Email(Subject),
TimeSpan.FromMinutes(1)
);
然而,这会引发有关使用静态类型的编译器错误。
感谢大家的帮助。
编辑:
仍有更好的选择。但是我确实找到了一个厚颜无耻的工作。我能够通过创建一种方法来实现这一点,该方法将 post 请求发送到页面以实际发送电子邮件。而 Hangfire 只是激活 post 请求。
编辑:NVM 解决方法是误报,因为测试中留下了额外的一行
WebMail class 旨在用于 ASP.NET 网页上下文。当在该上下文之外使用时,它可能没有所需的一切,因此您将得到一个 NullReferenceException。
而是使用 SmtpClient class。