Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2014
nnebli nnebli is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 14
Poder: 0
nnebli Va por buen camino
Enviar e-mail desde terra.com, gmail.com, yahoo.es, movistar.es, hotmail.com, etc.

Después de haber estado buscando por Internet la forma de enviar e-mail desde diversas cuentas de correo como terra.com, gmail.com, yahoo.es, movistar.es, hotmail.com, etc. no he visto nada que realmente deje claro (a los ojos de los poco curtidos en el tema como yo) como enviarlos. Por eso, y bajo la sugerencia de Newton (al que agradezco desde ya su ayuda), he creado este hilo para intentar que en el mismo se quede claro como enviar e-mail desde distintas cuentas de correo.

En Delphi al Límite ví un ejemplo que funcionó perfectamente con 'terra.com', lo he adaptado un poco para poder enviar varios ficheros adjuntos. Lo pongo a continuación para quien le pueda ser útil.

Agradecería que quien tenga código para enviar un e-mail con más de un fichero adjunto desde distintas cuentas de correo (terra.com, gmail.com, yahoo.es, movistar.es, hotmail.com, etc.) que lo ponga a continuación y así podrá servir de ayuda a todo aquel que lo necesite. Por favor, intentad que el código que se ponga funcione correctamente sin tener que hacer modificaciones apreciables, y si hay que hacerlas, explicarlas para que todos las podamos entender, incluido los menos duchos en Delphi. Gracias.

Código para enviar un e-mail desde 'terra.com' con varios ficheros adjuntos, utiliznado Delphi 7 y Windows XP:

Código Delphi [-]
// Nota: utilizamos varios TEdit para recoger información como el asunto del mensaje, usuario, contraseña, etc.
 
unit EnviarEMailConDelphi7;
interface
uses
IdSMTP, IdMessage, // he añadido estas dos
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;
type
TFPEnviarEMailConDelphi7 = class(TForm)
btnEnviarMensaje: TButton;
Label1: TLabel;
edUsuario: TEdit;
Label2: TLabel;
edContrasenna: TEdit;
Label3: TLabel;
edAsunto: TEdit;
Label4: TLabel;
edDestinatario1: TEdit;
Label5: TLabel;
edTextoDelEmail: TEdit;
procedure btnEnviarMensajeClick(Sender: TObject);
procedure CompruebaTecla(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FPEnviarEMailConDelphi7: TFPEnviarEMailConDelphi7;
 
implementation
Const
// definiemos el máximo número de ficheros adjuntos que se van a poder utilizar
MaximoNumeroDeFicherosAdjuntosp = 5;
var
// definimos aquí este Array para que podamos tener acceso desde cualquier sitio de este programa
RutaYNombreDelFicheroAAdjuntarp : Array[1..MaximoNumeroDeFicherosAdjuntosp] of String;
 
{$R *.dfm}
 
 
procedure EnviarMensaje( sUsuario, sClave, sHost, sAsunto, sDestino, sMensaje: String );
var
SMTP: TIdSMTP;
Mensaje: TIdMessage;
Adjunto : Array[1..MaximoNumeroDeFicherosAdjuntosp] of TIdAttachment;
repite : Integer;
begin
// Creamos el componente de conexión con el servidor
SMTP := TIdSMTP.Create( nil );
SMTP.Username := sUsuario;
SMTP.Password := sClave;
SMTP.Host := sHost;
SMTP.Port := 25;
SMTP.AuthenticationType := atLogin;
// Creamos el contenido del mensaje
Mensaje := TIdMessage.Create( nil );
Mensaje.Clear;
Mensaje.From.Name := sDestino;
Mensaje.From.Address := sDestino;
Mensaje.Subject := sAsunto;
Mensaje.Body.Text := sMensaje;
Mensaje.Recipients.Add;
Mensaje.Recipients.Items[0].Address := sDestino;
 
// adjunta todos los ficheros que se hayan indicado. Máximo 5 ficheros de acuerdo con la definción del Array: RutaYNombreDelFicheroAAdjuntarp
For repite := 1 To MaximoNumeroDeFicherosAdjuntosp Do
Begin
// Si hay que meter un archivo adjunto lo creamos y lo asignamos al mensaje
if RutaYNombreDelFicheroAAdjuntarp[repite] <> '' then
begin
// si existe el fichero a adjuntar lo adjunta
if FileExists( RutaYNombreDelFicheroAAdjuntarp[repite] ) then
Adjunto[repite] := TIdAttachment.Create( Mensaje.MessageParts, RutaYNombreDelFicheroAAdjuntarp[repite] );
end
else
Adjunto[repite] := nil;
End;
// fin de: adjunta todos los ficheros que se hayan indicado. Máximo 10 fichero de acuerdo con la definción del Array: RutaYNombreDelFicheroAAdjuntarp
 
// Conectamos con el servidor SMTP
try
SMTP.Connect;
except
raise Exception.Create( 'Error al conectar con el servidor. ' );
end;
 
// Si ha conectado enviamos el mensaje y desconectamos
if SMTP.Connected then
begin
try
SMTP.Send( Mensaje );
except
raise Exception.Create( 'Error al enviar el mensaje. ' );
end;
try
SMTP.Disconnect;
except
raise Exception.Create( 'Error al desconectar del servidor. ' );
end;
end;
 
// Liberamos los objetos creados
For repite := 1 To MaximoNumeroDeFicherosAdjuntosp Do
if Adjunto[repite] <> nil then
FreeAndNil( Adjunto[repite] );
 
FreeAndNil( Mensaje );
FreeAndNil( SMTP );
 
Application.MessageBox( 'Mensaje enviado correctamente. ','Fin de proceso',MB_ICONINFORMATION );
 
end;
 
procedure TFPEnviarEMailConDelphi7.btnEnviarMensajeClick(Sender: TObject);
Var
Usuariop : String;
Clavep : String;
AsuntoMensajep : String;
DireccionDestinop : String;
TextoDelMensajep : String;
begin
// recuperamos de los TEdit los datos
Usuariop := edUsuario.Text;
Clavep := edContrasenna.Text;
AsuntoMensajep := edAsunto.Text;
DireccionDestinop := edDestinatario1.Text;
TextoDelMensajep := edTextoDelEmail.Text;
 
// indicamos la ruta y el nombre donde están los ficheros a adjuntar
RutaYNombreDelFicheroAAdjuntarp[1] := 'C:\documento1.zip';
RutaYNombreDelFicheroAAdjuntarp[2] := 'C:\documento2.zip';
RutaYNombreDelFicheroAAdjuntarp[3] := 'C:\documento3.zip';
RutaYNombreDelFicheroAAdjuntarp[4] := 'C:\documento4.zip';
RutaYNombreDelFicheroAAdjuntarp[5] := 'C:\documento5.zip';
 
// Vamos al procedimiento que envía el mensaje. Nota: Como este correo se envía desde 'terra.com' ponemos: 'smtp.terra.com'
EnviarMensaje( Usuariop, Clavep, 'smtp.terra.com', AsuntoMensajep, DireccionDestinop, TextoDelMensajep);
 
end;
 
procedure TFPEnviarEMailConDelphi7.CompruebaTecla(Sender: TObject;var Key: Char);
begin
If Key = #27 Then
Close;
end;
end.

Fin de: Código para enviar un e-mail desde 'terra.com' con varios ficheros adjuntos, utiliznado Delphi 7 y Windows XP:

Última edición por dec fecha: 16-11-2014 a las 15:03:39. Razón: Añadir etiquetas DELPHI
Responder Con Cita
  #2  
Antiguo 16-11-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
nnebli,

Cita:
Empezado por nnebli
...quien tenga código para enviar un e-mail con más de un fichero adjunto...
Cita:
Empezado por nnebli
...Por favor, intentad que el código que se ponga funcione correctamente sin tener que hacer modificaciones apreciables, y si hay que hacerlas, explicarlas para que todos las podamos entender, incluido los menos duchos en Delphi...


Revisa esta información:
Espero sea útil

Nelson.
Responder Con Cita
  #3  
Antiguo 17-11-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Amigo nnebli.

Como te prometí te he preparado un ejemplo en el que he intentado hacer un compendio de todo lo que he encontrado por aquí con el tiempo y que envía correos a uno o varios destinatarios insertando uno o varios archivos y usando, o no, SSL que es el problema que tienen los servidores de correos como gmail, yahoo, terra, etc.

No sé qué versión de Indy tienes pero la que tienes que instalar para que esto funcione es la 10 y tienes que copiar a la carpeta del ejecutable las librerías libeay32.dll y ssleay32.dll.

Dependiendo del servidor de correos que uses tendrás que usar un tipo de TLS u otro. Para Gmail, Hotmail y Yahoo tendrás que usar la opción "2-utUseExplicitTLS" y para Terra la "1-utNoTLSSupport".

Un problema que vas a tener con Gmail es que cuando intentas enviar el primer mensaje desde fuera de la web el correo se te bloquea y recibirás un correo del servidor en la cuenta de Gmail pidiendote autorización para poder enviar correos desde fuera de la web, tendrás que entrar en ese mensaje y habilitar la opción.

Los servidores de correo saliente de los distintos servidores de correo son los siguientes:

GMAIL: smtp.gmail.com
HOTMAIL: smtp.live.com
TERRA: smtp.terra.com
YAHOO: pop.mail.yahoo.com

te vendrán bien para no tener que ir buscando por ahí.

Finalmente me estoy dando cuenta de que tú usas Delphi 7 y yo Delphi 2007 con lo que no vas a poder abrir este proyecto pero el .pas si podrás abrirlo para ver cómo funciona, no creo que tengas ningún problema teniendo el ejecutable y el .pas para adaptarlo a tu programa.

De una forma o de otra si tienes algún "atranque" lo comentas.

Saludos

P.D. He hecho una pequeña trampilla que espero no moleste a los moderadores. Como el archivo .rar que estaba subiendo excede de los 293 kb que se pueden subir (no entiendo por qué) he renombrado el archivo como .pdf que si permite algo más de capacidad así que al descargarlo lo vuelves a renombrar como .rar y listo.
__________________
Be water my friend.

Última edición por newtron fecha: 18-01-2017 a las 19:32:30.
Responder Con Cita
  #4  
Antiguo 17-11-2014
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
E-mail

Viendo este post un tema, porque yo envio por delphi7 mails a traves del Outlook pero tengo que tener abierto el outlook y minimizado para que funcione. Con lo que vi puedo setear el deplhi como si fuera un outlook propio, es asi, sin tener que abrir previamente el prg outlook?.

Última edición por shoulder fecha: 17-11-2014 a las 17:22:44.
Responder Con Cita
  #5  
Antiguo 17-11-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por shoulder Ver Mensaje
Viendo este post un tema, porque yo envio por delphi7 mails a traves del Outlook pero tengo que tener abierto el outlook y minimizado para que funcione. Con lo que vi puedo setear el deplhi como si fuera un outlook propio, es asi, sin tener que abrir previamente el prg outlook?.
Bueno, esto lo que hace es enviar correos, ni los almacena en ningún sitio como elementos enviados, ni tiene agenda de contactos ni todas las opciones que tiene outlook. En caso de querer tener un historial de los correos enviados lo que puedes hacer es poner una copia del correo a una dirección propia para que vayan entrando en esa cuenta y así poder en un momento dado consultarlos.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 17-11-2014
nnebli nnebli is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 14
Poder: 0
nnebli Va por buen camino
Hola, Newton.

Le he dado un vistazo a la ficheros .Pas y la verdad es que es realmente sencillo, que es lo mejor de todo, poco código y si funciona bien mejor que mejor. Voy a intentar adaptarlo a Delphi 7 y lo probaré a ver qué tal. Cuando tenga algo comento los resultados.

Muchas gracias por tu ayuda.

Saludos.
Responder Con Cita
  #7  
Antiguo 17-11-2014
nnebli nnebli is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 14
Poder: 0
nnebli Va por buen camino
Por cierto, te pido disculpas Nelson por no decirte nada, miraré también lo que comentas a ver que me puede aportar. La idea es poner el código terminado para que quien esté 'un poco verde como yo' que no se pierda buscando en un sitio y otro. Cuando consiga hacer que envíe e-mails desde otras cuentas que no sean de 'terra.com', subiré el código.

Gracias también por tu ayuda.

Saludos.
Responder Con Cita
  #8  
Antiguo 17-11-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por nnebli Ver Mensaje
Hola, Newton.

Le he dado un vistazo a la ficheros .Pas y la verdad es que es realmente sencillo, que es lo mejor de todo, poco código y si funciona bien mejor que mejor. Voy a intentar adaptarlo a Delphi 7 y lo probaré a ver qué tal. Cuando tenga algo comento los resultados.

Muchas gracias por tu ayuda.

Saludos.
Nada hombre, ya te decía que el código era bastante simple. Espero que te venga bien y recuerda comprobar la versión de las Indy.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 17-11-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
A menos que estes enviando a "nombre de" otra persona correo, no es recomendable enviar correos por medio de estos servicios. Para ello, existen servicios que son enfocados a aplicaciones como

http://www.mailgun.com/

Y que hacen que si sigues las reglas, no quedes como un spammer.
__________________
El malabarista.
Responder Con Cita
  #10  
Antiguo 17-11-2014
nnebli nnebli is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 14
Poder: 0
nnebli Va por buen camino
Hola Newton.

Creo que he solventado algunos baches, pero este no puedo con él:

Me sale un error al compilar:

idSMTP1.UseTLS := utNoTLSSupport; --> Me indica el error que 'UseTLS' no está declarado.

He puesto desde 'Indy Cliente' el TidSMTP pero efectivamente en 'idSMTP1' no aparece 'UseTLS. Me imagino que por eso preguntabas la versión de INDY. Perdona por la pregunta, pero ¿donde puedo ver la versión de Indy? Y lo más importante ¿como puedo solucionar este problema?

Te agradecería tu respuesta.

Saludos.
Responder Con Cita
  #11  
Antiguo 18-11-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Hola de nuevo.

Si pulsas con el botón derecho en el icono del componente verás que te aparece en la primera línea .... About .... ahí verás la versión de Indy.

Si es una versión antigua, que es lo que me imagino, tendrías que desinstalarla de tu Delphi e instalar la nueva versión que te puedes descargar aquí.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #12  
Antiguo 18-11-2014
nnebli nnebli is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 14
Poder: 0
nnebli Va por buen camino
La versión de las Indy es la 9.00.10

Voy a ver si consigo instalar la versión 10 y comento resultados.

Gracias.
Responder Con Cita
  #13  
Antiguo 18-11-2014
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
Outlook Microsoft 2010

Porque teniendo el outlook cerrado tengo que decir al usuario que trabaje con el outlook minimizado para que funcionen todas las sentencias que hice de envio de mail en el programa, delphi 7.

la sentencia que uso para ver si esta abierto y comenzar es esta

Cita:
try
Outlook := GetActiveOleObject('Outlook.Application');
except
Outlook := CreateOleObject('Outlook.Application');
end;
.......


si oulook esta minimizado envia mails, los muestra..pero si lo tienen cerrado no lo abre.
Responder Con Cita
  #14  
Antiguo 19-11-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por shoulder Ver Mensaje
Porque teniendo el outlook cerrado tengo que decir al usuario que trabaje con el outlook minimizado para que funcionen todas las sentencias que hice de envio de mail en el programa, delphi 7.
¿Preguntas o afirmas?, deberías abrir un hilo nuevo con esa consulta.

Saludos
__________________
Be water my friend.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
enviar un correo desde ¿ yahoo, gmail ? avmm2004 Internet 1 24-01-2012 18:15:17
Enviar mail a hotmail o yahoo gabirojas Varios 6 29-08-2008 15:05:11
enviar un email desde delphi a hotmail o gmail abraham SQL 30 06-08-2007 16:46:20
enviar correos con TNMSMTP a cuentas gratuitas (Hotmail, Gmail, etc.) agustibaldo Internet 5 17-07-2007 15:29:31
A Comparison of Live Hotmail, Gmail and Yahoo Mail marcoszorrilla Noticias 0 09-02-2007 23:16:53


La franja horaria es GMT +2. Ahora son las 00:52:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi