This page may help: http://msdn2.microsoft.com/en-us/library/bb463982.aspx
Basically a POST is always an insert under the Parent specified by the URI. For example you can post a new contact under the /contacts URI. The ContactID is generated automatically by the service and you will see that if you run a GET on the same URI.
Emails and Phones are collections within a Contact, so when inserting a new Email address or Phone number, you have to specify which Contact to add the email or phone into. For example, you can post a new email like this: /contacts/contact(<contactid>)/emails. In this example, the <contactid> is the guid you received from the service beforehand, by issueing a GET to obtain the IDs of all of the contacts to determine which one to add the email to.
So, a POST is like an Insert under the URI and a PUT is an update at the URI.
There is an issue with error codes right now for security reasons apparently, which means that everything is coming back as 403 regardless of the actual error. It's not ideal, but it does mean there is a problem with your call.
You are actually trying to add Email addresses to an existing Contact, which is covered in the SDK here: http://msdn2.microsoft.com/en-us/library/bb463977.aspx
You'll see that there is a limit of one instance per POST, and you are in fact trying to add more than one email address in a single POST call.
I would (1) edit the URI to go down to the level you are inserting i.e. the Emails and (2) edit the body to one at a time e.g.
POST /myEmail@hotmail.com/LiveContacts/contacts/contact(a837234-79fc-45ab-8924-faf1112057cc)/emails HTTP/1.1
<Email>
<EmailType>EmailType</EmailType>
<Address>blasmo@junkjunk.com</Address>
</Email>
This may actually be down to the Email Type you are using: "EmailType". I had assumed this was changed in your example and didn't look at it specifically, but EmailType is an enumeration and therefore fixed to certain types.
At this time, you can only use the following types (from http://msdn2.microsoft.com/en-us/library/bb447750.aspx):
Well now you're getting it because you chose WindowsLiveID and the email address you are inserting isn't a Windows Live ID. In order to use that particular Email Type it has to be a registered Windows Live ID otherwise it will fail.
The other Email Types are not verified in this way though, so you could use other types.
fredb86:
Thanks for your feedback for the articles. I took note of your comments and will pass them to the writer to conrrect any error.
I edited your postings to replace the value of your real domain authentication token with a placeholder. Even if you are using test accounts, it is better not to share your credentials on a public share.
Were you able to solve the 403 issue you had