Ir al contenido


Foto

Enviar SMS con lazarus usando componentes indy.


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

#1 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 02 junio 2011 - 07:33

Hola que tal, querida comunidad, voy a subir un programita que sirve para enviar sms por mail, usando los componentes indy.
Para instalar los componentes indy recomiendo la siguiente dirección.
http://www.lazarus.freepascal.org/index.php?topic=6902.0
Una vez instalado.
Empezando un proyecto nuevo y creamos el siguiente form.
[img]http://https://6317453537255906574-a-1802744773732722657-s-sites.googlegroups.com/site/martinartaza5/Home/ImagenFormulario.JPG?attachauth=ANoY7cpC0wcAQF9phSwk2Y1tSZotUkPQRsV2sH1QWkRNIOXjanXJyvldmfYlEAYp2ayGKYHG7VxPmDU7MpCtLA9wFcSjToNxR-B1QVmMQu2n56-uXWKYAk4B90Kd8asZnQmvQ7Gx7HuOiyZaTbPDfsW225vTowr1XDlg35eebQMrdd_Dbha4_NDPx2S43v4sSg3NORVIWnvjeHh-Lnp5F7rvvKW50QpUBw%3D%3D&attredirects=0[/img]

Se crea una función, que es el corazon del proyecto !!!!!!!!!!Muchas gracias Fredycc¡¡¡¡¡¡¡¡¡¡¡¡¡


delphi
  1. function TFEnviar1.sendMail(SMTP_Server:String; SMTP_Port:Integer; SMTP_AuthType:TIdSMTPAuthenticationType;
  2.                   SMTP_UseTLS:TIdUseTLS; From_Mail, From_Name, From_Pass, To_List_Emails,
  3.                   Mail_Subject:String; Body_Message:TMemo):String;
  4. var
  5.   IdMessage1: TIdMessage;
  6.   IdSMTP1:TIdSMTP;
  7.   IdSSLSocket: TIdSSLIOHandlerSocketOpenSSL;
  8.   lista:TStringList;
  9.   i:integer;
  10. begin
  11.   IdMessage1 := TIdMessage.Create(nil);
  12.   IdSMTP1 := TIdSMTP.Create(nil);
  13.   IdSSLSocket := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  14.  
  15.   //IdSSLSocket.OnStatusInfo := @OpenSSLStatusInfo;
  16.   IdSMTP1.IOHandler := IdSSLSocket;
  17.   idSMTP1.AuthType := SMTP_AuthType;
  18.   idSMTP1.Host := SMTP_Server;
  19.   idSMTP1.Port := SMTP_Port;
  20.   idSMTP1.Username:= From_Mail;
  21.   idSMTP1.Password:= From_Pass;
  22.   idSMTP1.UseTLS := SMTP_UseTLS;
  23.   IdMessage1.From.Text := From_Mail;
  24.   IdMessage1.From.Name := From_Name;
  25.   IdMessage1.Recipients.EMailAddresses := To_List_Emails;
  26.   IdMessage1.Subject := UTF8ToAnsi(Mail_Subject);
  27.   lista:= TStringList.Create;
  28.   for i:=0 to Body_Message.lines.count-1 do
  29.       lista.Add(Body_Message.lines[i]);
  30.  
  31.   IdMessage1.Body.Clear;
  32.   IdMessage1.Body.Text := lista.Text;
  33.   //CargaMensajeMail(From_Mail,To_List_Emails,UTF8ToAnsi(Mail_Subject),lista);
  34.   try
  35.       idSMTP1.Connect;
  36.       application.processmessages;
  37.       IdSMTP1.Send(IdMessage1);
  38.   except
  39.       on E: Exception do
  40.         ShowMessage('Failed: ' + E.Message);
  41.   end;
  42.     idSMTP1.Disconnect();
  43.     IdMessage1.Free;
  44.     IdSMTP1.Free;
  45.     IdSSLSocket.Free;
  46. end;



Y los botones deben llamar a la función con los datos de nuestra cuenta de correo, para gmail es.


delphi
  1. procedure TFEnviar1.BTNEnviarClick(Sender: TObject);
  2.  
  3. begin
  4.     sendMail('smtp.gmail.com',587,satDefault,utUseExplicitTLS,'martin.artaza@gmail.com',
  5.           Edeparte.text,'tuclave',edestino.Text,easunto.text, Memo1);
  6. end;



y para mandar un SMS es (para argentina):



delphi
  1. procedure TFEnviar1.Button1Click(Sender: TObject);
  2. var direccion: string;
  3. begin
  4. direccion := earea.text + enumero.Text;
  5. case cbCompania.ItemIndex of
  6.   0: begin direccion := direccion + '@sms.ctimovil.com.ar'; end;
  7.   1: begin direccion := direccion + '@sms.movistar.net.ar'; end;
  8.   2: begin direccion := direccion + '@personal-net.com.ar'; end;
  9.   end;
  10. sendMail('smtp.gmail.com',587,satDefault,utUseExplicitTLS,'martin.artaza@gmail.com',
  11.         Edeparte.text,'tuclave', direccion,easunto.text, Memo1);
  12. end;




Bueno, le dejo el código completo.




delphi
  1. unit UEnviarMail;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  9.   IdHTTP, IdSMTP, IdMessage, IdPOP3, IdSSLOpenSSL,
  10.  
  11.  
  12.   IdAttachment, IdAttachmentFile, IdIOHandler,
  13.     IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdBaseComponent,
  14.     IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase,
  15.     IdMessageClient, IdSMTPBase,
  16.  
  17.  
  18.   IdGlobal, IdCmdTCPServer;
  19. {
  20. ,
  21.   IdException, IdServerIOHandler;
  22. }
  23.  
  24. type
  25.  
  26.   { TFEnviar1 }
  27.  
  28.   TFEnviar1 = class(TForm)
  29.     BTNEnviar: TButton;
  30.     Button1: TButton;
  31.     Button2: TButton;
  32.     CBCompania: TComboBox;
  33.     EDestino: TEdit;
  34.     Edeparte: TEdit;
  35.     EAsunto: TEdit;
  36.     EArea: TEdit;
  37.     ENumero: TEdit;
  38.     IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
  39.     Label1: TLabel;
  40.     Label2: TLabel;
  41.     Label3: TLabel;
  42.     Label4: TLabel;
  43.     Label5: TLabel;
  44.     Label6: TLabel;
  45.     Memo1: TMemo;
  46.     procedure BTNEnviarClick(Sender: TObject);
  47.     procedure Button1Click(Sender: TObject);
  48.     procedure Button2Click(Sender: TObject);
  49.   private
  50.     { private declarations }
  51.   public
  52.     function sendMail(SMTP_Server:String; SMTP_Port:Integer; SMTP_AuthType:TIdSMTPAuthenticationType;
  53.                       SMTP_UseTLS:TIdUseTLS; From_Mail, From_Name, From_Pass, To_List_Emails,
  54.                       Mail_Subject:String; Body_Message:TMemo):String;
  55.   end;
  56.  
  57. var
  58.   FEnviar1: TFEnviar1;
  59. implementation
  60.  
  61. {$R *.lfm}
  62.  
  63. { TFEnviar1 }
  64.  
  65.  
  66. { TFEnviar1 }
  67.  
  68.  
  69. function TFEnviar1.sendMail(SMTP_Server:String; SMTP_Port:Integer; SMTP_AuthType:TIdSMTPAuthenticationType;
  70.                   SMTP_UseTLS:TIdUseTLS; From_Mail, From_Name, From_Pass, To_List_Emails,
  71.                   Mail_Subject:String; Body_Message:TMemo):String;
  72. var
  73.   IdMessage1: TIdMessage;
  74.   IdSMTP1:TIdSMTP;
  75.   IdSSLSocket: TIdSSLIOHandlerSocketOpenSSL;
  76.   lista:TStringList;
  77.   i:integer;
  78. begin
  79.   IdMessage1 := TIdMessage.Create(nil);
  80.   IdSMTP1 := TIdSMTP.Create(nil);
  81.   IdSSLSocket := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  82.  
  83.   //IdSSLSocket.OnStatusInfo := @OpenSSLStatusInfo;
  84.   IdSMTP1.IOHandler := IdSSLSocket;
  85.   idSMTP1.AuthType := SMTP_AuthType;
  86.   idSMTP1.Host := SMTP_Server;
  87.   idSMTP1.Port := SMTP_Port;
  88.   idSMTP1.Username:= From_Mail;
  89.   idSMTP1.Password:= From_Pass;
  90.   idSMTP1.UseTLS := SMTP_UseTLS;
  91.   IdMessage1.From.Text := From_Mail;
  92.   IdMessage1.From.Name := From_Name;
  93.   IdMessage1.Recipients.EMailAddresses := To_List_Emails;
  94.   IdMessage1.Subject := UTF8ToAnsi(Mail_Subject);
  95.   lista:= TStringList.Create;
  96.   for i:=0 to Body_Message.lines.count-1 do
  97.       lista.Add(Body_Message.lines[i]);
  98.  
  99.   IdMessage1.Body.Clear;
  100.   IdMessage1.Body.Text := lista.Text;
  101.   //CargaMensajeMail(From_Mail,To_List_Emails,UTF8ToAnsi(Mail_Subject),lista);
  102.   try
  103.       idSMTP1.Connect;
  104.       application.processmessages;
  105.       IdSMTP1.Send(IdMessage1);
  106.   except
  107.       on E: Exception do
  108.         ShowMessage('Failed: ' + E.Message);
  109.   end;
  110.     idSMTP1.Disconnect();
  111.     IdMessage1.Free;
  112.     IdSMTP1.Free;
  113.     IdSSLSocket.Free;
  114. end;
  115.  
  116.  
  117. procedure TFEnviar1.BTNEnviarClick(Sender: TObject);
  118.  
  119. begin
  120.     sendMail('smtp.gmail.com',587,satDefault,utUseExplicitTLS,'martin.artaza@gmail.com',
  121.           Edeparte.text,'tuclave',edestino.Text,easunto.text, Memo1);
  122. end;
  123.  
  124. procedure TFEnviar1.Button1Click(Sender: TObject);
  125. var direccion: string;
  126. begin
  127. direccion := earea.text + enumero.Text;
  128. case cbCompania.ItemIndex of
  129.   0: begin direccion := direccion + '@sms.ctimovil.com.ar'; end;
  130.   1: begin direccion := direccion + '@sms.movistar.net.ar'; end;
  131.   2: begin direccion := direccion + '@personal-net.com.ar'; end;
  132.   end;
  133. sendMail('smtp.gmail.com',587,satDefault,utUseExplicitTLS,'martin.artaza@gmail.com',
  134.         Edeparte.text,'tuclave', direccion,easunto.text, Memo1);
  135. end;
  136.  
  137. procedure TFEnviar1.Button2Click(Sender: TObject);
  138. begin
  139.   close;
  140. end;
  141.      



Bueno, ya se que para otros esto es pan comido, pero  para otros esto le puede servir de ayuda.
  • 0

#2 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 02 junio 2011 - 12:25

Nada q agradecer martinartaza, por el contrario gracias por compartinrnos la idea y el código, de hecho la idea de enviar sms por mail no se me habia ocurrido, felicidades y nuevamente gracias por tu valiosa contribución.

Saludos  (y)
  • 0

#3 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 02 junio 2011 - 02:08

Wow !  :shocked:


Qué excelente aportación amigo martinartaza !

(y)

Saludox ! :)
  • 0

#4 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 02 junio 2011 - 11:50

Gracias por tu gran aporte.  Parece ser que en Republica Dominicana no se pueden enviar minimensajes utilizando @sms y el  nombre de la empresa, ya que a mi no me funciona.


Si alguien sabe como puede hacerse en esta isla, por favor que tenga la amabilidad de decirlo.




algunas de las empresas de moviles en nuestro pais permiten enviar mensajes desde su pagina web, una de ellas es CLARO
pero si llamas al servicio al cliente, nadie te sabe decir como se puede hacer directamente desde un programa o por internet. aunque sea pagandoles. 








  • 0

#5 ELKurgan

ELKurgan

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 566 mensajes
  • LocationEspaña

Escrito 03 junio 2011 - 12:25

Muchas gracias por el aporte, muy buen código

Saludos (y)
  • 0

#6 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 06 junio 2011 - 06:04

De nada, de nada. No lo hubiera hecho sin los códigos que hay acá y sin ayuda del foro.


  • 0




IP.Board spam blocked by CleanTalk.