Ir al contenido


Foto

mañana si tengo tiempo posteo como enviar mail desde lazarus usando python


  • Por favor identifícate para responder
16 respuestas en este tema

#1 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 06 agosto 2011 - 06:38

Bueno harto de tratar de instalar indy en ubuntu, hice un script para enviar mail desde python me llevo un par de horas (copie de varias paginas un poco de cada lado pero esencialmente me termine quedando algo parecido de http://chuwiki.chuid..._python_y_gmail    se le puede agregar para enviar adjunto. ), y hice otro para recibir argumentos, mañana junto el script para recibir argumento y  lo llamo desde lazarus.
No lo hago ahora porque ya llega mi mujer con mi hijo y quiero dedicarle el tiempo a ellos que no lo vi en todo el día.

Creo que usar lazarus como diseñador de interfaz y python para tareas que me resulta dificil desde lazarus es el camino que voy a tomar,
:cool: debido a lo fácil de crear interfaz con lazarus y a lo fácil que es encontrar millones de script de python que hacen de todo.

recibir argumentos desde python
[c]
import sys
if len(sys.argv) < 4:
print "no hay argumentos suficientes"
sys.exit()
de = sys.argv[1]
para = sys.argv[2]
asunto = sys.argv[3]
texto = sys.argv[4]

print "de " + de
print "para " + para
print "asunto " + asunto
print "texto " + texto
[/c]


enviar mail desde python
[c]
#hice un apt-get install mimetext pero no se si es necesario, porque
#lo hice y segui probando hasta que lo hice andar.
import smtplib
from email.MIMEText import MIMEText

###### para recibir parametros #########3
#import sys
#for i in range(len(sys.argv)):
#    print '%s = %s'%(i,sys.argv[i])

#o simplemente :

#import sys
#print sys.argv


DE = 'martin.artaza@gmail.com'
CLAVE= 'xxxx'
PARA = 'martin_artaza@hotmail.com'

asunto = "asunto"
texto = "hola"

mensaje = MIMEText(texto)
mensaje['FROM'] = DE
mensaje['To'] = PARA
mensaje['Subject'] = asunto


server = smtplib.SMTP("smtp.gmail.com:587")
server.starttls()
server.login(DE,CLAVE)
server.sendmail(DE, PARA, mensaje.as_string())
server.quit()
[/c]



Espero que le sirva a alquien.

  • 0

#2 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 07 agosto 2011 - 07:21

Después de varios problemas para ejecutar python desde lazarus  8o| tuve que puentearlo.  :p
Resulta que en linux, para ejecutar un programa se utiliza la clase TProcess hay abundante documentación al respecto pero deja claro que "no es una consola", lo que quiere decir que solo ejecuta programas ejecutables (valga la redundancia), no executa script por ende no se puede ejecutar cosas como "clear" no hay forma, intente toda la noche  :s  , entonces me fue a dormir con una sonrisa en la cara  :cheesy:  diciendo si solo ejecuta programas executables, listo hago un executable en c++ que reciba argumentos y lo envie al script de python que recibe argumentos y listo, me dormí con una sonrisa en la cara.

Dicho y echo, desde lazarus se puede ejecutar un programa escrito en c++ y que reciba argumentos sin ningún drama. Ya hice un programa en c++ que recibe un argumento y ese texto (el argumento) lo manda a un archivo archivo data.txt (todo esto lo hice en modo de prueba).
ya tengo un programa que recibe argumentos en c++ y llama al programa de python.

Mas tarde o mañana, acomodo mis ideas, limpio el código está lleno de cosas que no van, intentos fallidos y cosas por el estilo y posteo, como llamar a python desde lazarus.

Creo que eh abierto una puerta a lazarus (si no es que alguien ya lo posteo antes, eh buscado como infeliz, no encontré para lazarus, si para delphi) para realizar TODO, ya que python es famoso por sus simplicidad, como postee anteriormente sin mucho drama con un codigo de 10 lineas se manda un mail, y existen miles de cosas por el estilo que se pueden hacer en python, sin instalar librerias pesadas y cosas por el estilo.

Ahora me estoy yendo a un asado familiar y creo que vuelvo a la noche a dormir, y mañana a trabajar, pero cuando vuelva posteo todo.

Algunos adelantos.

Llamar executable desde lazarus. [codigo sin proteccion try except, sin refina, etc...]


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var str: string;
  3.     Proc : TProcess;
  4. begin
  5.   str:= '''' + Edit1.Text + ''' ''' + Edit2.Text + ''' ''' +
  6.   Edit3.Text + ''' ''' + Edit4.text + ''' ''' + Edit5.text;
  7.  
  8.   Proc := TProcess.Create(nil);
  9.   Proc.CommandLine := 'escribir2 desde';  // llamo al programa escribir2 y le envie el argumento desde
  10.  
  11.   Proc.Options := Proc.Options + [poWaitOnExit, poUsePipes];
  12.  
  13.   PRoc.Execute;
  14.   Proc.free;
  15.   ShowMessage(' ya se executo');
  16.  
  17.   //Shell('python sendmail.py');
  18.   //fpSystem('/home/martin/mail/"python sendmail.py "' + str);
  19.   //result:= ExecuteProcess('/home/martin/mail/python sendmail.py' ,'');
  20.  
  21.   //SysToUTF8.;
  22.   //ExecuteProcess('/home/martin/mail/python ', 'sendmail.py ' + str );
  23.   //Shell('/home/martin/mail/python sendmail.py ' + str);
  24. //  SysToUTF8('/home/martin/mail/python sendmail.py' + str);
  25. End;



Codigo de escribir2
[c]
#include <stdio.h>
FILE *archi, *fopen();

int main(int argc, char *argv[])
{
  if (argc <0) {printf("faltan argumentos");}
  archi = fopen("data2.txt","a");
  if(archi==NULL)
    {
    printf("No existe archivo o no se creo");
    }
  else
    {
    fputs(argv[1],archi);//insertar texto
    fclose(archi);
    }
 
  return 0;
}
[/c]

para compilar escribir2 uso:  g++ escribir2.cpp escribir2

escribir2 debe estar en la carpeta executable del programa echo en lazarus, si todo funciona bien se crea el archivo data2.txt y adentro  del mismo dice "desde"





  • 0

#3 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 07 agosto 2011 - 10:08

Hola.

La verdad es que des de fuera parece que te complicas bastante solo por tener problemas para instalar las Indy. Parece que debería ser más sencillo localizar la documentación para instalar este componente, o bien alguna de las alternativas, como http://www.ararat.cz/synapse/doku.php

Pero admito que nunca he probado Lazarus en Linux, así que no tengo ninguna experiencia en estos problemas.

Respecto al problema que tienes para ejecutar scripts, también aquí parece que te complicas un poco demasiado para solventarlo (generar un ejecutable C++ ... ...). En Windows ocurre lo mismo, y lo único que tenemos que hacer es ejecutar el intérprete de comandos (CMD.EXE) pasándole el script (**.BAT) como parámetro. En Linux un intérprete de comandos habitual que deberías poder llamar es el BASH.

Saludos.
  • 0

#4 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 07 agosto 2011 - 07:17

Afortunadamente, aprender Python siempre es más fácil que instalar las Indy en Lazarus y más en Linux...

Excelente decisión, no todo en la vida es ObjectPASCAL o .NET...  :p (y) ;)
  • 0

#5 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 07 agosto 2011 - 09:13

porque no instalas codetyphon que ya viene con las indy
  • 0

#6 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 mensajes

Escrito 08 agosto 2011 - 07:01

o también puedes instalar LNET y listo, =)
  • 0

#7 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 08 agosto 2011 - 08:02

cuando tenga descanso en el trabajo le respondo a todos, hoy con que dyndns.org acepta solo 2 host gratis es como si hubiera explotado una bomba.
  • 0

#8 bigleaguer

bigleaguer

    Advanced Member

  • Miembros
  • PipPipPip
  • 66 mensajes

Escrito 08 agosto 2011 - 08:38

Creo que usar lazarus como diseñador de interfaz y python para tareas que me resulta dificil desde lazarus es el camino que voy a tomar.


Mi opinión es que pruebes las librerías PyQt ó PySide, ya que estás son un binding de la biblioteca gráfica Qt para python. Posee un potente diseñador de interfaz gráfica llamado Qt Designer, cuanta con muchos widgets, completa documentación. De está forma no tienes que estar haciendo artificios entre Lazarus y Python, que en mi opinión no son nada elegante. Pero está es mi opinión y recomendación, ademas programar en python es muy divertido ;).
  • 0

#9 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 08 agosto 2011 - 10:50

Primero que nada, muchas gracias por sus comentarios.

Vamos por parte:
1º Marc, la verdad que si me complico un poco por no poder instalar indy, pero si lei la documentación, en windows lo instale sin drama, pero en linux tuve muchos problemas a la hora de instalarlo, lei la discusión en el foro de lazarus y no soy el único, recalcan que la versión de indy en linux es inestable, además se puede encontrar en muchos casos que algo que funcionan en delphi no funciona en lazarus, como por ejemplo en http://www.delphiacc...hivos-adjuntos/ no solo con archivos adjuntos sino también con otras cosas, además hay casos donde funciona algo en windows pero no en linux.

2º Si codetyphon te trae los indy instalado, ya lo vi, hasta llegue a recomendarlo por este foro ,pero no logro instalar los componentes 5sdpo en la version de lazarus que viene con los indy, tengo varios problemas con la libreria synapse.pas (si no mal recuerdo ) y necesito los componentes 5sdpo para la comunicación en serie (se que existen otros, pero estos son echo por una universidad y cometí el error de decirle a mi tutora y me dijo que si o si esos componentes).

3º En windows se puede ejecutar un .bat con shellexecute, pero en linux NO, no se puede, con TProcess se recalca en la documentación oficial que solo ejecuta programas, no comandos de consola como ya lo recalque y por algún motivo tantos archivos .sh o .py no se pueden ejecutar desde lazarus (según mis pruebas) , probe con
PRoc.Execute; con  Shell('python sendmail.py') con  fpSystem('/home/martin/mail/"python sendmail.py "' + str); con EXecuteProcees y no hay casos. todos funcionan de 10 para ejecutar programas, no comandos.

4º Por otro podría solucionarlo instalando los indy, probando probando hasta lograrlo pero, la solución que busco me trae plus.
Plus 1: ejecutar comandos desde lazarus en linux, usando un programa intermedio en c++.
Plus 2: ejecutar script python desde lazarus (en windows con shellexecute basta) para tener varias cosas
Recalco que desde python, se puede hacer sin muchas complicaciones algunas cosas que me resultan dificil a mi en lazarus tanto en windows como en linux, como por ejemplo:
  Enviar mail con adjunto.
  Listar dispositivos bluetooth cercanos.
  Conectarme a dispositivos bluetooth.
Además recalco que el motor de base de datos que más me gusta es postgres y se integra con python.

5º Y me preguntar porque no programo en python directamente, eh probado ya 3 meses seguido las librerias qt y no programo en las librerias QT por varios motivos:
1 - Las librerias QT son soportadas por Nokia el cual fue comprado por microsoft.
2 - Las probe y lo lamentable es la comunidad, es muy pequeña y muchisimo más pequeña la comunidad de habla hispana.
3 - Tuve muchisimos drama para graficar datos capturados programando en c++ con QT designer y no creo que cambiaria mucho si usara python.
4 Recalco que aunque probe durante 3 meses intensivos, tal vez no probe lo suficiente.
5 - Estoy convencido que lazarus es el mejor ide, para diseñar interfaz gráfica, potables , ya hice antes este analice, la Qt pueden ser más potente pero su dueño no me convence como su comunidad, y las gtk simplemente no me gusta, además lazarus posee miles de componentes visual y su curva de aprendizaje para mi es nula.

Peroo lazarus tienes sus problemas, y si se lo resuelve de manera fácil con python no habría ningún problema.

Bueno ese es mi análisis.
Hoy si puedo termino lo necesario para llamar a python desde lazarus en linux, en windows con shellexecute basta y sobra.


  • 0

#10 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 08 agosto 2011 - 11:34

Marc, no se me había ocurrido llamar al Bash, en que estaba pensado ayer, no hice esa prueba, hoy pruebo eso antes de cualquier cosas, muchisimas gracias, si lo reselvo realmente me estaba complicando demasiado.
Por algún motivo lei 3 veces las respuestas y no me di cuenta.

  • 0

#11 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 09 agosto 2011 - 12:37

Hola que tal, le cuento como quedo, eh tratado de llamar a bash y no pude, por otro lado no eh intentado instalar las LNet, lo que pasa es que ahora me voy a poner a ver como detecto bluetooth en windows y linux vi que hay muchas cosas echas desde python o c++, por eso es que elegí este camino.

Me quedo de la siguiente manera, 1 archivo en python, 1 archivo en c++ y el programa de lazarus (creo que hacer funcionar desde bash me simplificaria el archivo de c++) aclaro que el archivo de c++ no hace falta en windows ya que con shellexecute se lo remplaza. estos código los probe en ubuntu 10.04 ya lo probare en windows.

el archivo sendmail.py
[c]
import smtplib
from email.MIMEText import MIMEText
import sys

filename = 'respuesta.dat'
if len(sys.argv) < 5:
print "no hay argumentos suficientes"
file = open(filename, "w")
        file.write("No hay argumentos suficietes")
        file.close()
        sys.exit()
de = sys.argv[1]
clave = sys.argv[2]
para = sys.argv[3]
asunto = sys.argv[4]
texto = sys.argv[5]


mensaje = MIMEText(texto)
mensaje['FROM'] = de
mensaje['To'] = para
mensaje['Subject'] = asunto


server = smtplib.SMTP("smtp.gmail.com:587")
server.starttls()
server.login(de,clave)
server.sendmail(de, para, mensaje.as_string())
server.quit()
file = open(filename, "w")
file.write("Mail enviado sin problemas")
file.close()
[/c]

el archivo llamarsendmail.cpp
[c]
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   
    system("clear");
    string s("python sendmail.py ");
    s = s + argv[1] + " " + argv[2] + " " +
    argv[3] + " '" + argv[4] + "' '" + argv[5] + "'";
   
    system(s.c_str());
    return EXIT_SUCCESS;
}
[/c]
se compila con g++ llamarsendmail.cpp -o llamarsendmail

Ahora en lazarus tiro un formulario con 5 cajas de texto, para escribir lo siguiente
De [edit1]
contraseña [edit2]
para [edit3]
asunto [edit4]
texto [edit5]

[enviar mail]  <- boton

en el evento onclick del boton pongo el siguiente código:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var str: string;
  3.     Proc : TProcess;
  4.     arch : TStringList;
  5. begin
  6.   str:= '''' + Edit1.Text + ''' ''' + Edit2.Text + ''' ''' +
  7.   Edit3.Text + ''' ''' + Edit4.text + ''' ''' + Edit5.text + '''';
  8.   ShowMessage(str);
  9.   Proc := TProcess.Create(nil);
  10.   Proc.CommandLine := 'llamarsendmail ' + str;
  11.  
  12.   Proc.Options := Proc.Options + [poWaitOnExit, poUsePipes];
  13.  
  14.   PRoc.Execute;
  15.   Proc.free;
  16.  
  17.   // Leo la respuesta
  18.   arch := TStringList.Create;
  19.   arch.LoadFromFile('respuesta.dat');
  20.   ShowMessage(arch.Text);
  21.  
  22. End; 



Bueno creo que eso es todo, muchas gracias por sus respuesta, la verdad que todo esto, creo que es más para un tema que definitivamente no se puede hacer con lazarus o es demasiado complicado (como el tema de bluetooth que encaro ahora), sé que sus soluciones y aportes deben ser muchos mejor para el caso puntual de enviar mail, pero bueno, presento una alternativa y espero que le sirva a alguien.



  • 0

#12 repetto

repetto

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 09 agosto 2011 - 06:36

Para Instalar las Indy en Lazarus utilice el siguiente post que encontre en Internet:
'From Yahoo! Brazil, Lazarus Group (User Everaldo)
Version instalada en Lazarus 0.9.24 utilizando el componente indy 10.2.0.1.
Unzip the component from file tar.gz (must be this file, the "zip file" does not work) in directory $(LazarusDir)\components;
Go to directory $(LazarusDir)\components\indy-10.2.0.1 and to create inside then a directory named "saved";
Copia el contenido del directorio $(LazarusDir)\components\indy-10.2.0.1\lazarus al directorio "saved" created above.
Copia el contenido del directorio $(LazarusDir)\components\indy-10.2.0.1\fpc\ al directorio $(LazarusDir)\components\indy-10.2.0.1\lazarus, y sobreescribe todos los ficheros, ok;
Coge el contenido del directorio "saved" y copialo dentro de $(LazarusDir)\components\indy-10.2.0.1\lazarus pudiendo ahora borrar el directorio "saved";
Instala el paquete laz.lpk (disponible en $(LazarusDir)\components\indy-10.2.0.1\lazarus\indy) of conventional way.
En Linux el trayecto (path) es: /usr/lib/lazarus/components/indy-10.2.0.1/, right!!!

Espero que te sea de ayuda, buena suerte!!"

Yo el path lo tenia en: /usr/lib/lazarus/0.9.2.8.2/components

Alejandro Repetto


  • 0

#13 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 09 agosto 2011 - 07:26

Muchas gracias reppeto, eso de copiar los archivos y pegarlo ya lo hice, lo que no hice fue crear la carpeta en el lugar que tu indicas

Instala el paquete laz.lpk (disponible en $(LazarusDir)\components\indy-10.2.0.1\lazarus\indy) of conventional way.
En Linux el trayecto (path) es: /usr/lib/lazarus/components/indy-10.2.0.1/, right!!!

Cuando llegue a mi casa lo veo, igual ya quedo funcionando esto, ya envie varios mail y hoy me pongo a full con conectarme con dispositivos bluetooth.

Gracias.
  • 0

#14 repetto

repetto

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 09 agosto 2011 - 07:43

Lo que no se es como enviar un archivo adjunto en la rutina que posteaste



  • 0

#15 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 09 agosto 2011 - 08:53

Bien, eso ya seria un problema de python, eso es lo que aclaro, debido a que solo hay que agregar un parametro a todo, al archivo c++ y al archivo de python, y a lazarus que pase un parametro más al archivo de c. Eso no deberia de causarte mayores complicaciones, ahora para mandar archivo adjunto con python deberías chequear el link que pongo de donde saco lo de enviar mail, lo repito  http://chuwiki.chuid..._python_y_gmail  yo que vos trataría de seguir el tutorial ese, ahí explica como enviar mail con adjunto, luego hace como yo, en vez de cargar el (archivo que se envia) que la rutina reciba un argurmento con esa info seria algo así
archivo = sys.arg[6] 

Bueno, espero que te sirva de ayuda y si lo solucionas postea como te fue.



  • 0

#16 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 09 agosto 2011 - 05:42

Para enviar mail con python con archivo adjunto (esto es para foto), hay que hacer lo siguiente

Archivo sendmailadjunto.py
[cpp]
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEImage import MIMEImage

import sys

filename = 'respuesta.dat'
if len(sys.argv) < 6:
print "no hay argumentos suficientes"
file = open(filename, "w")
        file.write("No hay argumentos suficietes")
        file.close()
        sys.exit()
de = sys.argv[1]
clave = sys.argv[2]
para = sys.argv[3]
asunto = sys.argv[4]
texto = sys.argv[5]
foto = sys.argv[6]


mensaje = MIMEMultipart()
mensaje['FROM'] = de
mensaje['To'] = para
mensaje['Subject'] = asunto
file = open(foto, "rb")
contenido = MIMEImage(file.read())
contenido.add_header('Content-Disposition', 'attachment; filename = "'+ foto + '"' + "'")
mensaje.attach(contenido)

server = smtplib.SMTP("smtp.gmail.com:587")
server.starttls()
server.login(de,clave)
server.sendmail(de, para, mensaje.as_string())
server.quit()
file = open(filename, "w")
file.write("Mail enviado sin problemas")
file.close()
[/cpp]


el archivo de c (repito en windows no es necesario)

[cpp]
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{

    system("clear");
    string s("python sendmail.py ");
    s = s + argv[1] + " " + argv[2] + " " +
    argv[3] + " '" + argv[4] + "' '" + argv[5] + "' '" + argv[6] + "'";

    system(s.c_str());
    return EXIT_SUCCESS;
}
[/cpp]


Al programa de enviar archivo adjnto (foto) busca en internet como seria un archivo generico


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var str: string;
  3.     Proc : TProcess;
  4.     arch : TStringList;
  5. begin
  6.   str:= '''' + Edit1.Text + ''' ''' + Edit2.Text + ''' ''' +
  7.   Edit3.Text + ''' ''' + Edit4.text + ''' ''' + Edit5.text + ''' ''' + Edit6.text + '''';  /// bueno el edit6 es la ruta del archivo fijate si queda
  8. // encerrado entre comillas (no lo eh probado desde lazarus) pero si eh probado el archivo de python y me anda.
  9.   ShowMessage(str);
  10.   Proc := TProcess.Create(nil);
  11.   Proc.CommandLine := 'llamarsendmail ' + str;
  12.  
  13.   Proc.Options := Proc.Options + [poWaitOnExit, poUsePipes];
  14.  
  15.   PRoc.Execute;
  16.   Proc.free;
  17.  
  18.   // Leo la respuesta
  19.   arch := TStringList.Create;
  20.   arch.LoadFromFile('respuesta.dat');
  21.   ShowMessage(arch.Text);
  22.  
  23. End; 





bueno espero que te sirva, de ahí en más tienes que fijarte vos como haces para enviar un archivo generico (te pido por favor que si lo logras lo postee aca, así sea más fácil para todos), yo ahora dejo los de los mail y me pongo a ver el tema de bluetooth.


  • 0

#17 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 10 agosto 2011 - 07:36

Muchas gracias reppeto, el proceso de copiar y pegar en el path de lazarus funciono a la perfeccion con los indy 10.2.0.3, no con el 10.2.0.1 ni con el 9.

Igual todo esto era para preparar el terreno de lo que estoy haciendo con bluetooth.
Gracias totales.

  • 0




IP.Board spam blocked by CleanTalk.