0

我写了一个 Apex Scheduler 类,以便在距离同事生日还有 2 天时发送电子邮件。我创建了一个 2 天后生日的联系人。联系人的生日是 2012 年 7 月 29 日。今天的日期是 2012 年 7 月 27 日。

我被困住了。我没有收到错误消息或任何东西。我已将课程安排在今天 12 点上课。我没有收到电子邮件(要么告诉我这是某人的生日(成功),要么来自 Salesforce 的错误消息告诉我我的代码无法运行(失败)

为了排除故障,我还尝试了电子邮件方法的 if (contact.Next_Birthday__c = : system.Today().addDays(2)) 并得到了不兼容的类型错误。Next_Birthday__c 是一个日期字段,所以我不确定为什么类型不兼容或者为什么这个 SOQL 语句不起作用。

任何意见,将不胜感激。这是我的代码。

global class BirthdayNameOptions implements Schedulable{
  global void execute (SchedulableContext ctx)
  {
    sendBirthdayEmail();
  }

  public void sendBirthdayEmail()
  {
    for(Contact con : [SELECT Name FROM Contact WHERE Next_Birthday__c = : system.Today().addDays(2)])
    {
      Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
      mail.setTemplateId('00XJ0000000M31w');
      mail.setTargetObjectId('005J0000000');
      mail.setSaveAsActivity(false);
      Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail });
    }
  }    
}
4

1 回答 1

0

我相信您想将targetObjectId出站电子邮件设置为生日的联系人,而不是对其进行硬编码……005J0000000您的代码中的值似乎也不是有效的 ID,这可能会导致您不接收电子邮件。出于测试目的,您需要确保将联系人记录的电子邮件设置为您的电子邮件,以便您收到通知。此外,每次执行您只能获得 10 次调用Messaging.sendEmail(),所以我为您稍微扩大了一点。试一试:

global class BirthdayNameOptions implements Schedulable {
    global void execute (SchedulableContext ctx) {
        sendBirthdayEmail();
    }
    public void sendBirthdayEmail() {
        List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
        for ( Contact con : [SELECT Id, Name FROM Contact WHERE Next_Birthday__c = : system.Today().addDays(2)] ) {
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
            mail.setTemplateId('00XJ0000000M31w');
            mail.setTargetObjectId(con.Id);
            mail.setSaveAsActivity(false);
            mails.add(mail);
        }
        if ( mails.size() > 0 )
            Messaging.sendEmail(mails, false);
    }
}
于 2012-07-27T19:36:27.247 回答