[OT] Enviar SMS em massa

1,717 views
Skip to first unread message

Evandro Choma

unread,
Sep 27, 2012, 3:36:49 PM9/27/12
to androidb...@googlegroups.com
Boa tarde amigos

Estou precisando de uma APP gostaria de saber se alguem conhece alguma que exista.
Preciso enviar SMS em massa, tenho uma lista de 15 mil números de telefones celulares e gostaria de enviar uma mensagem igual para todos, então precisaria de uma APP que populasse uma base via CSV ou TXT e depois eu escreveria a mensagem e pediria para enviar, o programa ficaria rodando de forma a enviar os SMS a todos os números cadastrados.

Alguem conhece algo similar?

Não precisa ser gratuito eu tenho uma plano de SMS no meu chip.


Obrigado
Evandro Choma

Ernani Joppert Pontes Martins

unread,
Sep 27, 2012, 3:46:59 PM9/27/12
to androidb...@googlegroups.com
Sei que há pessoas obtendo ilegalmente o IMEI dos aparelhos e enviando mensagens em massa via células de torre celular. principalmente candidatos políticos.

Isso além de ser crime, vai dar o que falar.

Honestamente, nada pessoal mas, acredito que a cada pessoa que envia e-mail ou algo em massa morrem 2 gatinhos por dia...

[]'s

Ernani

2012/9/27 Evandro Choma <evandr...@gmail.com>

Evandro Choma

--
 
 

Evandro Choma

unread,
Sep 27, 2012, 4:00:18 PM9/27/12
to androidb...@googlegroups.com
Temos uma lista de telefones e o plano de SMS bom, mas pelo tablet digita-se a mensagem e envia para até 50 numeros no máximo, dai precisa digitar a mensagem novamente para enviar para os próximo, mas a quantidade de contatos chegou a um número inviável para tal operação. precisava de algo mais profissional, que digitava uma vez e enviava para todos os contatos de um grupo.
Algo similar ao que encontro no programa POMMO para envio de e-mail.

Abraços
Evandro Choma


--
 
 



--
[]´s
Evandro Choma
Engenheiro da Computação

--

PS:  ME PROTEJA COMO EU PROTEGI VOCE!
Se você pretende redirecionar este e-mail, por favor, apague todos os  endereços que aparecem nele. Contribua para a preservação da intimidade e sigilo individual. Outra dica de segurança é endereçá-lo no Cco ou Bcc. Desta forma, você estará protegendo a mim, seus amigos e a você mesmo. Eu, juntamente com a campanha contra a propagação de vírus, agradeço sinceramente.

Maicon Strey

unread,
Sep 27, 2012, 4:14:28 PM9/27/12
to androidb...@googlegroups.com
Evandro,
Preciso concordar com o Ernani, cada vez que alguém envia SMSs ou emails em massa, morrem 2 gatinhos:


Mas como não sei qual a finalidade do que tu quer vou acreditar que seja algo que os destinatários realmente querem muito receber!! E certamente autorizaram o envio destas mensagens para os números deles então segue duas dicas:


E sempre existe alguém que pode oferecer o serviço profissional que tu quer:

Espero que te ajude e que os apps sejam utilizados com responsabilidade.

Maicon Strey
Novo Hamburgo - RS - Brasil
------------------
Linux user: #525086
Frase de todos os dias: "Se não mandar o log eu não ajudo!"



2012/9/27 Evandro Choma <evandr...@gmail.com>
--
 
 

Marcelo Henrique

unread,
Jun 1, 2013, 9:26:43 AM6/1/13
to androidb...@googlegroups.com
Duplicado!


Em 1 de junho de 2013 10:22, Renato Mateus <renato...@gmail.com> escreveu:
Pessoal, poderiam me ajudar? Estou com um problema semelhante, entretanto, preciso fazer isso para uma clientela FIXA da minha pizzaria. www.JardimDaPizza.com.br. O que ocorre é.

Através de um webservice, ele obterá uma lista de telefones a enviar, e irá processar. Isto tudo, está fazendo certo, preciso ter um retorno de delivery e resposta mesmo para cadastrar o cliente em eventos realizados pela pizzaria.

Mas, quando no emulador funciona perfeitamente, no celular. GALAXY NOTE 2 é derrubado, também testei no milestone da motorolla e derruba também. segue codigo:


/*Classe que efetua todo o processo, inclusive o webservice.*/

```
package com.example.multisend;

import java.util.ArrayList;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.telephony.TelephonyManager;
import android.telephony.SmsManager;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MultiSend extends Activity {
        ToggleButton btnIniciar;
        TextView txtStatus, txtContador;
        Thread t;
        private static final String SENT  = "SMS_SENT";
        private static final String DELIVERED = "SMS_DELIVERED";

        String URL = "http://10.0.2.2:65052/Operacional.asmx";

        String TEMP_URI = "MultiSend.info";

        String resultado = "";

        TelephonyManager tm;

        SmsManager sMessage;

        int _CONTADOR = 0;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.layout_multi_send);
                iniciarServico();
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.multi_send, menu);
                return true;
        }

        private void iniciarServico(){
                tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                txtStatus = (TextView) findViewById(R.id.txtStatus);
                txtStatus.setTextColor(Color.RED);
                txtStatus.setText("Serviço parado.");

                txtContador = (TextView) findViewById(R.id.txtContador);
                txtContador.setTextColor(Color.DKGRAY);


                btnIniciar = (ToggleButton) findViewById(R.id.btnIniciaServico);

                btnIniciar.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                iniciar();

                        }
                });
        }
        private void iniciar(){
                if(btnIniciar.isChecked()){
                        txtStatus.setTextColor(Color.GREEN);
                        txtStatus.setText("Serviço iniciado.");
                        getOrdens();
                }
                else{
                        txtStatus.setTextColor(Color.RED);
                        txtStatus.setText("Serviço interrompido.");
                }

        }
        private void servicoWeb(SoapObject request, String nameSpce, String metodo, String url, String soapAction, String property){
                try{

                        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                        envelope.dotNet = true;
                        envelope.setOutputSoapObject(request);

                        HttpTransportSE transporte = new HttpTransportSE(url, 6000);
                        transporte.call(soapAction, envelope);
                        SoapObject result = (SoapObject) envelope.getResponse();
                        retornoWS(result);

                }
                catch(Exception ex){
                        txtStatus.setTextColor(Color.RED);
                        txtStatus.setText(ex.getMessage().toString());
                }

        }

        private void registraAparelho(){
                Toast.makeText(this, "Por favor aguarde, estou registrando o aparelho.", Toast.LENGTH_SHORT).show();

                String nameSpace = TEMP_URI;
                String metodo = "xml_registraAparelho";
                String soapAction = "MultiSend.info/xml_registraAparelho";
                String property = "Retorno_SMS";

                SoapObject request = new SoapObject(nameSpace, metodo);
                        request.addProperty("marca", "Avulso");
                        request.addProperty("marca", "Modelo Avulso");
                        request.addProperty("numero", tm.getLine1Number());
                        request.addProperty("imei", tm.getDeviceId());

                servicoWeb(request, nameSpace, metodo, URL, soapAction, property);

        }

        private void getOrdens(){
                Toast.makeText(this, "Por favor aguarde...", Toast.LENGTH_SHORT).show();
                String nameSpace = TEMP_URI;
                String metodo = "xml_getOrdensEnvio";
                String soapAction = "MultiSend.info/xml_getOrdensEnvio";
                String property = "Retorno_SMS";
                SoapObject request = new SoapObject(nameSpace, metodo);
                        request.addProperty("imei", tm.getDeviceId());

                servicoWeb(request, nameSpace, metodo, URL, soapAction, property);
        }
        private void retornoWS(SoapObject result){
                ArrayList<SMS> lista = new ArrayList<SMS>();
                int count = result.getPropertyCount();
                for (int i = 0; i< count; i++){
                        SoapObject soap = (SoapObject) result.getProperty(i);
                        if(soap.getProperty("Retorno_SMS").toString().equals("0031")){
                                reiniciaProcesso();
                        }
                        else if(soap.getProperty("Retorno_SMS").toString().equals("0034")){
                                registraAparelho();
                        }
                        else if(soap.getProperty("Retorno_SMS").toString().equals("0030")){
                                getOrdens();
                        }
                        else if(soap.getProperty("Retorno_SMS").toString().equals("0000")){
                                Toast.makeText(this, "Por favor aguarde, preparando envio.", Toast.LENGTH_SHORT).show();
                                int id = Integer.parseInt(soap.getProperty("ID_SMS").toString());
                                String texto = soap.getProperty("Texto_SMS").toString();
                                String numero = soap.getProperty("Numero_SMS").toString();
                                String data = soap.getProperty("DataHoraRequisicao_SMS").toString();
                                int id_parceiro = Integer.parseInt(soap.getProperty("ID_Parceiro").toString());
                                SMS sms = new SMS(id, texto, numero, data, id_parceiro, "");
                                lista.add(sms);
                                if(!lista.isEmpty()){
                                        iniciaProcessoEnvio(lista);
                                        lista.clear();
                                }
                        }
                        else if(soap.getProperty("Retorno_SMS").toString().equals("0001")){
                                Toast.makeText(this, "Sem ordens para enviar", Toast.LENGTH_SHORT).show();
                                reiniciaProcesso();
                        }
                        else{
                                txtStatus.setText(soap.getProperty("Retorno_SMS").toString());
                        }
                        /*Fim do Loop*/
                }
                /*Chama a função para dar início ao envio*/

        }
        private void iniciaProcessoEnvio(ArrayList<SMS> lista){
                Toast.makeText(this, "Enviando mensagem...", Toast.LENGTH_SHORT).show();
                int contador = lista.size();
                for (int i = 0; i<contador; i++){
                        enviaMensagem(lista.get(i).Numero_SMS, lista.get(i).Texto, lista.get(i).ID_SMS);
                }
        }
        private void enviaMensagem(String numero, String texto, int id){
                try{
                        PendingIntent sendPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT).putExtra("ID_SMS", id), 0);
                        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED).putExtra("ID_SMS", id), 0);
                        registerReceiver(new BroadcastReceiver() {

                                @Override
                                public void onReceive(Context context, Intent intent) {
                                        switch(getResultCode()){
                                        case Activity.RESULT_OK:
                                                atualizaStatus("Mensagem Enviada", "envio", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                                                atualizaStatus("Erro no envio da mensagem", "envio", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        case SmsManager.RESULT_ERROR_NO_SERVICE:
                                                atualizaStatus("Sem serviço", "envio", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        case SmsManager.RESULT_ERROR_NULL_PDU:
                                                atualizaStatus("Erro de PDU", "envio", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        }
                                        unregisterReceiver(this);
                                }

                        }, new IntentFilter(SENT));


                        registerReceiver(new BroadcastReceiver() {

                                @Override
                                public void onReceive(Context context, Intent intent) {
                                        switch(getResultCode()){
                                        case Activity.RESULT_OK:
                                                atualizaStatus("Mensagem entregue", "recebimento", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        case Activity.RESULT_CANCELED:
                                                atualizaStatus("Mensagem não entregue", "recebimento", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        }
                                        unregisterReceiver(this);
                                }
                        }, new IntentFilter(DELIVERED));
                        sMessage = SmsManager.getDefault();
                        sMessage.sendTextMessage(numero, null, texto, sendPI, deliveredPI);
                        _CONTADOR += 1;
                        txtContador.setText("Enviados até agora: "+String.valueOf(_CONTADOR));
                }
                catch(Exception ex){
                        txtStatus.setTextColor(Color.RED);
                        txtStatus.setText(ex.getMessage());
                }
        }

        private void atualizaStatus(String status, String tipo, int id){
                String metodo;
                if(tipo.equals("envio")){
                        metodo = "xml_atualizaStatusEnvio";
                }
                else{
                        metodo = "xml_atualizaStatusRecebimento";
                }

                String nameSpace = TEMP_URI;
                String soapAction = "MultiSend.info/"+metodo;
                String property = "Retorno_SMS";

                SoapObject request = new SoapObject(nameSpace, metodo);
                        request.addProperty("imei", tm.getDeviceId());
                        request.addProperty("status", status);
                        request.addProperty("id", id);

                servicoWeb(request, nameSpace, metodo, URL, soapAction, property);
                Toast.makeText(this, status, Toast.LENGTH_SHORT).show();
        }
        private void reiniciaProcesso(){
                try{
                  Handler r = new Handler();
                  r.postDelayed(new Runnable() {

                        @Override
                        public void run() {
                                getOrdens();
                        }
                }, 60 * 1000);

                }
                catch (Exception e) {

                }
        }


}

```
/*Agora a classe que registra quando o receptor respondeu o SMS*/

```
package com.example.multisend;

import java.util.ArrayList;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.telephony.SmsMessage;

import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver {

        String URL = "http://10.0.2.2:65052/Operacional.asmx";

        String TEMP_URI = "MultiSend.info";

        String resultado = "";


        @Override
        public void onReceive(Context context, Intent intent) {
                Bundle bundle = intent.getExtras();
                SmsMessage[] msg  = null;
                String str = "";
                String from = "";
                String texto = "";


                if(bundle != null){
                        Object[] pdus = (Object[]) bundle.get("pdus");
                        msg = new SmsMessage[pdus.length];

                        for(int i = 0; i<msg.length; i++){
                                msg[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                                from = msg[i].getOriginatingAddress();
                                texto = msg[i].getMessageBody();
                        }
                        atualizaRetornoSMS(from, texto);
                        Toast.makeText(context, "Retorno de: "+from, Toast.LENGTH_SHORT).show();

                }


        }

        private void atualizaRetornoSMS(String numero, String texto){

                String metodo = "xml_atualizaStatusRetornoSMS";

                String nameSpace = TEMP_URI;
                String soapAction = "MultiSend.info/"+metodo;
                String property = "Retorno_SMS";

                SoapObject request = new SoapObject(nameSpace, metodo);
                        request.addProperty("numero", numero);
                        request.addProperty("retorno", "SMS lido e respondido");
                        request.addProperty("texto", texto);

                servicoWeb(request, nameSpace, metodo, URL, soapAction, property);

        }

        private void servicoWeb(SoapObject request, String nameSpce, String metodo, String url, String soapAction, String property){
                try{

                        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                        envelope.dotNet = true;
                        envelope.setOutputSoapObject(request);

                        HttpTransportSE transporte = new HttpTransportSE(url, 6000);
                        transporte.call(soapAction, envelope);
                        SoapObject result = (SoapObject) envelope.getResponse();
                        //retornoWS(result);

                }
                catch(Exception ex){
                        new Exception(ex.getMessage());
                }

        }


}

```

Espero que alguém possa me ajudar. Não sei mais para onde ir aqui. Obriagdo a todos.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.





--
                                              - Marcelo Henrique -
  "Se não puder se destacar pelo talento, vença pelo esforço." (Dave Weinbaum)
              "Mate o pecado antes que ele o mate." ( Richard Baxter )

Rodrigo Alves da S. Cardoso

unread,
Jun 1, 2013, 9:30:04 AM6/1/13
to androidb...@googlegroups.com

Cara, eu já fiz algo parecido p uma empresa... Lá contratamos os serviços da www.SmsEmMassa.com onde geramos um arquivo txt com os tels e a msg e importamos p o site q se vira p enviar... Dependendo do plano sai a 0,05 centavos a sms... Dá uma olhada lá... Acho melhor gerar um txt simples do q quebrar a cabeça p fazer uma parada q já existe

Em 01/06/2013 10:23, "Renato Mateus" <renato...@gmail.com> escreveu:
Em quinta-feira, 27 de setembro de 2012 16h36min49s UTC-3, Evandro Choma  escreveu:

Renato Mateus

unread,
Jun 1, 2013, 9:44:15 AM6/1/13
to androidb...@googlegroups.com
Em quinta-feira, 27 de setembro de 2012 16h36min49s UTC-3, Evandro Choma escreveu:
Eu não entendo, vocês julgaram meus posts duplicados, e como fizeram isso nos 2, não terei resposta em nenhum dos dois!

Organização pessoal.
Nota: Não dupliquei o post, aproveitei o ensejo e respondi a pergunta do cara com meu código. Sele quiser usar, fica a vontade.

Renato Mateus

unread,
Jun 1, 2013, 9:45:40 AM6/1/13
to androidb...@googlegroups.com
Entendo, acho que seria uma boa. Mas quero fazer algo particular entende? Por isso estou quebrando a cabeça. Sei que posso fazer por comandos AT. E já estou até pensando nisto.

Maicon Strey

unread,
Jun 2, 2013, 1:49:38 PM6/2/13
to androidb...@googlegroups.com
Renato, quem está bagunçado é você!

Se você já pediu ajuda sobre um assunto em uma thread porque duplicar em outra? tu que deve se decidir por onde quer receber ajuda!

Concordo com o Marcelo, Post duplicado!


Maicon Strey
Novo Hamburgo - RS - Brasil
------------------
------------------
Linux user: #525086


2013/6/1 Renato Mateus <renato...@gmail.com>

Ernani Joppert Pontes Martins

unread,
Jun 2, 2013, 2:12:13 PM6/2/13
to androidb...@googlegroups.com
Como assim derruba? Derruba o q? O aparelho ou para de enviar?

Como vc teve a certeza que os SMS's não foram enviados?

Processando a flag de confirmação de leitura acredito que dê pra ter certeza que o SMS chegou ao seu destino.

Se o seu derruba significa que o aplicativo dá crash, precisamos entender o que vc está fazendo e aonde o erro acontece...

Se o app para de enviar SMS, vc deve estar entrando numa lista negra de sua operadora, portanto sugiro que envie 1 mensagem a cada 5 minutos ou faça de uma forma que você não sobrecarregue o seu próprio aparelho pra enviar.

Daí sugiro que se precisar enviar mais do que 1 mensagem por minuto, escalone em aparelhos diferentes com números diferentes, e assim por diante, logo terá um cluster de aparelhos com chips diferentes e dominará o mundo...muahauhauhua

Outra coisa, enviar mensagens indesejadas pode te acarretar problema, inclusive seus números podem ser bloqueados pela própria operadora, envie apenas à quem autorizou o envio.

[]'s

Ernani

2013/6/1 Renato Mateus <renato...@gmail.com>
Reply all
Reply to author
Forward
0 new messages