Olá bom dia prsantos tudo tranquilo.
Cara eu apanhei muito para faze essas implementações de envio de email, segue um exemplo que funciona no : hotmail, gmail,yahoo, e outros mais.
[code] //Método adicionado o parâmetro que indica se o envio do email será texto simples (true) ou texto Html (false)
public static void enviar(String mensagem, String assunto, ArrayList<String> emailDestinatario, ArrayList<File> anexos, boolean emailPadrao) throws ValidacaoException, AmbienteException
{
if (mensagem == null || mensagem.trim().equals(""))
{
new ValidacaoException("A Mensagem (texto) do email não foi informada");
}
if (assunto == null || assunto.trim().equals(""))
{
new ValidacaoException("O Assunto do email não foi informado");
}
if (emailDestinatario == null || emailDestinatario.size() == 0)
{
new ValidacaoException("O(s) E-mail(s) do(s) destinatário(s) deve(m) ser informado(s)");
}
if (config == null || !config.containsKey("PROVEDOR") || config.getString("PROVEDOR") == null || config.getString("PROVEDOR").trim().equals(""))
throw new AmbienteException("Configurações do servidor SMTP para envio de e-mail (email.properties) não definidas.");
boolean autenticacao = config.getBoolean("AUTENTICACAO");
boolean autTls = config.getBoolean("TLS");
boolean debug = config.getBoolean("DEBUG");
//smtp do provedor de email
Properties props = new Properties();
props.put("mail.smtp.host", config.getString("PROVEDOR").trim());
props.put("mail.smtp.port", config.getString("PORTA").trim());
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", String.valueOf(autenticacao));
//Usuario para conexão ao servidor SMTP
if (config.containsKey("USUARIO"))
USUARIO = config.getString("USUARIO").trim();
else
USUARIO = config.getString("EMAIL_REMETENTE").trim();
props.put("mail.user", USUARIO);
props.put("mail.pwd", config.getString("SENHA").trim());
props.put("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.ssl", "true");
props.put("mail.smtp.ehlo", "true");
if (autTls)
{
props.put("mail.smtp.socketFactory.port", config.getString("PORTA").trim());
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.ssl", "true");
}
Session session;
try
{
if (autenticacao)
{
Authenticator aut = new Authenticator()
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(USUARIO, config.getString("SENHA").trim());
}
};
session = Session.getDefaultInstance(props, aut);
}
else
{
session = Session.getDefaultInstance(props);
}
session.setDebug(debug);
MimeMessage msg = new MimeMessage(session);
//email do REMETENTE.
InternetAddress address = new InternetAddress(config.getString("EMAIL_REMETENTE").trim());
msg.setFrom(address);
//email do DESTINATARIO
InternetAddress[] addressTo = new InternetAddress[emailDestinatario.size()];
for (int i = 0; i < emailDestinatario.size(); i++)
addressTo[i] = new InternetAddress(emailDestinatario.get(i));
msg.setRecipients(Message.RecipientType.TO, addressTo);
msg.setSubject(assunto, "UTF-8");
msg.setSentDate(new Date());
List<String> listaImagens = new ArrayList<String>();
//Monta o tipo do email de acordo com o tipo do conteúdo. Texto simples ou HTML (related)
Multipart mp = null;
if (emailPadrao)
mp = new MimeMultipart();
else
{
mp = new MimeMultipart("related");
//Se for HTML, busca as ocorrências da TAG <img> com os nomes da imagens.
String link = null;
String resultImg;
String resultSrc;
Pattern regex = Pattern.compile("<img([^>]|[\\r\\n])*>");
Pattern regex2 = Pattern.compile("src=\"([^\"]|[\\r\\n])*\"");
Matcher msgImg = regex.matcher(mensagem);
Matcher msgSrc;
int numrImg = 1;
//Busca todos os <img....>
while (msgImg.find()) {
resultImg = msgImg.group();
msgSrc = regex2.matcher(resultImg);
//dentro de <img...> busca a parte do src=....
if (msgSrc.find())
{
resultSrc = msgSrc.group();
link = msgSrc.group().replaceFirst("src=\"", "").replaceFirst("\"", "");
//Troca no nome da imagem do HTML pelo padrão cid:imagemX
mensagem = mensagem.replaceFirst(link,"cid:imagem"+numrImg);
//Adiciona o nome das imagens numa lista
listaImagens.add(link);
numrImg++;
}
}
}
BodyPart bpText = new MimeBodyPart();
bpText.setText(mensagem);
bpText.setHeader("Content-Language", "pt-BR");
//Monta o cabeçalho do email de acordo com o tipo de conteúdo
if (emailPadrao)
bpText.setHeader("Content-Type", "text/plain; charset=ISO-8859-1");
else
bpText.setHeader("Content-Type", "text/html; charset=ISO-8859-1");
bpText.setHeader("Content-Transfer-Encoding", "8bit");
mp.addBodyPart(bpText);
//se for email HTML, adicionará as imagens
if (!emailPadrao)
{
int numrImg = 1;
BodyPart imagemHtml = null;
DataSource imgFds = null;
for (String img : listaImagens) {
//Busca as imagens a partir da pasta "imagens"
String imagemAtual = DomnDiretorios.DIRETORIO_RAIZ + "\\imagens\\" + img;
File arqImg = new File(imagemAtual);
if (arqImg.exists())
{
//se o arquivo for encontrado, vincular ele ao nome do padrão cid:imagemX
imagemHtml = new MimeBodyPart();
imgFds = new FileDataSource(imagemAtual);
imagemHtml.setDataHandler( new DataHandler(imgFds) );
imagemHtml.setHeader("Content-ID", "<imagem" + numrImg + ">");
mp.addBodyPart(imagemHtml);
}
else
//Se o arquivo não existe, gerar log informando, mas sem interromper o envio
{
log.error("Arquivo de Imagem: " + imagemAtual + " não encontrado." );
}
numrImg++;
}
}
if (anexos != null && anexos.size() > 0)
{
for (int j = 0; j < anexos.size(); j++)
{
BodyPart bp = new MimeBodyPart();
FileDataSource fds = new FileDataSource(anexos.get(j));
bp.setDataHandler(new DataHandler(fds));
bp.setFileName(anexos.get(j).getName());
mp.addBodyPart(bp);
}
}
msg.setContent(mp);
msg.setHeader("Content-Language", "pt-BR");
msg.setHeader("Content-Transfer-Encoding", "8bit");
Transport transp = session.getTransport();
transp.connect();
transp.sendMessage(msg, msg.getAllRecipients());
transp.close();
// Transport.send(msg);
}
catch (AddressException e)
{
new ValidacaoException("Erro: Endereço de e-mail inválido. Detalhes do erro: " + e.getMessage(), e);
}
catch (MessagingException e)
{
new AmbienteException("Erro: Falha ao enviar e-mail. Detalhes do erro: " + e.getMessage(), e);
}
}[/code]