Foros del Web » Programación para mayores de 30 ;) » Java »

envio mensajes con protocolo SMTP java

Estas en el tema de envio mensajes con protocolo SMTP java en el foro de Java en Foros del Web. alguien me podria decir cual es el fallo o los fallos de este codigo?no me llega a enviar nunca el mensaje. Gracias Saludos public class ...
  #1 (permalink)  
Antiguo 01/12/2011, 05:22
Avatar de godisa  
Fecha de Ingreso: noviembre-2011
Mensajes: 46
Antigüedad: 13 años
Puntos: 1
envio mensajes con protocolo SMTP java

alguien me podria decir cual es el fallo o los fallos de este codigo?no me llega a enviar nunca el mensaje.
Gracias
Saludos

public class Email {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {


// TODO code application logic here
//se estableven las cadenas con informacion del servidor,usuario receptor y emisor del email y puerto de conexion
String servidor="nombreServidor";
String usuario_receptor="[email protected]";
String usuario_emisor="[email protected]";
int puerto =25;

try{

//se establece conexion abriendo un socket especificando el servidor y puerto SMTP
Socket socket=new Socket(servidor,puerto);

BufferedReader entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));

DataOutputStream salida = new DataOutputStream (socket.getOutputStream());



// Escribimos datos en el canal de salida establecido con el puerto del protocolo SMTP del servidor
if( socket != null && entrada != null && salida != null )
{
salida.writeBytes( "HELO servidor.es\r\n" );
salida.writeBytes( "MAIL From: "+usuario_emisor+"\r\n" );
salida.writeBytes( "RCPT TO: "+usuario_receptor+"\r\n");
salida.writeBytes( "DATA\n" );
salida.writeBytes( "Probando\n" );
salida.writeBytes( "el envio de mensajes\n" );
salida.writeBytes( ".\r\n" );
salida.writeBytes( "QUIT\r\n" );

}
// Cerramos los flujos de salida y de entrada y el socket cliente
salida.close();
entrada.close();
socket.close();

}catch(UnknownHostException e){
e.printStackTrace();
System.out.println("no se pudo conectar con el servidor indicado");

}catch (IOException e){
e.printStackTrace();
}
}
}
  #2 (permalink)  
Antiguo 01/12/2011, 07:08
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: envio mensajes con protocolo SMTP java

¿Da alguna excepción?
Intenta leer la respuesta del servidor y sacarla por pantalla, te puede dar alguna pista de qué está pasando.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 01/12/2011, 08:43
Avatar de godisa  
Fecha de Ingreso: noviembre-2011
Mensajes: 46
Antigüedad: 13 años
Puntos: 1
Respuesta: envio mensajes con protocolo SMTP java

si añado estas 3 lineas

System.out.println(entrada.readLine());
System.out.println(entrada.readLine());
System.out.println(entrada.readLine());

debajo de:

salida.writeBytes( "QUIT\r\n" );

me sale

501 Syntax error, parameters in command "MAIL From:nombre@vld" unrecognized or missing
  #4 (permalink)  
Antiguo 01/12/2011, 08:55
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: envio mensajes con protocolo SMTP java

Pues está claro entonces, no entiende ese comando "MAIL From:nombre@vld". Tendrás que escribirlo correctamente.

No conozco con detalle el protocolo, quizás falte el < > del correo. http://es.wikipedia.org/wiki/Simple_...nsfer_Protocol

o quizás FROM deba escribirse en mayúsculas.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 01/12/2011, 09:21
Avatar de javih  
Fecha de Ingreso: agosto-2011
Mensajes: 201
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: envio mensajes con protocolo SMTP java

Yo lo hago con este código e importando javax.mail.*

Properties propsSSL = _setPropertiesSSL();

Session session = Session.getInstance(propsSSL, this);

MimeMessage msg = new MimeMessage(session);

msg.setFrom(new InternetAddress(_from));

InternetAddress addressTo = new InternetAddress(_to);
addressTo = new InternetAddress(_to);
msg.setRecipient(MimeMessage.RecipientType.TO, addressTo);

msg.setSubject(_subject);
msg.setSentDate(new Date());

BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(_body);
_multipart.addBodyPart(messageBodyPart);

msg.setContent(_multipart);

Transport.send(msg);


Sobre el error 501 >> Aquí tienes como funciona el protocolo >> http://tools.ietf.org/html/rfc5321

501 Syntax error in parameters or arguments

ta cantao, tienes un error en la sintaxis.
  #6 (permalink)  
Antiguo 02/12/2011, 05:17
Avatar de godisa  
Fecha de Ingreso: noviembre-2011
Mensajes: 46
Antigüedad: 13 años
Puntos: 1
Respuesta: envio mensajes con protocolo SMTP java

estaba claro que era un error de sintaxis pero he tardado en dar con el,el codigo que me queda es:

public class enviar {
public static void main( String args[] ) throws IOException{


Socket socket_cliente = new Socket("servidor",25);
BufferedReader entrada = new BufferedReader(new InputStreamReader(socket_cliente.getInputStream()) );
DataOutputStream salida=new DataOutputStream(socket_cliente.getOutputStream()) ;

// Escribimos datos en el canal de salida establecido con el puerto del protocolo SMTP del servidor
if( socket_cliente != null && entrada != null && salida != null )
{
salida.writeBytes( "HELO servidor\r\n" );
System.out.println(entrada.readLine());
salida.writeBytes( "MAIL From:<15646.Administrator@VLD>\r\n" );
System.out.println(entrada.readLine());
salida.writeBytes( "RCPT To: <nombre@direccion>\r\n" );
System.out.println(entrada.readLine());
salida.writeBytes( "DATA\n" );
salida.writeBytes( "<hola hola>\n" );
salida.writeBytes( ".\r\n" );
System.out.println(entrada.readLine());
salida.writeBytes( "QUIT\r\n" );
System.out.println(entrada.readLine());
System.out.println(entrada.readLine());
// Los nombres en mayúsculas son comandos de SMTP

String respuesta;
while((respuesta=entrada.readLine().toUpperCase()) !=null)
{
System.out.println( "Servidor: "+respuesta );
if(respuesta.toUpperCase().indexOf("OK")!=-1) //nos devuelve la posición del string "OK"
System.out.println("Ha sido recibido el OK del mensaje");
break;
}

// Cerramos los flujos de salida y de entrada y el socket cliente
salida.close();
entrada.close();
socket_cliente.close();
}
}
}

me envia el mensaje y se recibe, lo unico que me lo envia vacio,porque data es para enviar el contenido que quiero que vea el receptor no?o estoy equivocada?
Saludos

Gracias

Etiquetas: mensajes, protocolo, smtp, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:07.