You need to sign in to do that
Don't have an account?
apex class to update Emailoptout checkbox directly if unsubscribe link is clicked, without Email popup
Hey guys,
i am new to the apex development, i am trying to design a apex code
where it should directly update emailoptout checkbox in lead and contact when unsubscribe link is clicked
i know there is an app exchange app called "Unsubscribe opt-out", i tried copying and modifying that code, when email comes
from my instance to my personal gmail, and when i click on unsubscribe link, unsubscribe email popup comes and i need to send another
mail and then emailoptout checkbox gets updated
i am new to the apex development, i am trying to design a apex code
where it should directly update emailoptout checkbox in lead and contact when unsubscribe link is clicked
i know there is an app exchange app called "Unsubscribe opt-out", i tried copying and modifying that code, when email comes
from my instance to my personal gmail, and when i click on unsubscribe link, unsubscribe email popup comes and i need to send another
mail and then emailoptout checkbox gets updated
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 Apex Email Service Messaging.InboundEmailResult result = new Messaging.InboundEmailResult(); // 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 I can match on lower case String mySubject = email.subject.toLowerCase(); // String I am searching for in the subject line String s = 'unsubscribe'; // Check variable to see if the word "unsubscribe" was found in the subject line Boolean unsubMe; // Look for the unsubcribe word in the subject line, // if it is found return true, otherwise false is returned unsubMe = mySubject.contains(s); // If unsubscribe is found in the subject line enter the if statement if (unsubMe == true) { try { // Lookup 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 contacts into the List c.hasOptedOutOfEmail = true; lc.add(c); } // update all the Contact records update lc; } catch (System.QueryException e) { System.debug('Contact Query Issue: ' + e); } try { // Lookup 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; ll.add(l); System.debug('Lead Object: ' + l); } // Update all Lead records in the query update ll; } catch (System.QueryException e) { System.debug('Lead Query 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 will confirm it is complete and no bounced email // should be send the sender of the unsubscribe request. result.success = true; return result; } // Test method to ensure you have enough code coverage // Have created two methods, one that does the testing // with a valid "unsubcribe" in the subject line // and one the does not contain "unsubscribe" in the // subject line static testMethod void testUnsubscribe() { // Create a new email and envelope object Messaging.InboundEmail email = new Messaging.InboundEmail() ; Messaging.InboundEnvelope env = new Messaging.InboundEnvelope(); // Create a new test Lead and insert it in the Test Method Lead l = new lead(firstName='Rasmus', lastName='Mencke', Company='Salesforce', Email='rmencke@salesforce.com', HasOptedOutOfEmail=false); insert l; // Create a new test Contact and insert it in the Test Method Contact c = new Contact(firstName='Rasmus', lastName='Mencke', Email='rmencke@salesforce.com', HasOptedOutOfEmail=false); insert c; // test with subject that matches the unsubscribe statement email.subject = 'test unsubscribe test'; env.fromAddress = 'rmencke@salesforce.com'; // call the class and test it with the data in the testMethod unsubscribe unsubscribeObj = new unsubscribe(); unsubscribeObj.handleInboundEmail(email, env ); } static testMethod void testUnsubscribe2() { // Create a new email and envelope object Messaging.InboundEmail email = new Messaging.InboundEmail(); Messaging.InboundEnvelope env = new Messaging.InboundEnvelope(); // Create a new test Lead and insert it in the Test Method Lead l = new lead(firstName='Rasmus', lastName='Mencke', Company='Salesforce', Email='rmencke@salesforce.com', HasOptedOutOfEmail=false); insert l; // Create a new test Contact and insert it in the Test Method Contact c = new Contact(firstName='Rasmus', lastName='Mencke', Email='rmencke@salesforce.com', HasOptedOutOfEmail=false); insert c; // Test with a subject that does Not contain unsubscribe email.subject = 'test'; env.fromAddress = 'rmencke@salesforce.com'; // call the class and test it with the data in the testMethod unsubscribe unsubscribeObj = new unsubscribe(); unsubscribeObj.handleInboundEmail(email, env ); } }