Retroceder   Foros del Web > Programación para sitios web > Java y JSP

Respuesta
 
Herramientas Desplegado
Antiguo 24-ene-2006, 12:45   #1 (permalink)
blackwind está en el buen camino
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 986
Problemas con JavaMail (auntetificacion)

que tal, pues ahora lo que intento es poder mandar un mail, ya lei la documentacion de javamail, y busque un ejemplito (sin autentificacion) para mandar un mail.
Y yo lo modifique para que se auntenticar de un correo de Yahoo a otro de Yahoo, pero me manda este error:
javax.mail.AuthenticationFailedException
at javax.mail.Service.connect(Service.java:306)
at javax.mail.Service.connect(Service.java:156)
at TestEmail.main(TestEmail.java:51)
Press any key to continue...

este es el codigo:
Código PHP:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

// Send a simple, single part, text/plain e-mail
public class TestEmail {

    public static 
void main(String[] args) {

        
// SUBSTITUTE YOUR EMAIL ADDRESSES HERE!!!
        
String to "mimail@yahoo.com";
        
String from "mimail@yahoo.com";
        
String pass "mipass";
        
// SUBSTITUTE YOUR ISP'S MAIL SERVER HERE!!!
        
String host "smtp.mail.yahoo.com";

        
// Create properties, get Session
        
Properties props = new Properties();

        
// If using static Transport.send(),
        // need to specify which host to send it to
        
props.put("mail.smtp.host"host);
        
// To see what is going on behind the scene
        //props.put("mail.debug", "true");
        
props.put("mail.smtp.auth","true");
        
Session session Session.getInstance(props);

        
        try {
            
// Instantiatee a message
            
Message msg = new MimeMessage(session);
            
            
            
            
            
//Set message attributes
            
msg.setFrom(new InternetAddress(from));
            
InternetAddress[] address = {new InternetAddress(to)};
            
msg.setRecipients(Message.RecipientType.TOaddress);
            
msg.setSubject("Test E-Mail through Java");
            
msg.setSentDate(new Date());

            
// Set message content
            
msg.setText("This is a test of sending a " +
                        
"plain text e-mail through Java.\n" +
                        
"Here is line 2.");
                        
            
Transport trans session.getTransport(address[0]);
            
            
trans.connect(host,from,pass);
            
//trans.send(msg);
            
trans.sendMessage(msg,address);
            
            
//Send the message
            //Transport.send(msg);
        
}
        catch (
MessagingException mex) {
            
// Prints all nested (chained) exceptions as well
            
mex.printStackTrace();
        }
    }
}
//End of class 
No se que estoy haciendo mal, o si alguien me puede decir como.....
p.d: obviamente en el programa original pongo bien mi username y password jeje..

saludos,
blackwind está desconectado   Responder Citando
Antiguo 24-ene-2006, 13:09   #2 (permalink)
NanoWare ha deshabilitado el karma
 
Avatar de NanoWare
 
Fecha de Ingreso: octubre-2005
Mensajes: 19
Sonrisa autenticacion con Javamail

BlackWind...

prueba esta instruccion, ami me funciona perfectamente:

props.put("mail.smtp.auth","true");
//estas son las lineas agregadas
sistemas auth = new sistemas();
Session session = Session.getInstance(props , auth);

al final agregas esta clase

class sistemas extends javax.mail.Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
String username = "usuario@servidor.com";
String password = "password";

return new PasswordAuthentication(username, password);
}
}


como ves se instancia una llamada la clase sistemas que extiende la clase de autenticacion, con la cual se obtienen los datos de usuario y password, los cuales se instancian finalmente en la construccion del mensaje para su envio por medio del objeto session
NanoWare está desconectado   Responder Citando
Antiguo 24-ene-2006, 13:41   #3 (permalink)
blackwind está en el buen camino
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 986
ya probe, pero me sigue mandando el mismo error :S
alguna otra solucion?
blackwind está desconectado   Responder Citando
Antiguo 25-ene-2006, 08:07   #4 (permalink)
Ace_ventura ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2005
Mensajes: 56
Mira este codigo a ver
Código PHP:
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

public class 
MailExample1 {
public static 
void main (String args[]) throws Exception {
String host args[0];
String from args[1];
String to args[2];

// Get system properties
Properties props System.getProperties();

// Setup mail server
props.put("mail.smtp.host"host);
Authenticator auth = new MyAuthenticator();

// Get session 
Session session Session.getDefaultInstance(propsauth);

// Define message
MimeMessage message = new MimeMessage(session);

// Set the from address
message.setFrom(new InternetAddress(from));

// Set the to address
message.addRecipient(Message.RecipientType.TO
new 
InternetAddress(to));

// Set the subject
message.setSubject("Hello");

// Set the content
message.setText("Welcome");

// Send message
Transport.send(message);
}


static class 
MyAuthenticator extends Authenticator {
PasswordAuthentication l = new PasswordAuthentication("username""password"); 
protected 
PasswordAuthentication getPasswordAuthentication() {
return 
l;
}
}

Basicamente es el mismo ke puso NanoWare salvo por una linea en la ultima clase, a mi me funciona.
Ace_ventura está desconectado   Responder Citando
Antiguo 25-ene-2006, 09:56   #5 (permalink)
blackwind está en el buen camino
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 986
Sigue sin funcionarme.
Lei que com yahoo y hotmail no se, y con gmail si, asi que cambie.
Pero aun asi no funciona,
agregue estas lineas de codigo:

props.put("mail.smtp.debug", "true");
props.put("mail.smtp.port","465");
props.put("mail.smtps.auth","true");

session.setDebug(true);

y no funciona. Se queda tratando de establecer la conexion.

Lo extranio es que baje otra libreria llamada
Secure iNet Factory y con esa funciona a la perfeccion, el problema es que es de paga y vale 1000 dollares.

Me pueden decir con que servidor probaron que si les funcione su codigo??
es decir, su codigo tal cual (a excepcion de su password y username)

saludos,
blackwind está desconectado   Responder Citando
Antiguo 25-ene-2006, 13:35   #6 (permalink)
jprogrammer no se puede cailificar en este momento
 
Fecha de Ingreso: enero-2006
Mensajes: 2
Enviar un mensaje por MSN a jprogrammer
Hola a todos:

Ojo, Si tu correo realmente es de yahoo ni lo sigas intentando, yahoo no permite la autenticacion al igual que gmail, debes buscar un servidor de correo que si lo permita

Me cuentan
jprogrammer está desconectado   Responder Citando
Antiguo 26-ene-2006, 12:47   #7 (permalink)
blackwind está en el buen camino
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 986
aun cuando necesiten autntificacion se puede.
Si se puede configurr el outlook para recibir, entonces se puede crear un programa que lo haga.
Y como decia, con la libreria esa que baje, con google me funciona a la perfeccion. Pero ya haciendolo con javamail no sale...........

alguien tiene un codigo para un servidor especifico que si funcione?
blackwind está desconectado   Responder Citando
Antiguo 26-ene-2006, 16:57   #8 (permalink)
Willie tiene algunos puntos positivos de karma
 
Fecha de Ingreso: junio-2005
Mensajes: 287
Puede ser que el servidor (SMTP) requiera autentificacion por medio de SSL/TLS. Quizas esa libreria privada implementa esta autentificacion segura ("Secure") por medio de SSL/TLS.

No se si hay implementacion SSL en Java, seguro que si la hay. Haz un Google.
Willie está desconectado   Responder Citando
Antiguo 26-ene-2006, 20:24   #9 (permalink)
blackwind está en el buen camino
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 986
excelente willie, muchas gracias.
Eso era lo que necesitaba y ya me quedo.

Por si a alguien le interesa, aqui les dejo el codigo
package com.radicalsoftware.rademailhosting;

Código PHP:
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/***********************************************
/* JavaMail SSL + Authentication - Example Code
/************************************************/
public class Mailer
{

    public static 
void main(String[] args)
    {
        
Mailer obj = new Mailer();
        
String server "smtp.gmail.com";
        
String userName "username@gmail.com";
        
String password "password";
        
String fromAddres "perenganito";
        
String toAddres "alguien@correo.com";
        
String cc "";
        
String bcc "";
        
boolean htmlFormat false;
        
String subject "tema";
        
String body "prueba";
        
        
obj.sendMail(serveruserNamepasswordfromAddrestoAddresccbcc,
                     
htmlFormatsubjectbody);
        
    }

    public 
void sendMail(String serverString userNameString passwordString fromAddressString toAddressString ccString bccboolean htmlFormatString subjectString body)
    {
    
        
Properties properties System.getProperties();
        
properties.put("mail.smtps.host"server);
        
properties.put("mail.smtps.auth""true");
        
Session ses  Session.getInstance(properties);

        
ses.setDebug(true);

        try{
        
            
MimeMessage msg = new MimeMessage(ses);
    
            
msg.setFrom(new InternetAddress(fromAddress));
    
            if (
toAddress != null)
            {
               
msg.addRecipients(Message.RecipientType.TOtoAddress);
            }
    
            if (
cc != null)
            {
                
msg.setRecipients(Message.RecipientType.CC
                        
,InternetAddress.parse(ccfalse));
            }
    
            if (
bcc != null)
            {
                
msg.setRecipients(Message.RecipientType.BCC
                        
,InternetAddress.parse(bccfalse));
            }
    
            if (
htmlFormat)
            {
                
msg.setContent(body"text/html");
            }
            else
            {
                
msg.setContent(body"text/plain");
            }
    
            
msg.setSubject(subject);
            
msg.saveChanges();
    
            
Transport tr ses.getTransport("smtps");
            
tr.connect(server,userNamepassword);
            
tr.sendMessage(msgmsg.getAllRecipients());
            
tr.close();
        }
        
        catch(
MessagingException e)
        {
            
e.printStackTrace();
        }
        
        

    }
}

class 
MyPasswordAuthenticator extends Authenticator
{
   
String user;
   
String pw;

   public 
MyPasswordAuthenticator (String usernameString password)
   {
      
super();
      
this.user username;
      
this.pw password;
   }
   public 
PasswordAuthentication getPasswordAuthentication()
   {
      return new 
PasswordAuthentication(userpw);
   }

saludos,
blackwind está desconectado   Responder Citando
Antiguo 28-ene-2006, 10:40   #10 (permalink)
Ace_ventura ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2005
Mensajes: 56
Una pregunta blackwind ese pakete ke mencionas, es para empaketar la aplicacion, no veo ke lo importes. Segundo en donde se hace el llamado al puerto 465 de gmail, o es ke automaticamente busca ese puerto (me imagino ke sera el ke usa gmail), xq estoy tratando de usar tu codigo con mi servidor de correos y no me funciona me dice connection refused xq el intenta abrir es el puerto 465 de mi servidor y ese no es el ke el usa sino el 25. Agradezco me puedas aclarar estas dudas.
PD: enviando correo desde este codigo hacia el servidor de mi universidad si funciona.
Ace_ventura está desconectado   Responder Citando
Antiguo 28-ene-2006, 11:29   #11 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.519
SMTP -> Puerto 25
SMTPS -> Puerto 465

Si el puerto 465 no responde seguramente es por que tu universidad el servidor no tenga habilitado el protocolo SMTPS
GreenEyed está desconectado   Responder Citando
Antiguo 28-ene-2006, 21:20   #12 (permalink)
blackwind está en el buen camino
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 986
ademas de lo que dijo willie, ya estuve checando algunas pruebas, y la parte clave del codigo es esta:


Transport trans = session.getTransport("smtps");

si haces eso, automaticamente buscara el puerto 465 con SSL true (que es lo que gmail necesita), si no haces eso, aun cuando especifiques el puerto 465, el SSL sera "false", y no podras establecer la conexion.

De hecho, en el primer codigo que puse, si cambias esta linea:
Transport trans = session.getTransport(address[0]);
por la que puse arriba, y esta:
props.put("mail.smtp.host", host);
por:
props.put("mail.smtps.host", host);

(con la "s")
tambien funcionara.

Espero que te sirva
saludos,
blackwind está desconectado   Responder Citando
Antiguo 30-ene-2006, 08:21   #13 (permalink)
Ace_ventura ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2005
Mensajes: 56
Ke mas a todos, blackwind probe tu codigo (el primero ke pusiste) con los cambios ke mencionaste y no me funciona, greeneyed debe tener razon de pronto el servidor de mi universidad no tiene habilitado dicho protocolo; sin cambiar las lineas ke mencionas si me funciona pero solo hacia mi servidor si intento enviar correo hacia otro no me funciona sigue con el relay denied. Por ahi lei algo ke para ke le permita enviar correo hay ke autentificarse primero por medio de pop3, es decir ingresar y bajar el correo, algo llamado pop3 before smtp, pero nada lo hice asi y sigue sin dejarme enviar correo hacia otros servidores, con el error ke ya mencione antes.
Ace_ventura está desconectado   Responder Citando
Antiguo 30-ene-2006, 14:28   #14 (permalink)
blackwind está en el buen camino
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 986
no se, ni idea de que pueda estar pasando.....
blackwind está desconectado   Responder Citando
Antiguo 30-ene-2006, 15:18   #15 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.519
Es probablemente una cuestion de configuracion del servidor de correo. En mi universidad el servidor de correo solo te permite enviar mensajes de correo a direcciones fuera de la universidad si estas DENTRO de la red de la universidad. Y de ninguna de las maneras te deja enviar un mensaje si en el from no pone una direccion de la universidad.

Todo eso lo hacen para prevenir que los spammers usen los servidores de correo de la universidad para enviar sus mensajes masivos, y el mensaje de error que devuelve es... adivina ;)
GreenEyed está desconectado   Responder Citando
Antiguo 27-feb-2007, 22:54   #16 (permalink)
jorgeisss ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1
Re: Problemas con JavaMail (auntetificacion)

Encontré la solución, para correos que usan stmps(seguro) y smtp normal, el smtps de google ocupa el puerto 465 que se ha mencionado anteriormente en este foro, les dejo el codigo para funcionar con google, si desean cambiar a otro servidor de correo con smtp normarl que usa el puerto 25 solo deben modificar la linea :
boolean ssl = true;
y ponerla como
boolean ssl = false;
y obviamente el nombre de usuario y contraseña
si tienen bien instaladas las librerias javamail y una salida a internet sin los puertos 25 y 465 bloquedos, seguro que funciona

Código PHP:

String to 
mail;     // to address 
        
String from "usuario@gmail.com"// fromaddress 
        
String subject "Titulo del correo";  
        
String message "<b>Mensaje de prueba</b><br><h1>Hola></h1>";
        
String mailhost "smtp.gmail.com"// servidor smtp de gmail(smtps), pero en esta linea no lleva la "s" de "smtps"
        
String user "usuario@gmail.com"// Aqui va tu nombre de usuario, observa que va tambien "@gmail.com" no solamente el nombre de usuario
        
String password "xxxx";              // Aqui va tu password

        // in the case of an exception, print a message to the output log 
        
boolean auth true;
        
boolean ssl true;
        
Properties props System.getProperties();
        
        if (
mailhost != null){
            
props.put("mail.smtp.host"mailhost);
            
props.put("mail.smtps.host"mailhost);
        }
        if (
auth){
            
props.put("mail.smtp.auth""true");
            
props.put("mail.smtps.auth""true");
        }
        
        
props.put("mail.smtp.port""25");
        
props.put("mail.smtps.port""465");
        
        
// Get a Session object
        
javax.mail.Session session javax.mail.Session.getInstance(props);
        
session.setDebug(true); 
   
        
// construct the message
        
javax.mail.Message msg = new MimeMessage(session);
        
        try {
            
//  Set message details
            
msg.setFrom(new InternetAddress(from));
            
msg.setRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(to));
            
msg.setSubject(subject);
            
msg.setSentDate(new Date());
            
msg.setContent(message"text/html");
            
//msg.setText(message);
                    
            // send the thing off
            
SMTPTransport t =
                    (
SMTPTransport)session.getTransport(ssl "smtps" "smtp"); //si ssl=true, smtps si no smtp
            
try {
                if (
auth)
                    
t.connect(mailhostuserpassword);
                else
                    
t.connect();
                
t.sendMessage(msgmsg.getAllRecipients());
            } 
finally {
           &n