Dúvidas enviando e-mails utilizando mail api

5 respostas
F

Pessoal,

Sou novato e ainda com algumas dificuldades conceituais. Estou tentando desenvolver um aplicativo que gere um relatório utilizando iReport e envie via e-mail, a parte do relatório já está redonda, agora empaquei no envio do e-mail.

Segui algumas dicas que encontrei na web e montei meu método void enviaemail(), segue o código parcial:
public void enviaemail() {
        Properties p = new Properties();
        p.put("mail.transport.protocol", "smtp");
        p.put("mail.smtp.starttls.enable", "true");
        p.put("mail.smtp.host", "smtp.gigaplast.com.br");
        p.put("mail.smtp.auth", "true");
        Authenticator auth = new SMTPAuthenticator();
        Session secao = Session.getInstance(p, auth);
        MimeMessage msg = new MimeMessage(secao);
        
        try {
            //dê e para
            msg.setFrom(new InternetAddress("[email removido]"));
            msg.setRecipient(RecipientType.TO, new InternetAddress("[email removido]"));
            
            msg.setSentDate(new Date());
            msg.setSubject("Relatório Teste");
            msg.setFileName("Atrasos.pdf");
            Transport.send(msg);
        } catch (AddressException e) {
            //preencher aqui
            e.printStackTrace();
        } catch (MessagingException e) {
            //preencher aqui
            e.printStackTrace();
        }
    }

Por algum motivo a IDE não está reconhecendo o método SMTPAuthenticator() que eu chamo quando instancio a variável auth do tipo Authenticator (linha 7) e meu código não compila, seria um problema nos imports?

5 Respostas

pedruhenrik

fernando,

vc adicionou todas as libs? por exemplo:

mail.jar smtp.jar mailapi.jar pop3.jar

att,

F

Pedruhenrik,

Adicionei sim, mas acabei de notar que o método SMTPAuthenticathor não existe, eu preciso implementá-lo, é que virou um clichê e todo mundo usa este mesmo nome para o método e em todos os exemplos está do mesmo jeito, logo pensei que fosse o método de alguma lib, mas na verdade preciso implementá-lo.

F

e ae fernando blz,

tenho um código de exemplo de envio de e-mail
Nota que tem uma classe SMTPAuthenticator que extende javax.mail.Authenticator
acho que é só isso que tá faltando no teu código!

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Mailer {
	private String username;
	private String password;

	public void send() throws Exception {

        username = "xxx";
        password = "xxx";

        Authenticator authenticator = new SMTPAuthenticator();

        Session mailSession = Session.getDefaultInstance(props, authenticator);
        // uncomment for debugging infos to stdout
        //mailSession.setDebug(true);
        
        Transport transport = mailSession.getTransport();

        MimeMessage message = new MimeMessage(mailSession);
        
        message.setContent(sb.toString(), "text/plain");
        
        message.setFrom(new InternetAddress(fromAddress));
        
        
        message.addRecipients(Message.RecipientType.TO, toAddress);
        message.setSubject(subject);
        
        transport.connect();
        
        transport.sendMessage(message,
            message.getRecipients(Message.RecipientType.TO));
        transport.close();
    }

    private class SMTPAuthenticator extends javax.mail.Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
           return new PasswordAuthentication(username, password);
        }
    }
}
F
Para quem precisar, segue como ficou o código agora funcionando corretamente:
public void enviaemail() {
        Properties p = new Properties();
        p.put("mail.transport.protocol", "smtp");
        //p.put("mail.smtp.starttls.enable", "true");
        p.put("mail.smtp.host", "smtp.gigaplast.com.br");
        p.put("mail.smtp.auth", "true");
        Authenticator auth = new SMTPAuthenticator();
        Session secao = Session.getInstance(p, auth);
        MimeMessage msg = new MimeMessage(secao);
        
        try {
            //dê e para
            msg.setFrom(new InternetAddress("[email removido]"));
            msg.setRecipient(RecipientType.TO, new InternetAddress("[email removido]"));
            
            msg.setSentDate(new Date());
            msg.setSubject("Relatório Pedidos em Atraso");
            MimeBodyPart arquivoBodyPart = new MimeBodyPart();
            FileDataSource fds;
            File f = new File("Atrasos.pdf");
            fds = new FileDataSource(f);
            arquivoBodyPart.setDataHandler(new DataHandler(fds));
            arquivoBodyPart.setFileName(f.getName());
            Multipart mp = new MimeMultipart();
            mp.addBodyPart(arquivoBodyPart);
            msg.setContent(mp);
            Transport.send(msg);
        } catch (AddressException e) {
            //preencher aqui
            e.printStackTrace();
        } catch (MessagingException e) {
            //preencher aqui
            e.printStackTrace();
        }
    }
    
    private class SMTPAuthenticator extends javax.mail.Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("xxxx", "xxxx");
        }
    }

Porém agora a dúvida é: Como faço para enviar o e-mail para mais de um destinatário?

F

Respondendo minha própria pergunta:

Alterei de

msg.setRecipient(RecipientType.TO, new InternetAddress("[email removido]"));

para

msg.setRecipients(RecipientType.TO, "[email removido], [email removido]");
Criado 5 de maio de 2011
Ultima resposta 5 de mai. de 2011
Respostas 5
Participantes 3