Ref.: Dúvida sobre Parâmetros

17 respostas
P

Como faço para passar array nos parâmetros 8 e 9 respectivamente?

Chamada

EnviaEmail ee = new EnviaEmail("",
									   "",
									   "",
									   "Fulano de Tal",
									   "[email removido]",
									   "Beltrano de Tal",
									   "[email removido]",
									   {"[email removido]"},
									   {"[email removido]"},
									   new File("C:\Teste.xls"),
									   "Assunto ...",
									   new StringBuffer("Mensagem ..."));

Classe

public EnviaEmail(final String strNomeServidorSMTP,
					  final String strUsuarioServidorSMTP,
					  final String strSenhaServidorSMTP,
					  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) {
		
		this.Envia();
	}

17 Respostas

gabrielmassote

Tudo bem prsantos?

ve se ajuda:

new String [] {“teste”}

abraco

B
EnviaEmail ee = new EnviaEmail("",
									   "",
									   "",
									   "Fulano de Tal",
									   "[email removido]",
									   "Beltrano de Tal",
									   "[email removido]",
									   new String[] {"[email removido]"},
									   new String[] {"[email removido]"},
									   new File("C:\Teste.xls"),
									   "Assunto ...",
									   new StringBuffer("Mensagem ..."));

Deve funcionar.

gabrielmassote

isso ae…
agora so testar e ve se da certo.

P

Valeu rapaziada!

Muito Obrigado.

P

Voltei!

Como para passar para o construtor de “EnviaEmail”, somente alguns parâmetros?

O que devo passar?

Por ex.: Não desejo passar os 3 primeiros parâmetros.

E como testa-los quando  chegar?
B

Ser for para ter vários construtores desse jeito, recomendo você usar o “Design Pattern Builder”. Procure por ele.

P

Não!

Só tenho um construtor.

gabrielmassote

E ae prsantos?

tipo…mas se voce quiser mandar menos parametros voce vai ter que alterar o construtor, os atributos que o construtor esta decebendo.

ai ao inves de mandar isso tdo de parametros, voce pode criar um array de string e mandar apenas um arrays de strings.

seria mais ou menos isso?

P

Boa moleque!

Posso postar meu código e vc. me ajuda a desenvover ele?

Ainda falta tb. crias as exceptions, tenho dificuldade nisso ainda.

gabrielmassote

posta ae q ajudo sim…sem problema…

EDIT - > mas uma duvida, voce ta fazendo uma classe que envia email pra que servidor? gmail? hotmail?

B

Passe objetos com sentido, aqueles da tua aplicação, não objetos da API do java.

Tente algo como:
public EnviaEmail(final ServidorSMTP servidor, 
					  final Remetente remetente,
					  final Destinatario destinatario,
					  final List<Destinatario> destCC,
					  final List<Destinatario> destBCC,
					  final List<Anexo> anexos,
					  final Assunto assunto,
					  final Mensagem mensagem) {
		
		this.Envia();
	}
Semântica é a parte mais importante de um sistema orientado à objetos. Fica muito mais fácil para montar outros construtores e usar padrões.
P

Estou desenvolvendo (TENTANDO Né!?) uma Classe Genérica

[/code]
/**
*
*/
package principal;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
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;

/**
* @author prsantos
*
*/
public class EnviaEmail {
private String strNomeServidorSMTP;
private String strUsuarioServidorSMTP;
private String strSenhaServidorSMTP;
private String strNomeRemetente;
private String streMailRemetente;
private String strNomeDestinatario;
private String streMailDestinatario;
private String[] streMailDestinatarioCC;
private String[] streMailDestinatarioBCC;
// private ArrayList<File> alAnexos;
private File[] fAnexos;
private String strAssunto;
private StringBuffer sbMensagem;
private boolean bolAvisoRecebimento;

public EnviaEmail(final String strNomeServidorSMTP,
final String strUsuarioServidorSMTP,
final String strSenhaServidorSMTP,
final String strNomeRemetente,
final String streMailRemetente,
final String strNomeDestinatario,
final String streMailDestinatario,
final String[] streMailDestinatarioCC,
final String[] streMailDestinatarioBCC,
// final ArrayList<File> alAnexos,
final File[] fAnexos,
final String strAssunto,
final StringBuffer sbMensagem,
final boolean bolAvisoRecebimento) {

this.strNomeServidorSMTP = strNomeServidorSMTP;
this.strUsuarioServidorSMTP = strUsuarioServidorSMTP;
this.strSenhaServidorSMTP = strSenhaServidorSMTP;
this.strNomeRemetente = strNomeRemetente;
this.streMailRemetente = streMailRemetente;
this.strNomeDestinatario = strNomeDestinatario;
this.streMailDestinatario = streMailDestinatario;
this.streMailDestinatarioCC = streMailDestinatarioCC;
this.streMailDestinatarioBCC = streMailDestinatarioBCC;
// this.alAnexos = alAnexos;
this.fAnexos = fAnexos;
this.strAssunto = strAssunto;
this.sbMensagem = sbMensagem;
this.bolAvisoRecebimento = bolAvisoRecebimento;

this.Envia();
}

private void Envia() {
try {
//Configura algumas propriedades e pega a seção padrão
Properties props = new Properties();
//props.put("mail.debug", "true"); //
//props.put("mail.from", "");
//props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP
//props.put("mail.smtp.starttls.enable","true"); //
//props.put("mail.smtp.auth", "true"); //ativa autenticacao
//props.put("mail.smtp.socketFactory.port", "465"); //mesma porta para o socket
//props.put("mail.smtp.socketFactory.fallback", "false"); //
//props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); //
props.put("mail.smtp.host", "smtp.ipiranga.com.br"); //server SMTP do GMAIL
//props.put("mail.smtp.port", "465"); //porta
//props.put("mail.smtp.user", "[email removido]"); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)

// mail.debug boolean
// mail.from String
// mail.mime.address.strict boolean
// mail.host String
// mail.store.protocol String
// mail.transport.protocol String
// mail.user String
// mail.protocol.class String
// mail.protocol.host String
// mail.protocol.port int
// mail.protocol.user String


Session 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 (streMailDestinatarioCC != null) {
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 (streMailDestinatarioBCC != null) {
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 MultiParte
MimeMultipart mmpMultiParte = new MimeMultipart();

//Cria e preenche a primeira parte da mensagem
MimeBodyPart mbpCorpoMensagem = new MimeBodyPart();

//Mensagem
mbpCorpoMensagem.setText(sbMensagem.toString());

//
mmpMultiParte.addBodyPart(mbpCorpoMensagem);
msg.setContent(mmpMultiParte);

for (int i = 0; i < this.fAnexos.length; i++) {
if (!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 ...");
} catch (Exception mex) {
mex.printStackTrace();
}
}

}
[code]

P

Ela já funciona, porém preciso melhora-la em muitos aspectos.

Inclusive no que se diz respeito a EXCEPTIONS.

Te agradecerei muito se me ajudar a desenvolve-la

Valeu!

peczenyj

Q construtor enorrrrme :slight_smile:

Q tal refatorar para uma Fluent Interface?

new EmailMessage() .from("[email removido]") .to("[email removido]") .withSubject("Fluent Mail API") .withBody("Demo message") .send();

Fonte:
http://gc.blog.br/2008/03/03/um-exemplo-pratico-de-fluent-interface/

Allan_BSO

EU RECOMENDARIA VOCE A CRIAR UMA CLASSE E INTERNAMENTE DESSA CLASSE CRIAR DIVERSOS METODOS COM O MESMO NOME, NO ENTANTO, COM DIFERENTES TIPOS DE PARAMETROS E QTDS DE PARAMETROS.

QUANDO O USUARIO DIGITAR APENAS OS CAMPOS PARA COPIA, POR EXEMPLO.
O JAVA AUTOMATICAMENTE USA O METODO COM OS PARAMETROS OS QUAIS MELHORES SE ENQUADRAM AO METODO…

ESSE PROCEDIMENTOS CHAMA-SE [color=red]SOBRECARGA DE PARAMETROS.[/color]

PROCURA SOBRE ESSE ASSUNDO DE SOBRECARGA DE PARAMETROS QUE EH MUITO INTERESSANTE!!!

gabrielmassote

cara le esse turorial ai que fiz…
tem a classe de enviar tdo certin…e com construtor de boa…

olha ai e me fala…

http://www.guj.com.br/posts/list/87637.java

P

Valeu rapaziada.

Estou indo pra casa agora.

Lá quando chegar, irei examinar tudo isoo.

Muito Obrigado.

Criado 20 de maio de 2008
Ultima resposta 21 de mai. de 2008
Respostas 17
Participantes 5