Enviar vários email's (mesmo que tenha alguma falhado no meio)

2 respostas
R

Estou enfrentando problemas ao fazer uma mala direta usando javamail, porque se um dos emails falhar nesse meio, os demais não são enviados…

Como posso resolver?

(É gerada uma exception que interrompe a execução do método)

2 Respostas

L

Daew ,da uma olhada neste codigo que uso,derrepente te ajuda,t+

/**
 *
 * @author lgweb
 */
public class MailUtil {

    private static Properties props = new Properties();

    public static void sendMail( InternetAddress[] address, String assunto, String mensagem, File fanexo, Date dataEnvio) throws Exception {

        props.load(MailUtil.class.getResourceAsStream("/mailconf.properties"));//carrega arquivo de configuração de e-mail em src/java

        Session mailSession;//javax.mail.Session

        if (props.getProperty("mail.smtp.auth").equalsIgnoreCase("true")) {//se for pra authenticar
            Authenticator auth = new SMTPAuthenticator();//criar um authenticador ( classe interna - abaixo )
            mailSession = Session.getDefaultInstance(props, auth);//pega sessão passando as config e o authenticador
        } else {
            mailSession = Session.getDefaultInstance(props, null);//se nao precisar authenticar (maioria), passa soh as config.
        }

        Transport transport = mailSession.getTransport("smtp");

        MimeMessage message = new MimeMessage(mailSession);
        message.setFrom(new InternetAddress(props.getProperty("mail.myconf.mailadress")));


        message.setSubject(assunto);

        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setContent(mensagem, "text/html; charset=UTF-8");


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

        if (fanexo != null) {
            MimeBodyPart attachFilePart = new MimeBodyPart();
            FileDataSource fds = new FileDataSource(fanexo);
            attachFilePart.setDataHandler(new DataHandler(fds));
            attachFilePart.setFileName(fds.getName());
            mp.addBodyPart(attachFilePart);
        }
       
        message.setSentDate(dataEnvio);
        message.setContent(mp);
        System.out.println("adress length::::::::"+address.length);
       // message.setRecipients(Message.RecipientType.TO, address);
        message.addRecipients(Message.RecipientType.TO, address);

        if (props.get("mail.myconf.username") != null) {
            transport.connect(props.getProperty("mail.myconf.username"), props.getProperty("mail.myconf.password"));
        } else {
            transport.connect();
        }

        transport.sendMessage(message,
                message.getRecipients(Message.RecipientType.TO));
        transport.close();
    }

    private static class SMTPAuthenticator extends javax.mail.Authenticator {//classe interna para criação do authenticador

        public PasswordAuthentication getPasswordAuthentication() {
            String username = props.getProperty("mail.myconf.mailadress");//pega login e senha do arquivo de config.
            String password = props.getProperty("mail.myconf.password");
            return new PasswordAuthentication(username, password);
        }
    }//fim classe
}
i
/**
 *
 * @author lgweb
 */
public class OrcamentoMailController {

   



         
            String assunto = getParameter("assunto");
            
            StringBuffer msg = new StringBuffer();
            msg.append(getParameter("mensagem"));
          /*  msg.append("&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;Olá " + o.getCliente().getNome() + ",<br>");
            msg.append("segue em anexo o seu orçamento com o numero <br><br>" + o.getId() + "<br><br>");
            msg.append("&lt;/body&gt;&lt;/html&gt;");
           * */
            File arquivo = new File(getRequest().getRealPath("/cadastros") + "/"+ tempName);



            //sem limite de destinatarios
            List&lt;InternetAddress&gt; listAddress = new LinkedList&lt;InternetAddress&gt;();
           
            int j = 0;
            String mails = getParameter("emails");
            StringBuffer s = new StringBuffer(mails);
            StringBuffer copy = new StringBuffer();
            for (int i = 0; i &lt; s.length(); i++) {
                if (s.charAt(i) != ';') {
                    copy.append(s.charAt(i));
                } else {
                    listAddress.add(new InternetAddress(copy.toString()));
                   // address[j] = new InternetAddress(copy.toString());
                    copy.setLength(0);
                    j++;
                }
            }
            listAddress.add(new InternetAddress(o.getCliente().getEmail()));
          //  address[j + 1] = new InternetAddress(o.getCliente().getEmail());
           InternetAddress[] address = new InternetAddress[listAddress.size()];
            for (int i=0;i&lt;listAddress.size();i++) {
                address[i]=listAddress.get(i);
            }
       
            MailUtil.sendMail(address,assunto, msg.toString(), arquivo, new Date());


            return q;
        } catch (Exception e) {
            getListException().add(new FormActionException("Erro ao gerar relatório de Orçamento"));
            e.printStackTrace();

        }
        return null;
    }

   
}

>

R

valeu

Mas tava funcionando, o problema era que estava testando com emails não validos, ex: adsadsadasdas
o norton interpretava isso como tentativa de ataque e parava o restante dos emails, agora está ok

Criado 1 de agosto de 2009
Ultima resposta 1 de ago. de 2009
Respostas 2
Participantes 2