Jump to content

Problema no envio de mails


amiloM1425
 Share

Recommended Posts

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?

Link to comment
Share on other 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;
	}
    }
Link to comment
Share on other 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.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Link to comment
Share on other 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?

Link to comment
Share on other 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...

Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.