Bom dia pessoal!
Tenho uma rotina em JSF para mandar email, se eu tiver um e-mail para envio, ok… se eu tiver mais de um email para enviar, ocorre erro.
Exemplo: email@email.com.br - Roda legal
email@email.com.br,email1@email.com.br - Erro
ou
email@email.com.br;email1@email.com.br - Erro
private static final String HOSTNAME = "smtp.email.com.br";
private static final String USERNAME = "usuario";
private static final String PASSWORD = "senha";
private static final String EMAILORIGEM = "email@email.com.br";
public static SimpleEmail conectaEmail() throws EmailException {
SimpleEmail email = new SimpleEmail();
email.setHostName(HOSTNAME);
email.setSmtpPort(25);
email.setAuthenticator(new DefaultAuthenticator(USERNAME, PASSWORD));
email.setTLS(true);
email.setFrom(EMAILORIGEM);
return email;
}
public static void enviaEmail(EmailMenssagem mensagem) throws EmailException, SQLException {
SimpleEmail email = new SimpleEmail();
email = conectaEmail();
email.setSubject(mensagem.getTitulo());
email.setMsg(mensagem.getMensagem());
email.addTo(mensagem.getDestino());
String resposta = email.send();
if (mensagem.isExibeMsg()) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "E-mail enviado com sucesso para: " + mensagem.getDestino(), ""));
}
}
Alguem sabe como posso fazer para usar mais de um email junto??
Esse SimpleEmail é o do apache? se for o metodo addTo recebe um array de emails.
Você precisa transformar seu atributo Destino de EmailMenssagem em um array.
Você precisa transformar seu atributo Destino de EmailMenssagem em um array.
Infelizmente so aceita string, tentei criar:
String emails[] = null;
emails[1] = "email1@gmail.com";
emails[2] = "email@yahoo.com.br";
Mas a sintaxe fica com erro!
A menos que eu faça um loop e envie no caso vezes o mesmo email, um para cada destinatario, mas nao gostaria de fazer isso!
Alguma outra sugestão!
Obrigado
Desculpa Romarcio, mas nao entendi, como que eu poderia transformar o meu EmailMessagem em um array?
Na verdade eu vou estar recebendo uma string, separada por alguma coisa, “;” ou “,” por exemplo, e vou rodar uma função split para quebrar e me retornar em linhas.
Gostaria de estar adicionando essas linhas ou um array ou diretamente no addTo, mas da forma que voce me falou nao consegui entender.
Obrigado
Ele lhe disse que esta é a declaração:
public Email addTo(String... emails) throws EmailException;
Ou seja, você poderia simplesmente fazer algo como:
String s = "bla@yahoo.com;ble@gmail.com";
String[] emails = s.split ("[;,]+");
email.addTo(emails);
É porque a declaração “String… x” é equivalente a “String[] x”
Pelo que entendi você tem uma classe tipo essa:
public class EmailMenssagem {
private String titulo;
private String mensagem;
private String destino;
...
}
Então altere o atributo destino para um array:
public class EmailMenssagem {
private String titulo;
private String mensagem;
private String[] destino;
...
}
Quando criar o objeto EnvioMensagem, vai fazer isso:
EmailMenssagem mensagem = new EmailMenssagem();
mensagem.setTitulo("teste");
mensagem.setMensagem("teste...");
String[] to = new String[]{"joa@email.com", "tia@bol.com", "lula@fol.com"}
mensagem.setDestino(to);
Josivan,
Só para completar aqui: nunca mande um email que tenha mais de 4 destinatários simultâneos.
Eu recomendaria mandar cada email com um destinatário só.
Um email com 100 destinatários simultâneos (eu sei que você vai acabar fazendo isso…), além de ser deselegante (e perigoso, no caso de você estar mandando um mesmo email para outros clientes da mesma empresa - porque você está revelando os emails para todos!!!) , costuma ficar preso nos filtros de spam.
É melhor demorar um pouco mais para mandar os emails, que ficar mandando um email com 1000 destinatários e que acabe ficando preso, e que também tenha o problema de você revelar a lista inteira de emails de clientes para todos os clientes …
Não adianta você usar “BCC” em vez de “TO” - um cliente que for um pouco mais esperto vai acabar descobrindo os emails de todos os destinatários com um clique a mais, não é preciso saber escrever programas em Java.
Só mande emails com vários destinatários se for algo assim:
To: Departamento de Cobrança billing@empresa.com
CC: Departamento de Vendas sales@empresa.com; Departamento de Recursos Humanos hr@empresa.com
Ou seja, se for um email do tipo que você realmente precisa mandar com cópia.
Se for uma simples “mala direta”, não faça isso.
Na verdade vou enviar no maximo 3 emails, que sao emails cadastrados em parametros, para informar alguma coisa errada ou exceções, ou seja, nao vai acontecer sempre nem vai ser enviado para
muita gente, pelo contrario, poucas pessoas e poucas vezes!
Mas muito obrigado pelas digas pessoal, realmente foram todas muito uteis. Vou testar os codigo repassados aqui nos posts
Obrigado
Abraços
Então entra no caso “poucos destinatários que devem ser avisados porque o sistema está pegando fogo”.
Ok, pode usar o array de strings, gerado por String.split, conforme mostrei acima.
Bom dia Pessoal,
Estava testando esse codigo, mas infelizmente o addTo so aceita string mesmo, nao consigo fazer com que aceite um array
String s = "bla@yahoo.com;ble@gmail.com";
String[] emails = s.split ("[;,]+");
email.addTo(emails);
A menos que eu faça o codigo dessa forma:
email.addTo(emails[0]);
Mas ai teoricamente teria que fazer um loop!
Obrigado!
Como eu disse lá em cima, se for o SimpleEmail do apache, ele possui uma sobrecarga para array de emails, se nao for precisa saber qual api que vc esta usando.
[quote=josivanl]Bom dia Pessoal,
Estava testando esse codigo, mas infelizmente o addTo so aceita string mesmo, nao consigo fazer com que aceite um array
String s = "bla@yahoo.com;ble@gmail.com";
String[] emails = s.split ("[;,]+");
email.addTo(emails);
A menos que eu faça o codigo dessa forma:
email.addTo(emails[0]);
Mas ai teoricamente teria que fazer um loop!
Obrigado![/quote]
Veja a documentação http://commons.apache.org/proper/commons-email/apidocs/org/apache/commons/mail/Email.html#addTo(java.lang.String…) e perceba que sim, é possível adicionar um array.