problemas con javax.mail
Hola a todos,
mi problema es el siguiente. Tengo una aplicaci贸n desde la que se realiza env铆o de mails a una serie de destinatarios.
Este es el m茅todo que utilizo.
/**
* Nombre del m茅todo: sendAttachmentsSmtpMail.
* Descripci贸n del m茅todo: Enviar谩 un mail normal por smtp con ficheros atachados.
* Entradas: Un destinatario del mail, el remitente, el asunto, el cuerpo, el usuario de correo, el puerto de env铆o, la contrase帽a del usuario de correo, una colecci贸n de dataBeans de ficheros y la direcci贸n de donde se recogen los ficheros.
* Salidas:
*/
public void sendAttachmentsSmtpMail(String destinatario, String remitente, String asunto, String cuerpo, String puerto, String mailUser, String mailPassword, Collection attachments, String filesUri) throws javax.mail.MessagingException, SendFailedException, MailException {
// Declaraci贸n de variables.
MimeMessage message; // Mensaje de javamail.
Transport transport; // Transporte para javamail.
javax.mail.Session mailSession; // Sesi贸n de javamail.
Multipart mp; // Mensaje multipart para env铆o de ficheros.
FileDataSource fds; // String con la url del fichero.
MimeBodyPart mbp; // Para el contenido con ficheros.
Iterator iterator; // Iterator para recorrer la colecci贸n.
// Operaciones.
try {
// Se manda un mail al empleado.
mailSession = javax.mail.Session.getInstance(System.getProperties(),null);
// Define message
message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress(remitente));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(destinatario));
message.setSubject(asunto, "ISO-8859-1");
message.setText(cuerpo, "ISO-8859-1");
mp = new MimeMultipart();
iterator = attachments.iterator();
while (iterator.hasNext()) {
EdpFicheroDataBean fichero = (EdpFicheroDataBean)iterator.next();
fds = new FileDataSource(filesUri + fichero.getDescripcion());
mbp = new MimeBodyPart();
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName(fichero.getNombre());
mp.addBodyPart(mbp);
message.setContent(mp);
}
mbp = new MimeBodyPart();
//mbp.setFileName("Lista de tel茅fonos.txt");
mbp.setText(cuerpo, "ISO-8859-1");
mp.addBodyPart(mbp);
message.setContent(mp);
// Define transport
transport = mailSession.getTransport("smtp");
transport.connect(puerto,mailUser,mailPassword);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
} catch (SendFailedException e) {
e.printStackTrace();
throw new MailException();
} catch (javax.mail.MessagingException e) {
e.printStackTrace();
throw new MailException();
}
El problema es que si yo como destinatario le paso una direcci贸n de mail que no existe, por ejemplo 'smoral', el mail se env铆a y no salta ning煤n error cuando en realidad esa direccion de correo no existe. Este lo puedo controlar yo de alguna manera desde la clase o es el servidor de correo el que se encarga ya de devolver el mail o lanzar un error?
A ver si me pod茅is ayudar ya que ando un poco perdida y no se bien como va todo esto.
Muchas gracias y un saludo.
sara
mi problema es el siguiente. Tengo una aplicaci贸n desde la que se realiza env铆o de mails a una serie de destinatarios.
Este es el m茅todo que utilizo.
/**
* Nombre del m茅todo: sendAttachmentsSmtpMail.
* Descripci贸n del m茅todo: Enviar谩 un mail normal por smtp con ficheros atachados.
* Entradas: Un destinatario del mail, el remitente, el asunto, el cuerpo, el usuario de correo, el puerto de env铆o, la contrase帽a del usuario de correo, una colecci贸n de dataBeans de ficheros y la direcci贸n de donde se recogen los ficheros.
* Salidas:
*/
public void sendAttachmentsSmtpMail(String destinatario, String remitente, String asunto, String cuerpo, String puerto, String mailUser, String mailPassword, Collection attachments, String filesUri) throws javax.mail.MessagingException, SendFailedException, MailException {
// Declaraci贸n de variables.
MimeMessage message; // Mensaje de javamail.
Transport transport; // Transporte para javamail.
javax.mail.Session mailSession; // Sesi贸n de javamail.
Multipart mp; // Mensaje multipart para env铆o de ficheros.
FileDataSource fds; // String con la url del fichero.
MimeBodyPart mbp; // Para el contenido con ficheros.
Iterator iterator; // Iterator para recorrer la colecci贸n.
// Operaciones.
try {
// Se manda un mail al empleado.
mailSession = javax.mail.Session.getInstance(System.getProperties(),null);
// Define message
message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress(remitente));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(destinatario));
message.setSubject(asunto, "ISO-8859-1");
message.setText(cuerpo, "ISO-8859-1");
mp = new MimeMultipart();
iterator = attachments.iterator();
while (iterator.hasNext()) {
EdpFicheroDataBean fichero = (EdpFicheroDataBean)iterator.next();
fds = new FileDataSource(filesUri + fichero.getDescripcion());
mbp = new MimeBodyPart();
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName(fichero.getNombre());
mp.addBodyPart(mbp);
message.setContent(mp);
}
mbp = new MimeBodyPart();
//mbp.setFileName("Lista de tel茅fonos.txt");
mbp.setText(cuerpo, "ISO-8859-1");
mp.addBodyPart(mbp);
message.setContent(mp);
// Define transport
transport = mailSession.getTransport("smtp");
transport.connect(puerto,mailUser,mailPassword);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
} catch (SendFailedException e) {
e.printStackTrace();
throw new MailException();
} catch (javax.mail.MessagingException e) {
e.printStackTrace();
throw new MailException();
}
El problema es que si yo como destinatario le paso una direcci贸n de mail que no existe, por ejemplo 'smoral', el mail se env铆a y no salta ning煤n error cuando en realidad esa direccion de correo no existe. Este lo puedo controlar yo de alguna manera desde la clase o es el servidor de correo el que se encarga ya de devolver el mail o lanzar un error?
A ver si me pod茅is ayudar ya que ando un poco perdida y no se bien como va todo esto.
Muchas gracias y un saludo.
sara
hola, sara...
por supuesto que se puede controloar el hecho de que un correo se construya con una direccion de remitente invalida. esto se hace diciendole al servidor que exija autenticacion de usuario antes de mandatr un mail, por lo tanto la direcion de remitente debe estar asociada a un buzon con su respectiva contrase帽a.
Antes que todo hat que ubicarse en un contexto.
Me imagino que el codigo de arriba debe estar en una clase la cual es la que se encarga de formar el mail, tiene un metodo que recibe el remitente(from), el destinatario(to) el asunto(subject), el mensaje...
Si no es asi te recomiendo que sigas este modelo.
Lo unico que tienes que hacer para que el servidor pida autenticacion de usuario es crear el siguiente constructor
protected javax.mail.Session session;
protected java.util.Properties properties;
protected javax.mail.Transport channel;
public MyClass(String server,boolean auth) throws javax.mail.NoSuchProviderException{
server_address = new java.lang.String(server);
properties = java.lang.System.getProperties();
properties.put("mail.smtp.host", server_address);
properties.put("mail.smtp.auth",auth+"");
session = javax.mail.Session.getDefaultInstance(properties);
channel = session.getTransport("smtp");
}
De esta forma cada vez que te conectes al sevidor le tendras que enviar el el usuario y su password.
channel.connect(server_address,login,password);
No te olvides de cerrar el canal una vez enviado el mail
channel .close()
Espero que esto sea de tu ayuda
por supuesto que se puede controloar el hecho de que un correo se construya con una direccion de remitente invalida. esto se hace diciendole al servidor que exija autenticacion de usuario antes de mandatr un mail, por lo tanto la direcion de remitente debe estar asociada a un buzon con su respectiva contrase帽a.
Antes que todo hat que ubicarse en un contexto.
Me imagino que el codigo de arriba debe estar en una clase la cual es la que se encarga de formar el mail, tiene un metodo que recibe el remitente(from), el destinatario(to) el asunto(subject), el mensaje...
Si no es asi te recomiendo que sigas este modelo.
Lo unico que tienes que hacer para que el servidor pida autenticacion de usuario es crear el siguiente constructor
protected javax.mail.Session session;
protected java.util.Properties properties;
protected javax.mail.Transport channel;
public MyClass(String server,boolean auth) throws javax.mail.NoSuchProviderException{
server_address = new java.lang.String(server);
properties = java.lang.System.getProperties();
properties.put("mail.smtp.host", server_address);
properties.put("mail.smtp.auth",auth+"");
session = javax.mail.Session.getDefaultInstance(properties);
channel = session.getTransport("smtp");
}
De esta forma cada vez que te conectes al sevidor le tendras que enviar el el usuario y su password.
channel.connect(server_address,login,password);
No te olvides de cerrar el canal una vez enviado el mail
channel .close()
Espero que esto sea de tu ayuda
