• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

amiloM1425

Problema no envio de mails

12 mensagens neste tópico

Olá pessoal

Ora o que me traz aqui hoje é o seguinte, na aplicação estou a enviar mails automaticamente, funcionalidade que já esteve a funcionar, no entanto de há uns dias para cá começou a dar-me a seguinte excepção:

javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
class javax.mail.SendFailedException: 550-”JunkMail rejected - bl7-163-128.dsl.telepac.pt (Admin-PC)
550-[85.240.163.128]:53134 is in an RBL, see
550 http://www.spamhaus.org/query/bl?ip=85.240.163.128”

Alguém sabe o que poderá estar a causar o problema?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já reparas-te nisto ? http://www.spamhaus.org/pbl/query/PBL043408

Acho que o teu IP foi bloqueado pelo servidor motivos de spam

Hum, já percebi a causa do problema.

Agora, eles falam em "turn on SMTP Authentication", ou seja, de alguma forma na minha aplicação terei que me autenticar perante o servidor SMTP, certo?

O código a seguir é o que estou a usar para o envio de mails, eu julgava que estava a fazer essa mesma autenticação, mas se calhar não.

Se pudessem dar uma vista de olhos agradecia.

public boolean sendAtachmentEmail(String fileName, CConfigurationInfo confInfo)
{
	try {
		String[] emails = confInfo.getEmailList().split(";");
		boolean debug = false;
		Properties props = new Properties();
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.host", confInfo.getSmtp());
		props.setProperty("mail.user", confInfo.getUsername());
		props.setProperty("mail.password", confInfo.getPassword());

		Session mailSession = Session.getDefaultInstance(props, null);
		mailSession.setDebug(debug);
		Transport transport = mailSession.getTransport();

		MimeMessage message = new MimeMessage(mailSession);
		message.setSubject("Mail automatico");

		MimeBodyPart textPart = new MimeBodyPart();
		textPart.setContent("<h1>Em anexo seguem o relatório</h1>", "text/html");

		MimeBodyPart attachFilePart = new MimeBodyPart();
		FileDataSource fds = new FileDataSource(reportName);
		attachFilePart.setDataHandler(new DataHandler(fds));
		attachFilePart.setFileName(fds.getName());

		Multipart mp = new MimeMultipart();
		mp.addBodyPart(textPart);
		mp.addBodyPart(attachFilePart);

		message.setContent(mp);
		message.setFrom(new InternetAddress(confInfo.getSender()));

		for (int i = 0; i < emails.length; i++) {
			message.addRecipient(Message.RecipientType.TO,new InternetAddress(emails[i]));	
		}

		transport.connect();
		transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO));
		transport.close();
		return true;
	}
	catch(Exception e){
		return false;
	}
    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por acaso nunca utilizei este recurso do java, alias usei mas foi uma lib externa para enviar através do gmail.

Mas encontrei este exemplo http://www.osix.net/modules/article/?id=39

É parecido com o teu mas com algumas coisas diferentes pode ser que seja algo que te falte.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por acaso nunca utilizei este recurso do java, alias usei mas foi uma lib externa para enviar através do gmail.

Mas encontrei este exemplo http://www.osix.net/modules/article/?id=39

É parecido com o teu mas com algumas coisas diferentes pode ser que seja algo que te falte.

Continua a não funcionar  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta a adicionar isto

props.put("mail.smtp.auth", "true");

Acho que deve resolver.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta a adicionar isto

props.put("mail.smtp.auth", "true");

Acho que deve resolver.

Já tentei fazer isso, e agora dá outra excepção, no entanto através do session.debug dá para perceber que o que causa esta nova excepção é o mesmo problema.

Haverá outra forma de enviar mail sem ser através da API JavaMail?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Problema resolvido  :).

Eu já tinha no meu código a seguinte linha

props.put("mail.smtps.auth", "true");

e só agora reparei que devia ser

props.put("mail.smtp.auth", "true");

É o que dá ir fazendo alguns copy-paste  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lol pois é que não encontrei mais nada que pode-se estar a causar isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há uns tempos atras precisei de enviar mails e utilizei algo parecido com isto...espero que seja util

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

public class Sender {
    
    /** Creates a new instance of Sender */
    public Sender() {
    }
    public void enviaMail(String emailRemetente, String emailDestinatario, String hostSMTP,
            String hostUsername, String hostPassword, int portSMTP,
            String assuntoEmail, String texto, Vector file) throws AddressException, MessagingException, UnsupportedEncodingException, IOException {
        
        Properties        props   = new Properties();
        Session           session = Session.getInstance(props);
        Message           msg     = new MimeMessage(session);
        InternetAddress[] address = { new InternetAddress(emailDestinatario) };
        
        msg.setRecipients(Message.RecipientType.TO, address);
        msg.setSubject(assuntoEmail);
        msg.setSentDate(new Date());
        msg.addHeader("X-Priority", "1");
        msg.addHeader("Disposition-Notification-To", MimeUtility.encodeText(emailRemetente));
        msg.addHeader("X-Confirm-Reading-To", MimeUtility.encodeText(emailRemetente));
        msg.addHeader("X-PMRQC", "1");
        msg.setFrom(new InternetAddress(emailRemetente));
        
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        Multipart multipart = new MimeMultipart();
        
        messageBodyPart.setText(texto);
        multipart.addBodyPart(messageBodyPart);
        
        for (Object elem : file) {
            messageBodyPart = new MimeBodyPart();
            messageBodyPart.attachFile((String) elem);
            multipart.addBodyPart(messageBodyPart);
        }
        msg.setContent(multipart);
        
        Transport transport = session.getTransport("smtp");
        transport.connect(hostSMTP, hostUsername,hostPassword);
        transport.sendMessage(msg, msg.getAllRecipients());   
    }
    
}

PS: Precisas do JAR da JavaMail e de outro que não me recordo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há uns tempos atras precisei de enviar mails e utilizei algo parecido com isto...espero que seja util

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

public class Sender {
    
    /** Creates a new instance of Sender */
    public Sender() {
    }
    public void enviaMail(String emailRemetente, String emailDestinatario, String hostSMTP,
            String hostUsername, String hostPassword, int portSMTP,
            String assuntoEmail, String texto, Vector file) throws AddressException, MessagingException, UnsupportedEncodingException, IOException {
        
        Properties        props   = new Properties();
        Session           session = Session.getInstance(props);
        Message           msg     = new MimeMessage(session);
        InternetAddress[] address = { new InternetAddress(emailDestinatario) };
        
        msg.setRecipients(Message.RecipientType.TO, address);
        msg.setSubject(assuntoEmail);
        msg.setSentDate(new Date());
        msg.addHeader("X-Priority", "1");
        msg.addHeader("Disposition-Notification-To", MimeUtility.encodeText(emailRemetente));
        msg.addHeader("X-Confirm-Reading-To", MimeUtility.encodeText(emailRemetente));
        msg.addHeader("X-PMRQC", "1");
        msg.setFrom(new InternetAddress(emailRemetente));
        
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        Multipart multipart = new MimeMultipart();
        
        messageBodyPart.setText(texto);
        multipart.addBodyPart(messageBodyPart);
        
        for (Object elem : file) {
            messageBodyPart = new MimeBodyPart();
            messageBodyPart.attachFile((String) elem);
            multipart.addBodyPart(messageBodyPart);
        }
        msg.setContent(multipart);
        
        Transport transport = session.getTransport("smtp");
        transport.connect(hostSMTP, hostUsername,hostPassword);
        transport.sendMessage(msg, msg.getAllRecipients());   
    }
    
}

PS: Precisas do JAR da JavaMail e de outro que não me recordo...

Antes de mais, obrigado pelo interesse em ajudar, no entanto já tinha resolvido o problema que estava a ter.

De qualquer forma aproveito para comentar o teu código.

Pela experiência que tive ao criar esta funcionalidade aprendi que existem servidores smtp que necessitam que  o "cliente de mail", no nosso caso as nossas aplicações, se autentiquem perante ele e julgo que o teu código não o está a fazer.

Estavas algum servidor smpt instalado na tua máquina ou numa máquina ligada à rede de uma empresa/escola/casa? Ou estavas a usar gmail, hotmail, etc?

Ps: caso tenha dito algum disparate, agradeço que comentem. Estamos todos aqui para aprender e ajudar no que sabemos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

transport.connect(hostSMTP, hostUsername,hostPassword); Penso que esta linha obriga a usar autenticação....

mas o servidor que usava só deixava enviar emails com autenticação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora