C#-无法发送通过多个DLL调用的电子邮件

C#-无法发送通过多个DLL调用的电子邮件,c#,asp.net,email,dll,smtpclient,C#,Asp.net,Email,Dll,Smtpclient,我有3个DLL: 我的asp.net应用程序[aspnet] steam api管理器[steam.dll] 通知管理器[Notifications.dll] 我需要计算steam api请求(它们限制为每天10万个),在一天结束时,我想发送电子邮件,说明我每天提出的请求总数 //My aspnet app global.asax protected void Application_Start(Object sender, EventArgs e) {

我有3个DLL:

  • 我的asp.net应用程序[aspnet]
  • steam api管理器[steam.dll]
  • 通知管理器[Notifications.dll]
我需要计算steam api请求(它们限制为每天10万个),在一天结束时,我想发送电子邮件,说明我每天提出的请求总数

    //My aspnet app global.asax
    protected void Application_Start(Object sender, EventArgs e)
    {
        Steam.RequestCounter.Run();        
    }

    //Steam.dll
    public static void Run()
    {
       // .. request count logic

        Notifications.SendEmail();
    }

    //Notifications.dll
    public static void SendEmail()
    {
       //..email sending logic
    }
如果调用堆栈如上所示,则不发送电子邮件。为什么? 如果我直接从我的asp.net应用程序(global.asax)调用
Notifications.sendmail()
方法,它就会工作。 你能解释一下发生了什么事吗

编辑

通话过程中没有错误。SmtpClient.Send()方法正常通过。即使我将其放入try,catch块,也不会发生异常

这是我的通知。SendEmail方法:

    public static void SendEmail(string subject, string body, params string[] recipients)
    {
        const string sender = "xxxx@outlook.com";
        var client = new SmtpClient("smtp-mail.outlook.com")
        {
            Port = 587,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false
        };

        var credentials = new System.Net.NetworkCredential(sender, "xxxx");
        client.EnableSsl = true;
        client.Credentials = credentials;

        var mail = new MailMessage {From = new MailAddress(sender)};
        foreach (var recipient in recipients)
        {
            mail.To.Add(recipient);
        }
        mail.Subject = subject;
        mail.Body = body;
        client.Send(mail);
    }
这是发送电子邮件时的场景(在global.asax中):

这是不发送电子邮件的情况:

    protected void Application_Start(Object sender, EventArgs e)
    {
        //call to Steam.dll
        Steam.RequestCounter.Run();        
    }

    //Inside Steam.dll
    public static void Run()
    {
        SendEmail();
    }

    private static void SendEmail()
    {
        //call to Notifications.dll
        Email.SendEmail(
            "subject",
            "body",
            "xxx@outlook.com"
        ); 
    }

所以问题不在请求计数逻辑中。我认为问题在于参考资料。也许主机环境(asp.net应用程序)没有发送电子邮件所需的一切。如果没有发生错误,我不知道如何检查它。

启动应用程序时,global.asax中的函数将被调用一次。因此,如果没有发生回收或部署,它将在周一运行,并且不会再次运行。你需要一些时间触发器、调度程序、服务或类似的东西

你能发布你的全部代码吗?可能Run()方法引起了一些错误,并且没有调用sendmail。尝试重构Run()以返回计数,并在调用sendemail并向其传递参数后,在asp.net上调用所有参数以尝试是否成功。在您发布的示例中,“直接从我的asp.net应用程序(global.asax)运行”与“正常运行”之间没有区别-
sendmail
从通常位于“global.asax”中的
应用程序\u Strart
无条件调用。您需要提供更好(但仍然很小)的示例以及“电子邮件未发送”的含义(即
sendmail
调用但失败,而
sendmail
根本未调用)。请检查我的编辑
sendmail
方法从何处获取其设置(凭据和其他)?这些dll是否都在ASP.NET内运行,即web应用程序引用和使用了这些dll?您可以看到我在Notifications.dll内设置了发件人的凭据。没关系,只是为了测试。是的,我在asp.net应用程序中有对Notifications.dll和Steam.dll的引用。但是Notifications.dll中的内容没有在我的web应用程序中使用。我只使用Steam.dll中的方法,Steam.dll调用Notifications.dll中的方法。也许这里有问题?如果问题仍然存在,我不想用我的调度程序来打扰你,即使我删除了我的调度逻辑。请参阅我的编辑。
    protected void Application_Start(Object sender, EventArgs e)
    {
        //call to Steam.dll
        Steam.RequestCounter.Run();        
    }

    //Inside Steam.dll
    public static void Run()
    {
        SendEmail();
    }

    private static void SendEmail()
    {
        //call to Notifications.dll
        Email.SendEmail(
            "subject",
            "body",
            "xxx@outlook.com"
        ); 
    }