Try to send
"AT+CMGS=<number><cr><message><ctrl-z>"
as one string.
You are using WriteLine which does append a <lf> itself which ends finally in that you send something like this *1):
"AT+CMGS=<number><cr><lf><message><ctrl-z><lf>"
*1)
string s2 = "AT+CMGS=" + messageLenght.ToString();
comport.WriteLine(s2 + (char)13);
comport.WriteLine(pdu + (char)26 );
Notes:
1.) I would also use comport.Write(string text) to be on the safe side.
2.) Check AT Response for "OK" instead of your Sleep(xxxx)
I hope this helps.