HangFire排队电子邮件“成功”但不发送

问题描述 投票:0回答:1

我可以在不使用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\" <[email protected]>";

        //Send Email
        WebMail.Send(to: "[email protected]",
            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)
        );

但是,这会引发有关使用静态类型的编译器错误。

谢谢你的帮助。

编辑:

仍然愿意接受更好的选择。但是我确实找到了一个厚脸皮的工作。我能够通过创建一个方法来触发页面实际发送电子邮件的方法来实现此功能。而Hangfire只是激活帖子请求。

编辑:NVM解决方法是一个误报,因为测试中留下了额外的一行

c# html smtp hangfire system.web
1个回答
1
投票

WebMail类旨在用于ASP.NET Web页面上下文中。在该上下文之外使用时,它可能没有它需要的所有内容,因此您将获得NullReferenceException。

相反,使用SmtpClient类。

© www.soinside.com 2019 - 2024. All rights reserved.