Yo utilizo los servicios de una pasarela, un broker, de envío de mensajes lo que tiene obviamente sus ventajas y sus inconvenientes, cada uno que valore lo que más le interesa en cada caso, os pongo el código que utilizo, se ha usado Fox9, West Wind client Tools para el envío y Chilkat para el formato de los mensajes.
En este caso lo que se hace es un post a un servicio Web que es el que al final manda el SMS, te ahorras todos los problemas de gestión de puertos com.
Compañeros míos lo que hicieron en otro caso fue colocar varios móviles, uno por operador, en un servidor con un servicio Web rodando al que los clientes hacían llamadas, vamos como si tu fueras el broker de mensajes, de esta forma también te quitas toda la gestión complicada en el cliente y la centralizas en un solo equipo con las ventajas de gestión que eso tiene.
Pepe Llopis
************************************************************
*** Manda un mensaje SMS directamente
*** lnAction: 1 = TASAR 2 = ENVIAR
************************************************************
FUNCTION _FFWK_SendSMSDirect
LPARAMETER lnAction, lcTelefono, lcMensaje
#define TASAR_SMS 1
#define ENVIAR_SMS 2
LOCAL loIP, lcControlString, lcServidor, lcPagina, lnResult, lcBuffer, lnSize, lcTextoError, lnCounter, llReturnValue
LOCAL lcChecksumCifrado, lcCheckSum
*** Crea el objeto charset que se va a usar para convertir de windows-1252 a iso-8859-1
loXCharsetFunctions = CREATEOBJECT( "XCharsetFunctions" )
*** Ahora convierto de windows-1252 a iso-8859-1
lcMensaje = loXCharsetFunctions.convertdata( lcMensaje, "windows-1252", "iso-8859-1" )
lcUserName = "USUARIO"
lcPassword = "CONTRASEÑA"
*** Busca los datos de conexión
***************************************
lcServidor = [bulksms.com.es] && Este es el que yo uso, pero hay muchos que ofrecen servicios similares
DO CASE
CASE lnAction = TASAR_SMS
lcPagina = ;
[eapi/submission/quote_sms/2/2.0?username=]+;
lcUserName+[&password=]+lcPassword+;
[&message=] +lcMensaje+ [&msisdn=]+lcTelefono
CASE lnAction = ENVIAR_SMS
lcPagina = ;
[eapi/submission/send_sms/2/2.0?username=]+;
lcUserName+[&password=]+lcPassword+;
[&message=] +lcMensaje+ [&msisdn=]+lcTelefono
ENDCASE
*** Crea el objeto de comunicaciones
loIP = CREATEOBJECT("wwHTTP")
IF VARTYPE( loIP ) != "O"
RETURN ""
ENDIF
loIP.nHTTPPort = 5567
lnresult = loIP.httpconnect(lcservidor)
IF lnresult != 0
RETURN loIP.cerrormsg
ENDIF
*********************************************************************
*** Ahora manda todo al Webservice y recibe la respuesta
*********************************************************************
lcbuffer = SPACE(500000)
lnsize = LEN(lcbuffer)
lnresult = loip.httpgetex(lcpagina,@lcbuffer,@lnsize)
lcTextoError = ""
IF VARTYPE( loIP )="O"
lctextoerror = loIP.cerrormsg
loIP.httpclose()
ELSE
RETURN ""
ENDIF
*** Libera el objeto IP
RELEASE loIP
RETURN lcbuffer
ENDFUNC