You need to sign in to do that
Don't have an account?
EchoMarc
Apex Email on Trigger not sending due to "Single email queued for send (pending commit)"
I wrote an update trigger (tried both before and after update) on Case that checks some conditions and sends an email to the Case contact if they are true.
PROBLEM: In the system logs, I’m seeing “Single email queued for send (pending commit)” and the email isn't sending.
Answers to obvious questions: I'm not seeing any errors in the logs, the trigger is firing okay and the field update I am doing in the trigger is happening.
Does anyone know why the email is not sending? Here's the code:
trigger CaseClosedEmail on Case (before update) {
List<Contact> cons;
List<EmailTemplate> et = [Select Id From EmailTemplate Where DeveloperName ='CustomerSupportClose'];
Set<Id> conIds = new Set<Id>();
Map<Id, String> conInfo = new Map<Id, String>();
//Put contactId of each case in a set so we can query the contacts
for(Case c : trigger.new){
conIds.add(c.ContactId);
}
//Get all the contacts of closed cases
cons = [Select Id, Email From Contact Where Id in :conIds];
//Put those contact IDs and their emails in a map
if(cons.size() > 0 ){
for(Contact c : cons){
conInfo.put(c.Id, c.Email);
}
}
for(Case c: trigger.new){
if(c.Status == 'Closed'
&& conInfo.containsKey(c.ContactId)
&& et.size() == 1
&& c.Con_Close_Email_Sent__c == false){
// Create a new single email message object
// that will send out a single email to the addresses in the To list.
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
// Strings to hold the email addresses to which we are sending the email.
String[] toAddresses = new String[] {conInfo.get(c.ContactId)};
// Assign the addresses for the To and CC lists to the mail object.
mail.setToAddresses(toAddresses);
// Specify the address used when the recipients reply to the email.
mail.setReplyTo('support@genomequest.com');
// Specify the name used as the display name.
mail.setSenderDisplayName('Genome Quest Support');
// Specify the subject line for your email address.
//mail.setSubject('Your case ' + c.Id + 'has been closed');
// Don't append the salesforce.com email signature to the email.
mail.setUseSignature(false);
//The IDs to ensure that merge fields in the template contain the correct data.
mail.setTargetObjectId(c.ContactId);
mail.setWhatId(c.Id);
// Specify the template content of the email.
mail.setTemplateId(et[0].Id);
// Send the email you have created.
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
c.Con_Close_Email_Sent__c = true;
}
}
}
PROBLEM: In the system logs, I’m seeing “Single email queued for send (pending commit)” and the email isn't sending.
Answers to obvious questions: I'm not seeing any errors in the logs, the trigger is firing okay and the field update I am doing in the trigger is happening.
Does anyone know why the email is not sending? Here's the code:
trigger CaseClosedEmail on Case (before update) {
List<Contact> cons;
List<EmailTemplate> et = [Select Id From EmailTemplate Where DeveloperName ='CustomerSupportClose'];
Set<Id> conIds = new Set<Id>();
Map<Id, String> conInfo = new Map<Id, String>();
//Put contactId of each case in a set so we can query the contacts
for(Case c : trigger.new){
conIds.add(c.ContactId);
}
//Get all the contacts of closed cases
cons = [Select Id, Email From Contact Where Id in :conIds];
//Put those contact IDs and their emails in a map
if(cons.size() > 0 ){
for(Contact c : cons){
conInfo.put(c.Id, c.Email);
}
}
for(Case c: trigger.new){
if(c.Status == 'Closed'
&& conInfo.containsKey(c.ContactId)
&& et.size() == 1
&& c.Con_Close_Email_Sent__c == false){
// Create a new single email message object
// that will send out a single email to the addresses in the To list.
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
// Strings to hold the email addresses to which we are sending the email.
String[] toAddresses = new String[] {conInfo.get(c.ContactId)};
// Assign the addresses for the To and CC lists to the mail object.
mail.setToAddresses(toAddresses);
// Specify the address used when the recipients reply to the email.
mail.setReplyTo('support@genomequest.com');
// Specify the name used as the display name.
mail.setSenderDisplayName('Genome Quest Support');
// Specify the subject line for your email address.
//mail.setSubject('Your case ' + c.Id + 'has been closed');
// Don't append the salesforce.com email signature to the email.
mail.setUseSignature(false);
//The IDs to ensure that merge fields in the template contain the correct data.
mail.setTargetObjectId(c.ContactId);
mail.setWhatId(c.Id);
// Specify the template content of the email.
mail.setTemplateId(et[0].Id);
// Send the email you have created.
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
c.Con_Close_Email_Sent__c = true;
}
}
}
. I am having the same trouble. Was it the subject after all?