首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Azure Scheduler / Postal / MVC发送预定的电子邮件

使用Azure Scheduler / Postal / MVC发送预定的电子邮件
EN

Stack Overflow用户
提问于 2016-01-19 18:43:31
回答 2查看 3.6K关注 0票数 2

我的项目托管在Azure上,我想每天早上给那些忘记在我的应用程序中完成某些任务的用户发送电子邮件。

我已经建立了我的电子邮件(用邮政发送)。如果我运行这个函数本身,电子邮件就会按预期发送。

我已经将Azure调度程序配置为运行HTTPs操作、get方法、[https://www.example.com/Email/EmailReminder]。预定的工作报告是成功的,但没有电子邮件发出。

我以前没有这样做过,所以我怀疑我的函数>调度器作业之间缺少一个链接。我已经搜索了关于如何设置这个问题的代码示例,但我还没有找到解决方案。什么是调度程序期待我没有给它?

代码语言:javascript
复制
public void EmailReminder()
{
     var remCheckOuts = // query code here                                
     into grouped
     select new Reminder
     {
          /// populate viewmodel 
     });    

    // send emails
    foreach (var i in remCheckOuts)
    {
                string Full = i.Full;
                string FirstName = i.FirstName;
                var CheckOutCt = i.CheckOutCt;                   

                dynamic email = new Email("emReminder");
                email.FromAdd = "test@test.com";
                email.To = "test2@test2.com";
                email.NPFirstName = NPFirstName;
                email.CheckOutCt = CheckOutCt;
                email.Send();
      } 
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-19 19:15:29

我认为你最好的选择是网络作业。我假设您已经有了一个Webjob,所以如果您添加了一个使用Webjob的Web作业,您可以创建一个带有签名的函数:

代码语言:javascript
复制
public class Functions
{
    public static void ProcessTimer([TimerTrigger("0 0 9 1/1 * ? *", RunOnStartup = true)]
    TimerInfo info)
    {
        var remCheckOuts = // query code here                                
     into grouped
     select new Reminder
     {
          /// populate viewmodel 
     });    

    // send emails
    foreach (var i in remCheckOuts)
    {
                string Full = i.Full;
                string FirstName = i.FirstName;
                var CheckOutCt = i.CheckOutCt;                   

                dynamic email = new Email("emReminder");
                email.FromAdd = "test@test.com";
                email.To = "test2@test2.com";
                email.NPFirstName = NPFirstName;
                email.CheckOutCt = CheckOutCt;
                email.Send();
      } 
    }
}

它使用TimerTrigger在给定的时间触发(由CRON表达定义),它比HTTP方法简单得多(在HTTP方法中需要考虑HTTP超时值)。

如果您对CRON表达式有问题,请检查CronMaker

对于电子邮件发送和遵循WebJobs SDK示例,您可以使用SendGrid扩展与一个队列进行解耦,这样您就可以拥有多个TimerTrigger函数(例如,早晨邮件、X用途的晚间邮件、Y用途的夜间邮件、月度报告)和一个发送所有邮件的函数:

代码语言:javascript
复制
public class MailNotification{
    public string From {get;set;}
    public string To {get;set;}
    public string Subject {get;set;}
    public string Body {get;set;}
}

public class Functions
{
    public static void MorningMail([TimerTrigger("0 0 9 1/1 * ? *", RunOnStartup = true)]
    TimerInfo info, [Queue]("mail") ICollector<MailNotification> mails)
    {
        var remCheckOuts = // query code here                                
     into grouped
     select new Reminder
     {
          /// populate viewmodel 
     });    

    // send emails
    foreach (var i in remCheckOuts)
    {
            mails.Add(new MailNotification(){
                To = "test2@test2.com",
                From = "test@test.com",
                Subject = "Whatever Subject you want",
                Body = "construct the body here"
            }); 

      } 
    }

    public static void EveningMail([TimerTrigger("0 0 18 1/1 * ? *", RunOnStartup = true)]
    TimerInfo info, [Queue]("mail") ICollector<MailNotification> mails)
    {
        var remCheckOuts = // query code here                                
     into grouped
     select new Reminder
     {
          /// populate viewmodel 
     });    

    // send emails
    foreach (var i in remCheckOuts)
    {
            mails.Add(new MailNotification(){
                To = "test2@test2.com",
                From = "test@test.com",
                Subject = "Whatever Subject you want",
                Body = "construct the body here"
            }); 

      } 
    }

    public static void SendMails([QueueTrigger(@"mails")] MailNotification order,
        [SendGrid(
            To = "{To}",
            From = "{From}",
            Subject = "{Subject}",
            Text = "{Body}")]
        SendGridMessage message)
    {
        ;
    }
}
票数 7
EN

Stack Overflow用户

发布于 2016-01-19 22:29:19

关于我为什么Azure Scheduler不发送电子邮件的问题,这是一个认证问题,在Azure门户网站上得到了解决。

马提亚的回答也是正确的,而且我将来要走的方向也是正确的。

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

https://stackoverflow.com/questions/34884577

复制
相关文章

相似问题

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