检查 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 示例来帮助我完成任务,我将不胜感激。
定时器触发的WebJob可以满足您的需求。只需使用简单的代码即可发送电子邮件。这是一个关于 How to send emails from C#/.NET 的教程。
在 Azure 上,通过 Visual Studio 或其他方式将您的项目部署为 WebJob。 Configure a schedule 触发它的背景。
另一个选择是使用SQL存储过程。请查看这篇文章:Send Email in SQL Server using Stored Procedure。
对于这种情况,最佳选择是 Azure 中的“逻辑应用程序”。
为了您的目的,逻辑应用程序中的两步就够了
- 重复
- 发送消息
请找到 url 如下。
https://docs.microsoft.com/en-in/azure/event-grid/compare-messaging-services
这个 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 项目。
我正在尝试找出检查 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 示例来帮助我完成任务,我将不胜感激。
定时器触发的WebJob可以满足您的需求。只需使用简单的代码即可发送电子邮件。这是一个关于 How to send emails from C#/.NET 的教程。 在 Azure 上,通过 Visual Studio 或其他方式将您的项目部署为 WebJob。 Configure a schedule 触发它的背景。
另一个选择是使用SQL存储过程。请查看这篇文章:Send Email in SQL Server using Stored Procedure。
对于这种情况,最佳选择是 Azure 中的“逻辑应用程序”。
为了您的目的,逻辑应用程序中的两步就够了
- 重复
- 发送消息
请找到 url 如下。
https://docs.microsoft.com/en-in/azure/event-grid/compare-messaging-services
这个 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 项目。