Enviar e-mail com anexo

1 resposta
Fl_io_Albuquerque

Olá, criei um programa no NetBenas para enviar e-mail com arquivos em anexo.

Está em anexo o projedo, quero compartilhar com todos com a intenção de melhora-lo.
Se alguém tem uma idéia de como listar os anexos selecionados posta aí.

Para quem for executar, basta descompactar e abrir o projeto com o netbeans, depois acessar a clase EnviarEmail.java e configurar as informações do emitente.
configurações: servidor smtp, porta smtp, email do emitente, nome do emitente, nome de usuário e senha.

Características do programa:

  • Uso de expressões regulares para validação de emails
  • Pedido de confirmação para o fim da execução do programa
  • Uso de selecionador de arquivos

qualquer dúvida só postar

1 Resposta

P
/**
 * 
 */
package principal;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import manutencoes.ManutencaoTabela;
import bancodados.BancoDados;
import bancodados.ConexaoPadrao;
import beans.*;

/**
 * @author prsantos
 *
 */
public class Enviar {
	private boolean bolAutenticacaoServidor;
	private String strServidorSMTP;
	private String strPortaServidorSMTP;
	private String strUsuarioSMTP;
	private String strSenhaSMTP;
	private String strNomeRemetente;
	private String streMailRemetente;
	private String strNomeDestinatario;
	private String streMailDestinatario;
	private String[] streMailDestinatarioCC;
	private String[] streMailDestinatarioBCC;
	private File[] fAnexos;
	private String strAssunto;
	private StringBuffer sbMensagem;
	private boolean bolAvisoRecebimento;
	private String strTipoMensagem;

	public Enviar(final boolean bolAutenticacaoServidor,
		          final String strServidorSMTP,
		          final String strPortaServidorSMTP,
				  final String strUsuarioSMTP,
				  final String strSenhaSMTP,
				  final String strNomeRemetente,
				  final String streMailRemetente,
				  final String strNomeDestinatario,
				  final String streMailDestinatario,
				  final String[] streMailDestinatarioCC,
				  final String[] streMailDestinatarioBCC,
				  final File[] fAnexos,
				  final String strAssunto,
				  final StringBuffer sbMensagem,
				  final boolean bolAvisoRecebimento,
				  final String strTipoMensagem) {
	
		boolean deuErro = false;
		String mensagem = "";
		
//		if (strServidorSMTP == null || strServidorSMTP.trim().length() == 0) 
//		{	mensagem = mensagem + "Faltou especificar servidor SMTP" + '\n';
//			deuErro= true;
//		}
//		if (strUsuarioSMTP == null || strUsuarioSMTP.trim().length() == 0) 
//		{	mensagem = mensagem + "Faltou especificar o usuario" + '\n';
//			deuErro= true;
//		}
		
		if(deuErro) {	// Efetuar log
			
		} else {
			this.bolAutenticacaoServidor = bolAutenticacaoServidor;
			this.strServidorSMTP = strServidorSMTP;
			this.strPortaServidorSMTP = strPortaServidorSMTP;
			this.strUsuarioSMTP = strUsuarioSMTP;
			this.strSenhaSMTP = strSenhaSMTP;
			this.strNomeRemetente = strNomeRemetente;
			this.streMailRemetente = streMailRemetente;
			this.strNomeDestinatario = strNomeDestinatario;
			this.streMailDestinatario = streMailDestinatario;
			this.streMailDestinatarioCC = streMailDestinatarioCC;
			this.streMailDestinatarioBCC = streMailDestinatarioBCC;
			this.fAnexos = fAnexos;
			this.strAssunto = strAssunto;
			this.sbMensagem = sbMensagem;
			this.bolAvisoRecebimento = bolAvisoRecebimento;
			this.strTipoMensagem = strTipoMensagem;
			
			this.envia();
		}
	}
	
	private void envia() {
		try {
			//Configura algumas propriedades e pega a seção padrão
			
			Properties props = new Properties();
			props.put("mail.transport.protocol", "smtp");
			props.put("mail.smtp.host", this.strServidorSMTP);
			props.put("mail.smtp.auth", this.bolAutenticacaoServidor);
			props.put("mail.smtp.starttls.enable", true);
			props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
			props.put("mail.smtp.port", this.strPortaServidorSMTP);
			
			Session session;
	        
	        if (this.bolAutenticacaoServidor) {
				session = Session.getDefaultInstance(props,	new Authenticator() {
					public PasswordAuthentication getPasswordAuthentication() { 
					  //Dados de acesso ao email do remetente  
					  return new PasswordAuthentication(strUsuarioSMTP, strSenhaSMTP); 
					}
				});
	        } else {
	        	session = Session.getDefaultInstance(props, null);	
	        };

			session.setDebug(false);
			
			//Cria Mensagem
			MimeMessage msg = new MimeMessage(session);
			
			//Define o endereço do remetente (DE / FROM)
			msg.setFrom(new InternetAddress(this.streMailRemetente, strNomeRemetente));
			
			//Define o endereço do destinatário (PARA / TO)
			msg.setRecipient(Message.RecipientType.TO, new InternetAddress(streMailDestinatario, strNomeDestinatario));
			
			//Define os endereços dos destinatário (Com Cópias / CC)
			if (this.streMailDestinatarioCC.length > 0) {
				InternetAddress[] iaEmailDestinatarioCC = new InternetAddress[streMailDestinatarioCC.length];
				for (int i = 0; i < streMailDestinatarioCC.length; i++) {
					iaEmailDestinatarioCC[i] = new InternetAddress(streMailDestinatarioCC[i]);
				}
				msg.setRecipients(Message.RecipientType.CC, iaEmailDestinatarioCC);
			} else {
				//
			}
			
			//Define os endereços dos destinatário (Com Cópias / BCC)
			if (this.streMailDestinatarioBCC.length > 0) {
				InternetAddress[] iaEmailDestinatarioBCC = new InternetAddress[streMailDestinatarioBCC.length];
				for (int i = 0; i < streMailDestinatarioBCC.length; i++) {
					iaEmailDestinatarioBCC[i] = new InternetAddress(streMailDestinatarioBCC[i]);
				}
				msg.setRecipients(Message.RecipientType.BCC, iaEmailDestinatarioBCC);
			} else {
				//
			}

			//Define o assunto
			msg.setSubject(this.strAssunto);
			
			//Aviso de Recebimento
			if (bolAvisoRecebimento) {
				msg.addHeaderLine("ReturnReceipt");
				msg.setHeader("ReturnReceipt", "1");
				
				msg.addHeaderLine("Disposition-Notification-To");
				msg.setHeader("Disposition-Notification-To", strNomeRemetente);
			}
			
			//Define data
			msg.setSentDate(new Date());
		
			//Cria e preenche a primeira parte da mensagem
			MimeBodyPart mbpCorpoMensagem = new MimeBodyPart();
			
			//Mensagem
			if (this.strTipoMensagem.equals("T")) {			
				//Se for TEXTO
				StringBuffer sbMensagem = new StringBuffer();
				
				sbMensagem.append("Erro enviando e-mail para ");
				sbMensagem.append(streMailDestinatario + " / " + strNomeDestinatario);
				
				mbpCorpoMensagem.setText(sbMensagem.toString());
			} else {
				//Se for HTML
				mbpCorpoMensagem.setContent(readFileAsString("G:\\EmailMargting-PRSantos\\index.html"), "text/html");
			}
			
			//Cria MultiParte
			MimeMultipart mmpMultiParte = new MimeMultipart();
			
			//
			mmpMultiParte.addBodyPart(mbpCorpoMensagem);
			msg.setContent(mmpMultiParte);		
			
			if (this.fAnexos.length > 0) {
				for (int i = 0; i < this.fAnexos.length; i++) {
					if (!this.fAnexos[i].isDirectory()) {
						//Anexa arquivo
						//Cria e preenche a segunda parte da mensagem
						MimeBodyPart mbpAnexos = new MimeBodyPart();
						FileDataSource fdsArquivoAnexo = new FileDataSource(fAnexos[i].toString());
						DataHandler dhArquivoAnexo = new DataHandler(fdsArquivoAnexo);
						mbpAnexos.setDataHandler(dhArquivoAnexo);
						mbpAnexos.setFileName(fdsArquivoAnexo.getName());
						mmpMultiParte.addBodyPart(mbpAnexos);
						msg.setContent(mmpMultiParte);		
					
						//Implementa corpo da mensagem
						MimeBodyPart mbpCorpoMensagem2 = new MimeBodyPart();
						mbpCorpoMensagem2.setText(fdsArquivoAnexo.getName());
						mmpMultiParte.addBodyPart(mbpCorpoMensagem2);
						msg.setContent(mmpMultiParte);		
	
						System.out.println("Local do Arquivo a enviar - " + fdsArquivoAnexo.getFile());
			
						mbpCorpoMensagem2 = null;
						dhArquivoAnexo = null;
						fdsArquivoAnexo = null;
						mbpAnexos = null;
					}
				}
			}		
			
			//Envia mensagem
			Transport.send(msg);

			System.out.println("Email Enviado com sucesso as (" + new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()) + ")");
			
			//Atualiza e-Mail como enviado 
			Emailscasashopping email = new Emailscasashopping();
//			Emailserro email = new Emailserro();
//			Emailsmarketing email = new Emailsmarketing();
//			Emailsmarketing email = new EmailsJoseMariaSalgado();
			email.setemail(streMailDestinatario);
			email.setEnviado(1);
			
			//estabelece conexão
			final Connection cnn;
			cnn = BancoDados.fabricaConexao(new ConexaoPadrao());
			ManutencaoTabela.AtualizaRegistro(email, cnn);
		} catch (Exception mex) {
			mex.printStackTrace();
			
		}
	}

    /** @param filePath the name of the file to open. Not sure if it can accept URLs or just filenames. Path handling could be better, and buffer sizes are hardcoded
	    */ 
	    private static String readFileAsString(String filePath)
	    throws java.io.IOException{
	        StringBuffer fileData = new StringBuffer(1000);
	        BufferedReader reader = new BufferedReader(new FileReader(filePath));
	        char[] buf = new char[1024];
	        int numRead=0;
	        while((numRead=reader.read(buf)) != -1){
	            String readData = String.valueOf(buf, 0, numRead);
	            fileData.append(readData);
	            buf = new char[1024];
	        }
	        
	        reader.close();
	        
	        return fileData.toString();
	    }
}
Criado 29 de junho de 2012
Ultima resposta 2 de jul. de 2012
Respostas 1
Participantes 2