Boas pessoal, estou tentando cirar um pequeno aplicativo que envia um mail bem simples para uma determinado e-mail.
Ja baixei o Javamail e ja importei todos os jar files que estao na pasta lib para o meu projecto , copiei um codigo de uma pesquisa que fiz no google, mas estou tendo alguns problemas. abaixo segue o exemplo que apanhei no google :
packageteste;importjavax.mail.*;importjavax.mail.internet.*;importjava.util.*;publicclassSimpleSender{publicstaticvoidsend(StringsmtpServer,Stringto,Stringfrom,Stringsubject,Stringbody){try{Propertiesprops=System.getProperties();props.put("mail.smtp.host",smtpServer);Sessionsession=Session.getDefaultInstance(props,null);Messagemsg=newMimeMessage(session);msg.setFrom(newInternetAddress(from));msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to,false));msg.setSubject(subject);msg.setText(body);msg.setHeader("Luis","Luis");msg.setSentDate(newDate());Transport.send(msg);System.out.println("Message sent OK.");}catch(Exceptionex){ex.printStackTrace();}}publicstaticvoidmain(Stringargs[]){try{StringsmtpServer="mail.bpc.ao";Stringto="[email removido]";Stringfrom="[email removido]";Stringsubject="Primeiro envio de email";Stringbody="Esta é uma mensagem de teste.";send(smtpServer,to,from,subject,body);}catch(Exceptionex){System.out.println(" Hello ");}System.exit(0);}}
Eu nunca utilizei este recusro e gostaria de alguem me desse uma ajuda em como mandar um mail simples apartir de uma class.
O meu codigo nao da erro ao compilar, mas quando eu executo ele me da o dois erros :
Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource
at teste.SimpleSender.send(SimpleSender.java:24)
at teste.SimpleSender.main(SimpleSender.java:61)
Tudo indica que o pacote JAF não foi encontrado. Baixe o Java Activation Framework porque o JavaMail precisa dele para descobrir o MIME-Type. No código é preciso fazer o import import javax.activation.*;
No Java 6 o Java Activation Framework já vem junto.
[]s
Luca
G
guerios
Pessoal estava zapeando na net tentando encontrar uma solução para enviar um email com um anexo em PDF, simplesmente isso …
Mas depois de muito procurar não encontrei nada que fosse muito sucinto
e explícito.
Portanto aproveito o momento para deixar minha solução, que foi
baseada em várias outras, para resolver este pequeno problema que acredito que num futuro próximo muitos vão encontrar pois o Mustang está para sair da “Fábrica” e algumas mudanças importantes que estão acontecendo não serão tão simples para developers iniciantes ou aqueles que vem de outras linguagens.
Começando, usaremos o JavaMail 1.4(mail.jar) e o JAF 1.1(activation.jar) disponíveis no site da sun ou direto no Java 6, se for o caso. Nos dois Links que eu encontrei
Explicam um pouco de cada coisa. Mas não servem, em partes, para o
JavaMail 1.4 pois não existe mais a classe demo relacionada como “a
solução” que seria a ByteArrayOutputStream que não está disponível
mais nesses releases.
Bom como a maioria deve saber criar o email não é problema
Apesar de que autenticar quebra o paradigma pois a responsabilidade da
autenticação deve ser delegada a uma classe autenticadora e não a
própria api de email
Para autenticar um SMTP ou POP3 faça uma classe como essa:
Para enviar o email crie uma classe, um método ou um servlet conforme for sua necessidade segue um exemplo:
publicvoidEnviaEmailComAnexo(Stringpara,Stringassunto,Stringcorpo,Stringarquivo)throwsAddressException,MessagingException,IOException{Propertiesprops=newProperties();props.put("mail.smtp.host",smtp.guj.com.br);// Esse cara aqui só é necessário se o servidor SMTP precisar de// autenticação// Se não precisar arranque a linha abaixo ou mude o valor para// falseprops.put("mail.smtp.auth","true");MailAuthauth=newMailAuth('José','Moreira');Sessionsession=Session.getInstance(props,auth);// Para testes deixe o debug do session ligado ele mostra// informações interessantessession.setDebug(true);// Cria uma nova Mensagem MIMEMimeMessagemsg=newMimeMessage(session);msg.setFrom(newInternetAddress('[emailremovido]'));msg.setRecipients(Message.RecipientType.TO,para);msg.setSubject(assunto);msg.setSentDate(newDate());// Aqui criam-se as partes do MIME (Multipart) Email// Partes que têm somente texto poderia ser HTMLMimeBodyPartmbpTexto=newMimeBodyPart();mbpTexto.setText(corpo);Multipartmp=newMimeMultipart();mp.addBodyPart(mbpTexto);if(arquivo!=null){// Cria a outra parte do MIME para anexar o arquivoMimeBodyPartmbpAnexo=newMimeBodyPart();// Indica o nome do arquivo não coloque o caminho// completo// Neste exemplo vai ficar o caminho completo para// facilitar c:\jose\maria.pdfmbpAnexo.setFileName(arquivo);mbpAnexo.setDataHandler(carregaArquivo(arquivo));mp.addBodyPart(mbpAnexo);}// Seta o multipart mail dentro do MimeMessagemsg.setContent(mp);// Envia enfim o email para o bendito destinatárioTransport.send(msg);}
Agora que vem a parte não tão explícita, a questão do uso do JAF com Javamail para encontrar o mime/type do pdf
Criamos um DataHandler da API JAF para ser usado com o setDataHandler da API Javamail tomando como base um InputStream do tipo File FileInputStream o que poderia ser qualquer outro tipo de InputStream, ou seja não precisamos ter o arquivo gravado efetivamente
no disco
Importante resaltar o MIME/Type application/pdf é o mime do PDF
Vários conceitos de java foram utilizados para enviar um email.
Conceitos principalmente J2EE que para muitos não são conhecidos, que é o caso da JavaBeans Activation Framework, tornando a resposta para um simples proplema um pouco demorada.
Bom finalmente fica ai um exemplo bem completo de como enviar email, enviar email com anexo diferente de arquivo texto e enviar um email autenticando em um servidor SMTP.
Pode ser que isso seja assunto para um tutorial mais detalhado, fico a disposição para a confecção do mesmo.
Abraço a todos espero que lhes seja de muita valia