Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Daboi

Aplicação que envia SMS (projecto de final de curso)

Mensagens Recomendadas

Daboi    0
Daboi

Olá,

estou a realizar uma aplicação que envia sms para os encarregados de educação, quando por exemplo, vai haver uma reunião de pais, mas estou com alguma dificuldade em conseguir enviar as sms, e não faço ideia de como realizar isto.

Já vi que é possivel faze-lo atraves de um modem gsm, mas nao tenho financiamento para um, e não de nenhum gateway online grátis pelo qual possa pelo menos testar.

se me pudessem ajudar com pelo menos uma estrutura de código agradecia.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Daboi    0
Daboi

Álias a única dificuldade que tenho, é talvez a maior, que é a parte da comunicação da aplicação com o telemovel.

Ah e o progama está a ser realizado em C#.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
apocsantos    209
apocsantos

    Boa noite,

    Isso é bastante simples, a comunicação com o telemóvel é feita como se o mesmo fosse modem ligado a uma porta série.

//modulo com as funções de ligação a um modem GMS (telemovel), e envio de sms's
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO.Ports;
using System.Windows.Forms;
namespace SMS
{
    class SmsClass //cria a class smsClass
    {
        SerialPort serialPort;
        public SmsClass(string comPort)
        {
            this.serialPort = new SerialPort(); //abre uma nova porta serie 
            this.serialPort.PortName = comPort; //chama-lhe comPort
            this.serialPort.BaudRate = 9600; //define a BaudRate para 9600bps
            this.serialPort.Parity = Parity.None; // define a paridade como nenhuma
            this.serialPort.DataBits = 8; //define os bits de dados como 8 bits
            this.serialPort.StopBits = StopBits.One; // define o valor de stopbits como 1
            this.serialPort.Handshake = Handshake.RequestToSend; // define a forma com é feito o HandShake
            this.serialPort.DtrEnable = true; //activa o DTR
            this.serialPort.RtsEnable = true; //activa o RTS
            this.serialPort.NewLine = System.Environment.NewLine;
        }
        public bool sendSms(string telemovel, string sms) // envia sms
        {
            string messages = null; 
            messages = sms;
            if (this.serialPort.IsOpen == true) //valida se a porta serie está aberta
            {
                try
                {
                    this.serialPort.WriteLine("AT" + (char)(13)); // escreve na porta serie "AT + char(13)"
                    Thread.Sleep(4); //delay
                    this.serialPort.WriteLine("AT+CMGF=1" + (char)(13)); //escreve na porta serie "AT+CMGF=1 + char(13)"
                    Thread.Sleep(5); // delay
                    this.serialPort.WriteLine("AT+CMGS=\"" + telemovel + "\""); //Escreve na porta AT+CMGS=\"telemovel"\" 
                    Thread.Sleep(10); //delay
                    this.serialPort.WriteLine(">" + messages + (char)(26)); // escreve a mensagem na porta
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Source);
                }
                return true;
            }
            else
                return false;
        }

        public void Opens()
        {
            if (this.serialPort.IsOpen == false)
            {
                this.serialPort.Open();
            }
        }
        public void Closes()
        {
            if (this.serialPort.IsOpen == true)
            {
                this.serialPort.Close();
            }
        }
    }
}

    O exemplo acima deve chegar para perceberes como funciona. No futuro coloca duvidas mais concretas, e procura se o mesmo problema já não foi resolvido cá no fórum. Eu fiz uma pesquisa mínima, porque me recordei de ter respondido a isto antes, e não precisei de muito.

http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=427661

Cordiais cumprimentos,

Apocsantos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Daboi    0
Daboi

    Boa noite,

    Isso é bastante simples, a comunicação com o telemóvel é feita como se o mesmo fosse modem ligado a uma porta série.

//modulo com as funções de ligação a um modem GMS (telemovel), e envio de sms's
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO.Ports;
using System.Windows.Forms;
namespace SMS
{
    class SmsClass //cria a class smsClass
    {
        SerialPort serialPort;
        public SmsClass(string comPort)
        {
            this.serialPort = new SerialPort(); //abre uma nova porta serie 
            this.serialPort.PortName = comPort; //chama-lhe comPort
            this.serialPort.BaudRate = 9600; //define a BaudRate para 9600bps
            this.serialPort.Parity = Parity.None; // define a paridade como nenhuma
            this.serialPort.DataBits = 8; //define os bits de dados como 8 bits
            this.serialPort.StopBits = StopBits.One; // define o valor de stopbits como 1
            this.serialPort.Handshake = Handshake.RequestToSend; // define a forma com é feito o HandShake
            this.serialPort.DtrEnable = true; //activa o DTR
            this.serialPort.RtsEnable = true; //activa o RTS
            this.serialPort.NewLine = System.Environment.NewLine;
        }
        public bool sendSms(string telemovel, string sms) // envia sms
        {
            string messages = null; 
            messages = sms;
            if (this.serialPort.IsOpen == true) //valida se a porta serie está aberta
            {
                try
                {
                    this.serialPort.WriteLine("AT" + (char)(13)); // escreve na porta serie "AT + char(13)"
                    Thread.Sleep(4); //delay
                    this.serialPort.WriteLine("AT+CMGF=1" + (char)(13)); //escreve na porta serie "AT+CMGF=1 + char(13)"
                    Thread.Sleep(5); // delay
                    this.serialPort.WriteLine("AT+CMGS=\"" + telemovel + "\""); //Escreve na porta AT+CMGS=\"telemovel"\" 
                    Thread.Sleep(10); //delay
                    this.serialPort.WriteLine(">" + messages + (char)(26)); // escreve a mensagem na porta
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Source);
                }
                return true;
            }
            else
                return false;
        }

        public void Opens()
        {
            if (this.serialPort.IsOpen == false)
            {
                this.serialPort.Open();
            }
        }
        public void Closes()
        {
            if (this.serialPort.IsOpen == true)
            {
                this.serialPort.Close();
            }
        }
    }
}

    O exemplo acima deve chegar para perceberes como funciona. No futuro coloca duvidas mais concretas, e procura se o mesmo problema já não foi resolvido cá no fórum. Eu fiz uma pesquisa mínima, porque me recordei de ter respondido a isto antes, e não precisei de muito.

http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=427661

Cordiais cumprimentos,

Apocsantos

boas,

eu procurei mas nenhum respondia bem ao que eu queria, e peço desculpa se não fui muito concreto com a minha duvida.

O que eu queria nao era a ligação a um modem, pois nao tenho nenhum.

eu consegui enviar as mensagens através de um site, em que envio a mensagem para lá como e-mail e do website é enviada para o telemovel, ou seja funciona como gateway, mas é a pagar e apenas pude utilizar 4 sms grátis.

queria saber se há alguma maneira ou então um site em que dê para enviar as sms grátis. eu já pesquisei bastante, e a maior parte ou era a pagar ou nao tinha serviço para Portugal e tendo em conta que necessito de pelo menos 50 sms grátis, queria saber se existe alguma maneira além de utilizar o modem, ou o gateway online.

em baixo está o código que estou a utilizar:

//Enviar a sms através do site ipipi.com
            
            string toPhoneNumber = Numtxt.Text;
            string login = "****"//envia o login da conta
            string password = "******";// envia a password
            string compression = "OFF";//modo de compressao
            string body = Msgtxt.Text;//conteudo da mensagem
//Envio como e-mail para o site
            System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage();
            mail.To = toPhoneNumber + "@sms.ipipi.com";
            mail.From = login + "@ipipi.com";
            mail.Subject = compression;
            mail.Body = body;
            mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
            mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", login);
            mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password);


            System.Web.Mail.SmtpMail.SmtpServer = "ipipi.com";
            System.Web.Mail.SmtpMail.Send(mail);
        }

Mais uma vez obrigado, e peço desculpa pela falta de clareza da minha dúvida.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
apocsantos    209
apocsantos

    Boa tarde,

    Algumas operadoras têm a sua própria API de SMS's. Mas gratuito duvido muito que encontres.

    A questão do modem, tanto pode ser um telemóvel normal a servir de modem como uma Pen 3G, o funcionamento é o mesmo, ou eventualmente várias Pen 3G com cartões das várias operadoras, com tarifários de mensagens gratuitas para cada uma das operadoras, em que ele simplesmente retira-se o prefixo 9X ao numero para ver a que operadora está ligado o numero e envie a sms a partir do "modem" em que a mesma seja gratuita.

Cordiais cumprimentos,

Apocsantos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Daboi    0
Daboi

Boa tarde,

Então quer dizer, que por exemplo, uma pen da vodafone, daquelas que dá acesso à Internet, faz o mesmo que um modem gsm, desde que tenha um serviço de sms grátis para todas as redes?

E caso o seja, o codigo que me forneceste funciona da mesma forma, ou seja, tratar a pen como se fosse o modem?

Desculpa todas as minhas dúvidas, mas como disse o projecto na parte das comunicações está fora dos meus conhecimentos, apesar de  já entender um pouco mais sobre este tema. B)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
apocsantos    209
apocsantos

    Boa tarde,

    Basicamente uma Pen 3G de Internet seja de que operador for, é um modem USB ->GSM/GPRS/UMTS, como tal podes utiliza-la como um modem, padrão, com a diferença de que é um modem GSM e o código que tens acima permite envio de mensagens com uso a Modems GSM.

    Caso tenhas numa operadora serviço de SMS's gratuitas para todas as redes, colocas o cartão de telemóvel dessa operadora numa "PEN 3G" e podes enviar SMS's. Caso a operadora só te forneça SMS's gratuitas para a própria rede, que é o mais comum, alteras um bocadito o programa e basicamente quando passas o numero de telemóvel do destinatário para o programa, usas uma estrutura tipo case, em que retiras os primeiros 2 digitos (91, 92, 93, 96, 9X), para ver qual a operadora, e envias o sms pela "pen" que tiver um cartão com SMS's gratuitas para essa operadora, ficando assim o SMS a custo zero.

    Espero ter sido esclarecedor.

Cordiais cumprimentos,

Apocsantos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Cm Santos    0
Cm Santos

Olá.

Também tens este site  http://www.lusosms.com/ que tens uns pacotes interessante. E ainda. Caso tenhas um telemovel android tens estas apps https://market.android.com/details?id=eu.apksoft.android.smsgateway https://market.android.com/details?id=org.addhen.smssync que para uma fase de testes são mais que suficientes(julgo eu..).

Cumprimentos.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Daboi    0
Daboi

Tens outra opção, embora te possa sair um bocado mais cara. A sapo disponibiliza uma API para envio de SMS:

https://store.services.sapo.pt/en/Catalog/communication/sms-pack

Sendo esse um projecto de final de curso o preço é um bocado proibitivo, mas fica aqui a opção

É muito caro, só se a escola aceitar é que poderia utilizar isso. Mas sim é um opção a ter em conta.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Daboi    0
Daboi

Olá.

Também tens este site  http://www.lusosms.com/ que tens uns pacotes interessante. E ainda. Caso tenhas um telemovel android tens estas apps https://market.android.com/details?id=eu.apksoft.android.smsgateway https://market.android.com/details?id=org.addhen.smssync que para uma fase de testes são mais que suficientes(julgo eu..).

Cumprimentos.

Esse gateway já é mais acessível mas agora só daqui a um mês é que terei resposta para saber se pode ser um serviço pago ou não =/.

Obrigado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Daboi    0
Daboi

    Boa tarde,

    Basicamente uma Pen 3G de Internet seja de que operador for, é um modem USB ->GSM/GPRS/UMTS, como tal podes utiliza-la como um modem, padrão, com a diferença de que é um modem GSM e o código que tens acima permite envio de mensagens com uso a Modems GSM.

    Caso tenhas numa operadora serviço de SMS's gratuitas para todas as redes, colocas o cartão de telemóvel dessa operadora numa "PEN 3G" e podes enviar SMS's. Caso a operadora só te forneça SMS's gratuitas para a própria rede, que é o mais comum, alteras um bocadito o programa e basicamente quando passas o numero de telemóvel do destinatário para o programa, usas uma estrutura tipo case, em que retiras os primeiros 2 digitos (91, 92, 93, 96, 9X), para ver qual a operadora, e envias o sms pela "pen" que tiver um cartão com SMS's gratuitas para essa operadora, ficando assim o SMS a custo zero.

    Espero ter sido esclarecedor.

Cordiais cumprimentos,

Apocsantos

Por exemplo, esta pen iria funcionar correcto?

http://www.uzo.pt/pt/loja/equipamentos/caracteristicas/pen-huawei-e1550/pagina.uzo

e como é da uzo tem serviço para as 3 redes principais.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade