Jump to content
Saragoca

Código de fonte para enviar SMS para telemóveis da vodafone

Recommended Posts

Saragoca

Bom dia a todos,

estou a desenvolver uma aplicação em C# e a mesma após o registo de uma ocorrência manda emails para os responsáveis pela análise.

Para além disto gostaria de lhes mandar SMS para os Telemóveis, que são todos Vodafone, uma vez que nem sempre têm o computador á mão

Alguém me pode ajudar?

Desde já agradeço

Um Abraço

Share this post


Link to post
Share on other sites
kongas

Olá,

Ainda este fim de semana estive de volta disso!

No meu caso, para mim que recorri a um smartphone ainda com windows mobile ligado ao pc para enviar sms's, recorri a uma DLL disponibilizada pela própria MS, mas durante a pesquisa, tanto para a maioria dos telemoveis como para pen's 3G, a comunicação é realizada pela emulação de uma porta sério por cima do usb. Utilizando a porta série é só enviar comandos AT para lá.

Procura por comandos AT e aqui fica um exemplo:

        private SerialPort SMSPort;
        private Thread SMSThread;
        private Thread ReadThread;
        public static bool _Continue = false;
        public static bool _ContSMS = false;
        private bool _Wait = false;
        public static bool _ReadPort = false;

        public delegate void SendingEventHandler(bool Done);
        public event SendingEventHandler Sending;
        public delegate void DataReceivedEventHandler(string Message);
        public event DataReceivedEventHandler DataReceived;

        public sms(ref string COMMPORT)
        {
            SMSPort = new SerialPort();
            SMSPort.PortName = COMMPORT;
            SMSPort.BaudRate = 19200;
            SMSPort.Parity = Parity.None;
            SMSPort.DataBits = 8;
            SMSPort.StopBits = StopBits.One;
            SMSPort.Handshake = Handshake.RequestToSend;
            SMSPort.DtrEnable = true;
            SMSPort.RtsEnable = true;
            SMSPort.NewLine = System.Environment.NewLine;
            ReadThread = new Thread(
                new System.Threading.ThreadStart(ReadPort));

        }


        public bool SendSMS(string CellNumber, string SMSMessage)
        {
            string MyMessage = null;
            //Check if Message Length <= 160


            if (SMSMessage.Length <= 160)
                MyMessage = SMSMessage;
            else
                MyMessage = SMSMessage.Substring(0, 160);
            if (SMSPort.IsOpen == true)
            {

                SMSPort.WriteLine("AT" + System.Environment.NewLine);
                SMSPort.WriteLine("AT+CMGF=1" + System.Environment.NewLine);

                SMSPort.WriteLine("AT+CMGS=\"" + CellNumber + "\",129");
                _ContSMS = false;
                SMSPort.WriteLine(MyMessage + System.Environment.NewLine + (char)(26));


                if (Sending != null)
                {
                    Sending(false);
                    MessageBox.Show("Command NOT Executed");
                }
                else
                    MessageBox.Show("Command Executed");
            }
            else
            {
                MessageBox.Show("Not open");
            }

            return false;
        }


        private void ReadPort()
        {
            string SerialIn = null;
            byte[] RXBuffer = new byte[sMSPort.ReadBufferSize + 1];
            string SMSMessage = null;
            int Strpos = 0;
            string TmpStr = null;
            while (SMSPort.IsOpen == true)
            {
                if ((SMSPort.BytesToRead != 0) & (SMSPort.IsOpen == true))
                {
                    while (SMSPort.BytesToRead != 0)
                    {
                        SMSPort.Read(RXBuffer, 0, SMSPort.ReadBufferSize);
                        SerialIn =
                            SerialIn + System.Text.Encoding.ASCII.GetString(
                            RXBuffer);
                        if (SerialIn.Contains(">") == true)
                        {
                            _ContSMS = true;
                        }
                        if (SerialIn.Contains("+CMGS:") == true)
                        {
                            _Continue = true;
                            if (Sending != null)
                                Sending(true);
                            _Wait = false;
                            SerialIn = string.Empty;
                            RXBuffer = new byte[sMSPort.ReadBufferSize + 1];
                        }
                    }
                    if (DataReceived != null)
                        DataReceived(SerialIn);
                    SerialIn = string.Empty;
                    RXBuffer = new byte[sMSPort.ReadBufferSize + 1];
                }
            }
        }

        public void Open()
        {
            if (SMSPort.IsOpen == false)
            {
                SMSPort.Open();
                ReadThread.Start();
            }
        }

        public void Close()
        {
            if (SMSPort.IsOpen == true)
            {
                SMSPort.Close();
            }
        }    

Espero ter ajudado...

Share this post


Link to post
Share on other sites
cffm

Tal como o @kongas disse podes fazê-lo com um telemóvel ligado por usb, pois o C# reconhece-te como uma porta série. Eu fiz isso há pouco tempo com um telemóvel simples (optimus vegas), pois apenas necessitas dos comando AT para enviar sinais.

Share this post


Link to post
Share on other sites
Saragoca

quando o código chega a este comando

"  SMSPort.WriteLine("AT+CMGS=" + CellNumber + "r");"

volta á janela de envio e não passa disso podem me dizer porquê?

Share this post


Link to post
Share on other sites
Saragoca

ou melhor quando lançamos os argumentos para o "SendSMS" ele corre o código correspondente e ao chegar a

SMSPort.WriteLine("AT" + System.Environment.NewLine);

volta á janela que gerou o envio da mensagem e não passa daí, porque será?

Share this post


Link to post
Share on other sites
kongas

É assim,

eu não implementei esse código nem tenho forma de o fazer entretanto, mas o facto de ter esse comportamento, parece-me que terá a ver com a comunicação série... Tens a certeza que existe comunicação com o dispositivo?

Eu sugiro que vás à pagina deste código, em http://www.codeproject.com/KB/IP/Sending_SMS_using_Net.aspx, e que testes com o software que lá está, se der, então tens de ver o que tens diferente...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.