Email Services : Apex Class to unsubscribe Email

In Continuation to the Previous Blog i have written Titled  ,

Email Services in Salesforce with a simple example (https://wordpress.com/post/teamforcesite.wordpress.com/566)

Here is a requirement which can apply to almost any usage of the email services feature of salesforce . The unsubscribe Email functionality , is the feature by code where you can give your users an option to unsubscribe to further marketing emails from this address , Or our salesforce org.

Companies that send marketing email to their customers and prospects need to provide a way to let the recipients unsubscribe.
The following is an example of how an email service can process unsubscribe requests.
The code searches the subject line of inbound email for the word “unsubscribe.”
If the word is found, the code finds all contacts and leads that match the From email address and sets theEmail Opt Out field (HasOptedOutOfEmail) to True.

Scenario  : Handle Unsubscribe Email

 Global class unsubscribe implements Messaging.inboundEmailHandler {
 Global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email,
 Messaging.InboundEnvelope env) {

 // Create an inboundEmailResult object for returning
 // the result of the email service.
 Messaging.InboundEmailResult result = new Messaging.InboundEmailResult();

 // Create contact and lead lists to hold all the updated records.
 List<Contact>lc = new List<contact>();
 List<Lead>ll = new List<lead>();

 // Convert the subject line to lower case so the program can match on lower case.
 String mySubject = email.subject.toLowerCase();
 // The search string used in the subject line.
 String s = 'unsubscribe';

 // Check the variable to see if the word unsubscribe was found in the subject line.
 Boolean unsubMe;
 // Look for the word unsubcribe in the subject line.
 // If it is found, return true; otherwise, return false.
 unsubMe = mySubject.contains(s);

 // If unsubscribe is found in the subject line, enter the IF statement.
 if (unsubMe == true) {
 try {
 // Look up all contacts with a matching email address.
 for (Contact c: [SELECT Id, Name, Email, HasOptedOutOfEmail
 FROM Contact
 WHERE Email = : env.fromAddress
 AND hasOptedOutOfEmail = false
 LIMIT 100
 ]) {
 // Add all the matching contacts into the list.
 c.hasOptedOutOfEmail = true;
 // Update all of the contact records.
 update lc;
 } catch (Exception e) {
 System.debug('Contact Issue: ' + e);
 try {
 // Look up all leads matching the email address.
 for (Lead l: [SELECT Id, Name, Email, HasOptedOutOfEmail
 FROM Lead
 WHERE Email = : env.fromAddress
 AND isConverted = false
 AND hasOptedOutOfEmail = false
 LIMIT 100
 ]) {
 // Add all the leads to the list.
 l.hasOptedOutOfEmail = true;
 System.debug('Lead Object: ' + l);
 // Update all lead records in the query.
 update ll;
 } catch (Exception e) {
 System.debug('Lead Issue: ' + e);

 System.debug('Found the unsubscribe word in the subject line.');
 } else {
 System.debug('No Unsuscribe word found in the subject line.');
 // Return True and exit.
 // True confirms program is complete and no emails
 // should be sent to the sender of the unsubscribe request.
 result.success = true;
 return result;

Create this class and assign it to the Email Service you have configured.
This will automatically receive the emails and on receiving an email
with subject ‘Unsubscribe’ will search for contacts and leads and
Check the ‘hasOptedOutOfEmail’ checkbox Field to be true.

Happy Coding!!!

2 thoughts on “Email Services : Apex Class to unsubscribe Email

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s