gpt4 book ai didi

salesforce - 使用 Salesforce 触发器退回电子邮件处理邮箱已满

转载 作者:行者123 更新时间:2023-12-04 05:38:00 27 4
gpt4 key购买 nike

我正在尝试通过创建一个触发器来解决基于“邮箱已满”的邮件退回问题,该触发器在邮件包含“邮箱已满”时重新发送邮件。

我面临的问题是我需要将重新发送的次数限制为 3 次。
一旦收到退回的电子邮件,我现在就会不断重新发送电子邮件。

我的触发器是

trigger trgBouncedEmails on EmailMessage (after insert) {

for(EmailMessage myEmail: trigger.New) {


//mail box full bounced email
if (myEmail.HtmlBody.contains('full'))
{

Case[] parentCase = [Select c.Id from Case c where c.Id =: myEmail.ParentId];


if (myEmail.Subject.contains('Financial Review'))
parentCase[0].Resend_Email_Send__c = true; // this will trigger a workflow to send the email again.

Update parentCase;
}
}
}

如何限制重新发送,有没有办法在执行“更新 parentCase”之前设置等待时间

有没有更好的方法来解决这个问题,知道我有不同类型的电子邮件,每个都有不同的模板和不同的目的。

编辑
系统应以24小时的频率自动重发邮件3次,24小时后停止重发。我的触发器无限期地重新发送,我试图找到一种等待的方法,这样它只能在 24 小时内发送 3 次,例如每 8 小时一次。

最佳答案

@grigriforce 击败了我 - 我还建议使用字段来计算重试次数,而不是简单的 bool 值。这是一个“批量化”触发器,其逻辑与您发布的逻辑基本相同:

trigger trgBouncedEmails on EmailMessage (after insert) {
List<Id> parentCaseIds = new List<Id>();
for ( EmailMessage myEmail : trigger.New ) {
// mail box full bounced email for Financial Review emails
if ( myEmail.HtmlBody.contains('full') && myEmail.Subject.contains('Financial Review') )
parentCaseIds.add(myEmail.ParentId);
}
Case[] parentCases = [select c.Id from Case c where c.Id in :parentCaseIds];
for ( Case c : parentCases ) {
c.Resend_Email_Count__c += 1; // this will trigger workflow to send the email again
c.Resend_Email_Time__c = System.now(); // keep track of when it was last retried
}
update parentCases;
}

在 24 小时内均匀更新空间电子邮件:

重新设计您的工作流程,以确保自 Resend_Email_Time__c 以来已经过去了 8 小时最后设置,然后安排 Apex 作业每小时运行一次,以挑选需要重新发送电子邮件的符合条件的案例,并调用更新以确保工作流程不会在没有触发的情况下持续太长时间:
global class ResendCaseEmails implements Schedulable {
global void execute(SchedulableContext sc) {
Contact[] cs = [select id, Resend_Email_Count__c, Resend_Email_Time__c from Contact where Resend_Email_Count__c < 4];
List<Contact> ups = new List<Contact>();
for ( Contact c : cs ) {
if ( c.Resend_Email_Time__c != null && c.Resend_Email_Time__c.addHours(8) < System.now() )
ups.add(c);
}
update ups;
}
}

**请注意,将此代码放在实现 Schedulable 的类中并不是最佳实践 - 理想情况下,此代码应位于由 ResendCaseEmails 调用的另一个类中。类。

您可以通过从开发人员控制台调用此代码来安排此作业每小时运行一次:
ResendCaseEmails sched = new ResendCaseEmails();
String cron = '0 0 * * * ?';
System.schedule('Resend Case Email Job', cron, sched);

关于salesforce - 使用 Salesforce 触发器退回电子邮件处理邮箱已满,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11671856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com