繁体   English   中英

c#使用asp.net web应用程序每天通过电子邮件发送上传的文件

[英]c# send uploaded file through email daily using asp.net web application

我只想知道,如果该 Excel 文件有任何新数据可用,如何制作一个 Web 应用程序,该应用程序从用户那里输入 Excel 文件并每天发送一封电子邮件。

我应该使用网络服务(在本地计算机上安装该服务)吗? 是的,然后如何添加上传用户界面。 或者我应该只使用一个 web 应用程序,我应该在那个应用程序中添加 web-service 吗?

请让位于摆脱这个问题。

谢谢。

取决于您正在构建的应用程序的性质:

  1. 如果您希望用户通过 Internet 访问它,请将其创建为 ASP.NET 应用程序 (UI) 和服务器上的 Windows 服务/Windows 任务计划程序,以发送预定的电子邮件。

  2. 如果您希望用户从他/她的本地计算机/服务器运行应用程序,请在本地计算机上创建一个 Windows 窗体应用程序 (UI) 和一个 Windows 服务/Windows 任务计划程序来发送预定的电子邮件。

无需安装到用户计算机。 当然,您需要一个简单的 Web 应用程序和一个 Web 服务器。 有很多关于 Web 应用程序入门的教程,这里有一些链接:

  1. ASP.NET WebForms - 过时但功能强大的 Web 应用程序范例。 但是,我确实推荐下一个选项,特别是如果您以前没有任何桌面应用程序经验。

  2. ASP.NET MVC - 这是构建 Web 应用程序的现代方式。

一旦你决定使用什么技术,你就需要所谓的SMTP服务器; 通常 ISP 会为您提供一个,您需要在 web.config 中添加一个配置,例如:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network">
            <network host="*SMTP server IP address*" port="25" />
        </smtp>
    </mailSettings>
</system.net>

您可以查看此SO 帖子,了解有关如何在 ASP.NET MVC 中完成此操作的详细信息。

如果你真的想把它作为 Asp.Net WebApp 的后台工作,你应该看看:


石英网

创建作业以发送电子邮件

public class SendMailJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        ...Do your stuff;
    }
}

然后将您的工作配置为每天执行

// define the job and tie it to our SendMailJob class
IJobDetail job = JobBuilder.Create<SendMailJob>()
    .WithIdentity("job1", "group1")
    .Build();

// Trigger the job to run now, and then repeat every 24 hours
ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .StartNow()
    .WithSimpleSchedule(x => x
        .WithIntervalInHours(24)
        .RepeatForever())
    .Build();

吊火

RecurringJob.AddOrUpdate(
    () => YourSendMailMethod("email@email.com"),
    Cron.Daily);

IHostedService (仅在 Asp.Net Core 中)

public class SendMailHostedService : IHostedService, IDisposable
{
    private readonly ILogger<SendMailHostedService> _logger;
    private Timer _timer;

    public SendMailHostedService(ILogger<SendMailHostedService> logger)
    {
        _logger = logger;
    }

    public Task StartAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Hosted Service running.");

        _timer = new Timer(DoWork, null, TimeSpan.Zero, 
            TimeSpan.FromSeconds(5));

        return Task.CompletedTask;
    }

    private void DoWork(object state)
    {
        //...Your stuff here

        _logger.LogInformation(
            "Timed Hosted Service is working. Count: {Count}", executionCount);
    }

    public Task StopAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Timed Hosted Service is stopping.");

        _timer?.Change(Timeout.Infinite, 0);

        return Task.CompletedTask;
    }

    public void Dispose()
    {
        _timer?.Dispose();
    }
}

在您的 startup.cs 类中。 在配置方法中添加它。

services.AddHostedService<SendMailHostedService>();

如果不需要将其作为 WebApp 上的后台作业托管,那么您可以创建一个每天在您需要的时间运行的 Windows 服务。

看到这个问题: Windows 服务调度每天早上 6:00 运行一次

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM