1

I am trying to send an email with Apex code, and I have an ID to Set of Emails map called:

id_email_map

and it looks something like:

ID1 - {email1@test.com, email2@test.com}
ID2 - {}
ID3 - {email1@test.com}

In my code I now want to send one specific email to all the addresses in ID1, no email to ID2 (because it doesn't have an email address), and one specific email to all addresses of ID3.

In my code I write:

for (Id id : id_email_map.keySet())
{

    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

    //get email addresses for specific id
    //I think here is my first problem, because when I debug
    //the size of toAddresses is always 1
    List<String> toAddresses = new List <String> (id_email_map.get(id));

    //and the second problem is, since toAddresses.size is always 1,
   // the if statement doesnt catch the null case

    if (toAddresses.size() >= 1)
    {
        mail.setToAddresses(toAddresses);

        mail.setReplyTo('test@test.com');
        mail.setSenderDisplayName('Ms Reena'); 
        mail.setSubject('Test Email'); 
        mail.setPlainTextBody('This is a test email'); 
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
    }

}

Any help would be greatly appreciated. Thanks, Reena.

user8737
  • 823
  • 2
  • 12
  • 21
  • Are you sure that id_email_map is exactly same as you described above? – AtulRajguru9 Jun 10 '14 at 10:41
  • Yes, actually I noticed that the toAddresses do have the right amount of email addresses. The only problem now is, even if no email address is contained in toAddresses, then the size is 1 anyway. – user8737 Jun 10 '14 at 10:47
  • There must be empty string in your map and that is why its its showing size as one – AtulRajguru9 Jun 10 '14 at 10:51
  • Try debugging your code. Adding System.debug(toAddresses); will print out the contents and you should be able to figure out what's going on. See this question for more info: http://salesforce.stackexchange.com/questions/36582/how-do-i-start-to-debug-my-own-apex-code – BarCotter Jun 10 '14 at 11:39

1 Answers1

2

I just wrote slimier code and it shows correct size:

Map<String, List<String>> id_email_map = new map<String, List<String>>();
List<String> l = new List <String> ();
l.add('aa@test.com');
l.add('bb@test.com');
id_email_map.put('1',l);
List<String> toAddresses = new List <String> (id_email_map.get('1'));
System.debug(toAddresses.size());

This means that there is issue with your variable id_email_map.

Check the contains of id_email_map

For empty string in list it will show size as one:

Map<String, List<String>> id_email_map = new map<String, List<String>>();
List<String> l = new List <String> ();
id_email_map.put('1',l);
List<String> toAddresses = new List <String> (id_email_map.get('1'));
System.debug(toAddresses.size());//Shows size 0

l.add(''); //empty string
id_email_map.put('1',l);
toAddresses = new List <String> (id_email_map.get('1'));
System.debug(toAddresses.size()); //Shows size 1
AtulRajguru9
  • 9,110
  • 3
  • 28
  • 66
  • Yes, thank you very much. I did add an empty string and it showed up as 1. I now understand what the problem is and the above code is actually correct. – user8737 Jun 10 '14 at 12:45