Salesforce Governor Limits do not allow more than 10 calls to \``++Messaging.sendEmail++`` in a single transaction. There is a good chance that calling this method in a loop will reach that limit and fail. You can instead send a batch of emails with a single call to \``++Messaging.sendEmail++``.


This rule raises an issue when a call to ``++Messaging.sendEmail++`` is found in a loop.

 


== Noncompliant Code Example

----
trigger MyWelcomeTrigger on Contact (after insert) {
    List<Id> toIds = new List<Id>(); 
    for (Contact contact : trigger.new)
    {
        if(contact.Email != null)
        {
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); 
        	String[] toAddresses = new String[] { contact.email }; 
        	mail.setToAddresses(toAddresses); 
        	mail.setSubject('Welcome'); 
        	mail.setPlainTextBody('Welcome'); 
        	Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });  // Noncompliant
        }
}
----


== Compliant Solution

----
trigger MyWelcomeTrigger on Contact (after insert) {
    List<Id> toIds = new List<Id>(); 
    for (Contact contact : trigger.new)
    {  
        if(contact.Email != null)
        {
            toIds.add(contact.Id);
        }
    }
    string templateName = 'Welcome Email Template';
    EmailTemplate template = [select Id, Name from EmailTemplate where name = :templateName];
    Messaging.MassEmailMessage mail = new Messaging.MassEmailMessage(); 
    mail.setTargetObjectIds(toIds);
    mail.setTemplateId(template.Id);
    Messaging.sendEmail(new Messaging.MassEmailMessage[] { mail }); 
}
----


== See

* https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm[Execution Governors and Limits]

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::message.adoc[]

include::highlighting.adoc[]

endif::env-github,rspecator-view[]
