首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在控制台应用程序中发送强制关闭的SMTP电子邮件,然后才能在.NET中发送电子邮件

在控制台应用程序中发送强制关闭的SMTP电子邮件,然后才能在.NET中发送电子邮件
EN

Stack Overflow用户
提问于 2018-10-18 03:25:57
回答 1查看 111关注 0票数 1

我有一个发送电子邮件的电子邮件通知应用程序,我们在一个每5分钟运行一次的控制台应用程序中发送电子邮件。我们在一个任务中运行电子邮件部分,以便它可以继续到另一组通知上。

但是,我们运行一个通知,控制台关闭,电子邮件永远不会发送。在SMTP方面,它说主机被强制关闭。如何使控制台应用程序保持活动状态,直到所有任务都完成,同时仍然能够多线程。

读取操作失败。传输的字节数:0远程IP: 44.444.444.44,会话: 124992,代码: 10054,消息:现有连接已被远程主机强制关闭

代码语言:javascript
复制
private Task SendFromServer(MailMessage mailMessage, bool reuse, bool useServerSmtp)
{
    return Task.Factory.StartNew(() =>
                {
                    var smtp = new SmtpClient();
                    smtp.Send(mailMessage);
                }
                catch (Exception ex)
                {
                    Logger.Error(ex.InnerException ?? ex);
                }
                finally
                {
                    if(!reuse)
                        mailMessage.Dispose();
                }
            });
        }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-18 03:40:17

使用可以等待的SmtpClient.SendMailAsync

代码语言:javascript
复制
private async Task SendFromServer(MailMessage mailMessage) {
    using (var smtp = new SmtpClient()) {
        try {
            await smtp.SendMailAsync(mailMessage);
        } catch (Exception ex) {
            Logger.Error(ex.InnerException ?? ex);
        }
    }
}

由于它是在控制台应用程序中调用的,因此您需要像这样调用它

代码语言:javascript
复制
//get all notification tasks. Assuming notifications => List<MailMessage>
var tasks = notifications.Select(message => SendFromServer(message));
//execute all asynchronously
Task.WhenAll(tasks).GetAwaiter().GetResult();

因此,控制台应用程序等待它们全部完成其任务

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52862245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档