Okay, for anyone else that is interested, I finally figured this out. First my schema:
myFields
- CC (Group)
-- pc:Person
--- DisplayName
--- AccountId
--- AccountType
- CCConcat
- WorkEmail
To recap, I first added the GetUserProfileByName data connection using Clayton Cobb's awesome instructions here: http://claytoncobb.wordpress.com/tag/getuserprofilebyname/
Next, I set the default value of CCConcat to the double eval trick the People Picker field using Peter Northcott's method here: http://tinkerersjournal.blogspot.com/2013/01/codeless-double-eval.html. This pulls the AccountIds from the people picker and separates them with a semi-colon.
I then added the following action rules to my submit button at the bottom of the form:
Set a field's value: AccountName = substring-before(CCConcat, ";")
Query using a data connection: GetUserProfileByName
Set a field's value: WorkEmail = concat(WorkEmail, concat(Value[Name - "WorkEmail"], ";"))Then I set an action rule on the field WorkEmail with the condition of "CCConcat is not blank" and it reads:
Set a field's value: CCConcat = substring-after(CCConcat, ";")
Set a field's value: AccountName = substring-before(CCConcat, ";")
Query using a data connection: GetUserProfileByName
Set a field's value: WorkEmail = concat(WorkEmail, concat(Value[Name - "WorkEmail"], ";"))This causes the form to read the AccountIds in the CCConcat field and run them through GetUserProfileByName until the field is empty and place the results in the WorkEmail field.
Lastly, I told the send email data connection to simply populate from the WorkEmail field and boom, the emails sends properly.
Hope this helps someone else :-)