Dúvidas enviando e-mails utilizando mail api

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:

[code]
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("relatorios@gigaplast.com.br"));
        msg.setRecipient(RecipientType.TO, new InternetAddress("fernando.zambone@gigaplast.com.br"));
        
        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();
    }
}[/code]

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?

fernando,

vc adicionou todas as libs? por exemplo:

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

att,

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.

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);
        }
    }
}

Para quem precisar, segue como ficou o código agora funcionando corretamente:

[code]
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("relatorios@gigaplast.com.br"));
        msg.setRecipient(RecipientType.TO, new InternetAddress("fernando.zambone@gigaplast.com.br"));
        
        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");
    }
}[/code]

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

Respondendo minha própria pergunta:

Alterei de

msg.setRecipient(RecipientType.TO, new InternetAddress("fernando.zambone@gigaplast.com.br"));

para

msg.setRecipients(RecipientType.TO, "fernando.zambone@gigaplast.com.br, fernando.zambone@gmail.com");