You need to sign in to do that
Don't have an account?
Apex emails not sent. No errors returned, success message received.
There's been a change in the Salesforce API that causes emails to not be sent when there are spaces around the email address string.
(Debug log message shown below)
This string of email addresses resulted in Email not sent -- ccAddresses: [tsailing.test1@gmail.com, tsailing.test2@gmail.com, tsailing.test3@gmail.com]
This string of email addresses resulted in Email sent -- ccAddresses: [tsailing.test1@gmail.com,tsailing.test2@gmail.com,tsailing.test3@gmail.com]
The main issue is that there will be NO ERRORS RETURNED OR DISPLAYED to inform users that their emails were not sent. In fact, the system WILL RETURN A SUCCESS MESSAGE.
Here's the debug message received -- (Messaging.SendEmailResult[getErrors=();isSuccess=true;])
This is NOT an acceptable API behavior.
Sample code used --
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); String toRecipients = 'tsailing.test1@gmail.com'; String[] toAddresses = toRecipients.split(';', 0); email.setToAddresses( toAddresses ); System.debug('------------------- 7/1/2012: toAddresses: '+toAddresses); String ccRecipients = 'tsailing.test2@gmail.com, tsailing.test3@gmail.com, tsailing.test4@hotmail.com'; String[] ccAddresses = ccRecipients.split(',', 0); //switched this to "ccRecipients.split(', ', 0)" resolved the issue. email.setCcAddresses(ccAddresses); System.debug('------------------- 7/1/2012: ccAddresses: '+ccAddresses); try { email.setSubject('test'); email.setPlainTextBody('test'); email.setBccSender(true); } catch (Exception e) { System.debug('------------------- 7/1/2012: e: '+e); } Messaging.SendEmailResult [] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email}); System.debug('------------------- 7/1/2012: r: '+r);
I just went through this with a client. took us all day to figure it out.
Was this documented somewhere?
I agree, not acceptable.
We added this to the code after the split(',');
for(String a : variable)
a = a.replace(' ','');
This will remove any spaces and still allow us to use the split ','
THANK YOU for posting this. I was also going insane trying to troubleshoot a client problem. Removing spaces from the email string was the solution.
I am also facing quite similar issue. I am sending emails using the below code:
for(Payment__c pay : lstOfPaymentsToProcess) {
EmailMessage emailMsg = new EmailMessage();
DateTime dt = null;
String approvalDate = '';
if((mapOfOppIdAndOpp.get(pay.CSAF_Number__c).Approval_Date__c)!= null) {
approvalDate = Date.newInstance((mapOfOppIdAndOpp.get(pay.CSAF_Number__c).Approval_Date__c).year(), (mapOfOppIdAndOpp.get(pay.CSAF_Number__c).Approval_Date__c).month(), (mapOfOppIdAndOpp.get(pay.CSAF_Number__c).Approval_Date__c).day()).format();
}
dt = pay.Date__c;
Date payDate = Date.valueOf(dt);
String[] ccAddresses = new String[]{'Fffinance@hindustantimes.com',mapOfOppIdAndOpp.get(pay.CSAF_Number__c).Owner.Email};
string emailHtmlBody = 'Hi All';
Messaging.SingleEmailMessage singleEmailMsg = new Messaging.SingleEmailMessage();
singleEmailMsg.setTargetObjectId(mapOfOppIdAndOpp.get(pay.CSAF_Number__c).Client__r.Key_Contact_Person__c);
singleEmailMsg.setCcAddresses(ccAddresses);
singleEmailMsg.setSubject('Cheque bounced against ' + mapOfOppIdAndOpp.get(pay.CSAF_Number__c).CSAF_No__c);
singleEmailMsg.setHtmlBody(emailHtmlBody);
lstOfMails.add(singleEmailMsg);
}
Messaging.sendEmail(lstOfMails);
All works good some times but some times it fails to send emails. Now this is a big issue for me to debug for the client as this is an intermittent issue and is not being reported daily. What can be the possible cause of it and any suggestions to resolve this would be of great help!
Thanks in Advance!
Hi,
you need to add '\\' in your split function like
toRecipients.split('\\;', 0);
Here is your Sample code:-
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String toRecipients = 'ankit.yadav@cloudanalogy.com';
String[] toAddresses = toRecipients.split('\\;', 0);
email.setToAddresses( toAddresses );
System.debug('------------------- 7/1/2012: toAddresses: '+toAddresses);
String ccRecipients = 'tsailing.test2@gmail.com, tsailing.test3@gmail.com, tsailing.test4@hotmail.com';
String[] ccAddresses = ccRecipients.split('\\,', 0); //switched this to "ccRecipients.split(', ', 0)" resolved the issue.
email.setCcAddresses(ccAddresses);
System.debug('------------------- 7/1/2012: ccAddresses: '+ccAddresses);
try {
email.setSubject('test');
email.setPlainTextBody('test body');
email.setBccSender(true);
} catch (Exception e) {
System.debug('------------------- 7/1/2012: e: '+e);
}
Messaging.SendEmailResult [] r =
Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});
System.debug('------------------- 7/1/2012: r: '+r);
Thanks.
And don't forget to mark it best answer.