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 :
package teste;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class SimpleSender {
public static void send(String smtpServer, String to, String from, String subject, String body)
{
try
{
Properties props = System.getProperties();
props.put("mail.smtp.host", smtpServer);
Session session = Session.getDefaultInstance(props, null);
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to, false));
msg.setSubject(subject);
msg.setText(body);
msg.setHeader("Luis", "Luis");
msg.setSentDate(new Date());
Transport.send(msg);
System.out.println("Message sent OK.");
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public static void main(String args[]){
try
{
String smtpServer="mail.bpc.ao";
String to="luis@bpc.ao";
String from="luis@bpc.ao";
String subject="Primeiro envio de email";
String body="Esta é uma mensagem de teste.";
send(smtpServer, to, from, subject, body);
}
catch (Exception ex)
{
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)
Estes erros referem as seguintes instruções :
Message msg = new MimeMessage(session);
send(smtpServer, to, from, subject, body);
Por favor algume me de uma mao com esse problema !
[quote=LuisClaudio]
Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource
at teste.SimpleSender.send(SimpleSender.java:24)
at teste.SimpleSender.main(SimpleSender.java:61)
[/quote]
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.
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:
public void EnviaEmailComAnexo(String para, String assunto, String corpo, String arquivo)
throws AddressException, MessagingException, IOException {
Properties props = new Properties();
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
// false
props.put("mail.smtp.auth", "true");
MailAuth auth = new MailAuth('José', 'Moreira');
Session session = Session.getInstance(props, auth);
// Para testes deixe o debug do session ligado ele mostra
// informações interessantes
session.setDebug(true);
// Cria uma nova Mensagem MIME
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress('jose@maria.com.br'));
msg.setRecipients(Message.RecipientType.TO, para);
msg.setSubject(assunto);
msg.setSentDate(new Date());
// Aqui criam-se as partes do MIME (Multipart) Email
// Partes que têm somente texto poderia ser HTML
MimeBodyPart mbpTexto = new MimeBodyPart();
mbpTexto.setText(corpo);
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbpTexto);
if (arquivo != null) {
// Cria a outra parte do MIME para anexar o arquivo
MimeBodyPart mbpAnexo = new MimeBodyPart();
// Indica o nome do arquivo não coloque o caminho
// completo
// Neste exemplo vai ficar o caminho completo para
// facilitar c:\jose\maria.pdf
mbpAnexo.setFileName(arquivo);
mbpAnexo.setDataHandler(carregaArquivo(arquivo));
mp.addBodyPart(mbpAnexo);
}
// Seta o multipart mail dentro do MimeMessage
msg.setContent(mp);
// Envia enfim o email para o bendito destinatário
Transport.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
Segue o código para resolver :
private DataHandler carregaArquivo(String arquivo) throws IOException {
InputStream file = new FileInputStream(arquivo);
return new DataHandler(new ByteArrayDataSource(file, "application/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