相关疑难解决方法(0)

在ASP.NET中异步发送电子邮件的正确方法...(我做得对吗?)

当用户在我的网站上注册时,我不明白为什么我需要让他"等待"smtp通过才能获得激活电子邮件.

我决定以异步方式启动此代码,这是一次冒险.

让我们想象一下我有一个方法,例如:

private void SendTheMail() { // Stuff }
Run Code Online (Sandbox Code Playgroud)

我的第一个虽然是线程.我这样做了:

Emailer mailer = new Emailer();
Thread emailThread = new Thread(() => mailer.SendTheMail());
emailThread.Start();
Run Code Online (Sandbox Code Playgroud)

这工作......直到我决定测试它的错误处理能力.我故意破坏了我的web.config中的SMTP服务器地址并尝试了它.可怕的结果是IIS基本上BARFED与w3wp.exe上的未处理的异常错误(这是一个Windows错误!多么极端......)ELMAH(我的错误记录器)没有捕获它并且IIS重新启动所以网站上的任何人都有他们的会话被删除了.完全不可接受的结果!

我的下一个想法是,对异步代表进行一些研究.这看起来效果更好,因为在异步委托中处理异常(与上面的线程示例不同).但是,我担心如果我做错了或者我可能导致内存泄漏.

这是我正在做的事情:

Emailer mailer = new Emailer();
AsyncMethodCaller caller = new AsyncMethodCaller(mailer.SendMailInSeperateThread);
caller.BeginInvoke(message, email.EmailId, null, null);
// Never EndInvoke... 
Run Code Online (Sandbox Code Playgroud)

我这样做了吗?

c# asp.net email asynchronous

20
推荐指数
2
解决办法
3万
查看次数

如何处理具有异步方法的对象?

我有这个PreloadClient实现的对象IDisposable,我想处理它,但在异步方法完成它们的调用之后......这没有发生

    private void Preload(SlideHandler slide)
    {
        using(PreloadClient client = new PreloadClient())
        {                 
             client.PreloadCompleted += client_PreloadCompleted;
             client.Preload(slide);
        }
        // Here client is disposed immediately
    }
    private void client_PreloadCompleted(object sender, SlidePreloadCompletedEventArgs e)
    {
     // this is method is called after a while, 
     // but errors are thrown when trying to access object state (fields, properties)
    }
Run Code Online (Sandbox Code Playgroud)

那么,任何想法或工作?

.net c# dispose asynchronous idisposable

14
推荐指数
1
解决办法
6852
查看次数

两种通过SmtpClient异步发送电子邮件的方法,结果不同

这里简单的概念.这适用于使用MVC 3和Entity Framework 4构建的站点.用户在站点上注册后,会向其电子邮件地址发送一封电子邮件.我首先使用SmtpClient.Send()实现它,它工作正常.然后我明白了尝试异步发送电子邮件.我遇到了我尝试过的两种异步方法的问题.

第一个实现(来自这个未回答的帖子:https://stackoverflow.com/questions/7558582/how-to-dispose-using-smtpclient-send-and-asynccallback):

public bool Emailer(){
    .
    .
    .
    using (var smtpClient = new SmtpClient())
    {
        smtpClient.EnableSsl = true;
        smtpClient.Host = "smtp.gmail.com";
        smtpClient.Port = 587;
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Credentials = new NetworkCredential("myaddress@gmail.com", "mypassword");

        var sd = new SendEmailDelegate(smtpClient.Send);
        var cb = new AsyncCallback(SendEmailResponse);
        sd.BeginInvoke(message, cb, sd);

        return true;
    }
}

private delegate void SendEmailDelegate(System.Net.Mail.MailMessage m);

private static void SendEmailResponse(IAsyncResult ar)
{
    try
    {
        SendEmailDelegate sd = (SendEmailDelegate)(ar.AsyncState);
        sd.EndInvoke(ar); // "cannot access a disposed object" …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous smtpclient

8
推荐指数
2
解决办法
2万
查看次数

SmtpClient - 什么是适当的寿命?

我正在创建Windows服务,每5分钟发送一批电子邮件.

我想每5分钟发送一批10-100封电子邮件.这是极端的边缘情况.批次每5分钟发送一次,通常包含最多10封电子邮件.

我正在使用System.Net.Mail命名空间中的SmtpClient.

什么是SmtpClient对象的适当生命周期?每次发送批次时我应该创建一个吗?或者我应该在服务启动时创建一个并且永远不会丢弃它?

.net c# email service

7
推荐指数
2
解决办法
2558
查看次数

SendAsync Smtp邮件错误

应用程序要求使用SendAsync而不仅仅是Send.所以我做了一个类CEmailServer并设置了一切.到目前为止发送工作正常,但更改它以使用SendAsync时,它没有.我创建了一个在发送邮件时调用的方法,并且userToken就位,但它仍然失败.我找不到我的错误.这是我的代码:

static bool mailSent = false;

//Method for Sending with attachment.
public void SendEmail(string Address, string Recipient, string Subject, string Body, string Dir)
{
    var fromAddress = new MailAddress("someadress.kimberley@gmail.com", "My Company");
    var toAddress = new MailAddress(Address, Recipient);
    const string fromPassword = "password";
    string subject = Subject;
    string body = Body;

    var smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(fromAddress.Address, fromPassword)

    };
    using (var message …
Run Code Online (Sandbox Code Playgroud)

c# smtp sendasync

1
推荐指数
1
解决办法
7481
查看次数