检查 Azure SQL Table 的电子邮件以发送 mvc C#

Check Azure SQL Table for emails to send mvc C#

我正在尝试找出检查 SQL Azure 中包含有关发送电子邮件信息的 Table 的最佳方法。我的用户会安排电子邮件应该发送的日期,每天早上 8 点左右我想检查 table 以查看需要发送哪些电子邮件并使用我的用户信息自动发送它们。

我希望这是一项后台任务,以防用户在电子邮件应该发送的日期没有登录我们的软件。

我认为我需要使用 Azure Web 作业,但我找不到使用 MVC C# 的好示例,如果您必须在现有应用程序中创建另一个项目,我会感到困惑。

所以 Table 名称是 InstallmentsToSend 列包括:

-电子邮件 VARCHAR -SendToEmail VARCHAR -主题 VARCHAR -正文 VARCHAR -附件 VARBINARY -发送日期日期时间 -SmtpHost VARCHAR -状态 VARCHAR

我还想知道 Azure Functions 是否比 Azure Web 作业更好?

如果有人可以提供示例或 link 示例来帮助我完成任务,我将不胜感激。

  1. 定时器触发的WebJob可以满足您的需求。只需使用简单的代码即可发送电子邮件。这是一个关于 How to send emails from C#/.NET 的教程。 在 Azure 上,通过 Visual Studio 或其他方式将您的项目部署为 WebJob。 Configure a schedule 触发它的背景。

  2. 另一个选择是使用SQL存储过程。请查看这篇文章:Send Email in SQL Server using Stored Procedure

对于这种情况,最佳选择是 Azure 中的“逻辑应用程序”。

为了您的目的,逻辑应用程序中的两步就够了

  1. 重复
  2. 发送消息

请找到 url 如下。 https://docs.microsoft.com/en-in/azure/event-grid/compare-messaging-services

https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-your-first-function-visual-studio

这个 link 帮助我通过 Visual Studio 创建了 Azure Functions。

我发现的几件事

  • Entity Framework 对安装版本非常挑剔,因此请确保安装正确的版本
  • SendGrid 是能够通过 Azure 应用程序发送电子邮件的唯一选项之一。
  • 当您意识到自己在做什么时,时间触发器很容易设置,时间是 UTC 时间。

这是我完成的一些示例代码。它检查数据库中是否有任何需要在该日期发送的电子邮件,如果尚未发送,它将使用保存在数据库中的凭据发送。

public static class Function1
{
    

    [FunctionName("Function1")]
    public static void Run([TimerTrigger(" 0 30 13 * * *")]TimerInfo myTimer, ILogger log) 
    {

        GenericRepository<EmailsToSendAzure> emailRepository = new GenericRepository<EmailsToSendAzure>();

        string cmd = "Select * From EmailsToSendAzure Where SendDate = '" + DateTime.Today + "' And Status = 'Not Sent'";
        List<EmailsToSendAzure> emailsNeedToSend = emailRepository.GetSelectAll(cmd);

        //var apiKey = System.Environment.GetEnvironmentVariable("SendGridKey");
        var client = new SendGridClient("YourKeyFromSendGrid");
        foreach (EmailsToSendAzure email in emailsNeedToSend)
        {

            ExecuteMail(client, email).Wait();

        }

        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    }
    static async Task ExecuteMail(SendGridClient client, EmailsToSendAzure email)
    {

        //var response = await client.SendEmailAsync(msg);

        //var msg = new SendGridMessage();
        var from = new EmailAddress(email.Email);
        var to = new EmailAddress(email.SendTo);
        var subject = email.Subject;
        var body = email.Body;
        

        var msg = MailHelper.CreateSingleEmail(from, to, subject, body, body);

        var response = await client.SendEmailAsync(msg);

    }
}
  • 首先在您的 Azure 门户中创建 Azure 函数,您可以在发布函数后 link 创建该函数。

-发件人的任何电子邮件地址都需要在 SendGrid

上进行验证

-通过电子邮件发送网格验证不适用于 google chrome。 这让我很好。一直说该网站不安全,但如果您使用 Microsoft Edge 打开它,您的电子邮件验证以及他们需要的任何其他验证都会起作用。

如果您需要使用 SendGrid 通过电子邮件发送附件,这是我下面的代码。

var msg = new SendGridMessage();
using (var stream = new MemoryStream())
            {
                report.ExportToPdf(stream);
                stream.Seek(0, SeekOrigin.Begin);
                
                msg.AddAttachment("YourAttachmentFile.pdf", System.Convert.ToBase64String(stream.ToArray()));
            }

-report.ExportToPDF() 是 Devexpress XtraReport 项目。