Many thanks for the suggested workaround of tricking the Imap object into sending what the server expects, this works perfectly.
If anybody else comes to read this thread, just for clarity;
the "\0" in the string below as per Lukas's reply is a literal null (Ascii character zero) in the middle of the username string.
So for example in C# use something like this;
thisImap.Login(sharedMailboxAlias.Text + "\0" + userName.Text, password.Text);