API Java Mail - Usando o GMailL

Olá, eu não conheço muito bem essas Mail API, alguém sabe o que eu preciso alterar pra enviar o email no formato html?

Valeu,

[]'s

Caso esteja usando proxy tente adicionar ao código:

props.setProperty(“proxySet”,“true”);
props.setProperty(“socksProxyHost”,“192.168.155.1”);
props.setProperty(“socksProxyPort”,“1080”);

Muito bom seu exemplo, no entanto eu esta com problema na execução por causa de proxy.

Isso resolveu meu problema.

Legal claytoncastelli…

vou adicionar na explicacao la em cima logo que tiver um tempo…
sempre que tiver algo novo vamos adicionando…

obrigado e abracos

Eu tb nao conheço muito sobre esse assunto.

Eu mudei um pouco o exemplo do nosso amigo, mais algumas coisa que achei na net, e consegui enviar arquivo para o meu e-mail.

package test.mail;
import java.io.File;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
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;
public class AttachExample {
public static void main (String args[]) throws Exception
{

  Properties props = new Properties(); 
 
  String from = "meuEmail@gmail.com"; 
  String to = "destinatario@bla.com.br";
  String filename = "bla.html";

// Get system properties
final String username = "meuEmail@gmail.com";
final String password = “minhaSenha”;

  props.setProperty("proxySet","true");
  props.setProperty("socksProxyHost","192.168.155.1");
  props.setProperty("socksProxyPort","1080");

 props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP  
  props.put("mail.smtp.starttls.enable","true");   
  props.put("mail.smtp.host", "smtp.gmail.com"); //server SMTP do GMAIL  
  props.put("mail.smtp.auth", "true"); //ativa autenticacao  
  props.put("mail.smtp.user", from); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)  
  props.put("mail.debug", "true");  
  props.put("mail.smtp.port", "465"); //porta  
  props.put("mail.smtp.socketFactory.port", "465"); //mesma porta para o socket  
  props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  
  props.put("mail.smtp.socketFactory.fallback", "false");      


  Session session = Session.getDefaultInstance(props, 
                       new Authenticator(){
                          protected PasswordAuthentication getPasswordAuthentication() {
                             return new PasswordAuthentication(username, password);
                          }});

// Define message
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(“Hello JavaMail Attachment”);
// Create the message part
BodyPart messageBodyPart = new MimeBodyPart();
// Fill the message
messageBodyPart.setText(“Here’s the file”);
// Create a Multipart
Multipart multipart = new MimeMultipart();
// Add part one
multipart.addBodyPart(messageBodyPart);
// // Part two is attachment // // Create second body part
messageBodyPart = new MimeBodyPart();
// Get the attachment
DataSource source = new FileDataSource(new File(“src\file\” + filename));
// Set the data handler to the attachment
messageBodyPart.setDataHandler(new DataHandler(source));
// Set the filename
messageBodyPart.setFileName(filename);
// Add part two
multipart.addBodyPart(messageBodyPart);
// Put parts in message
message.setContent(multipart);
// Send the message
Transport.send(message);
}
}

Uma boa alternatica é o uso da commons mail, do grupo Apache e que internamente usa a API do java mail, mas deixa as coisas ridicularmente mais fáceis.

http://commons.apache.org/email/

Tudo bem renatocustodio?

eu tentei usar a commons mail para enviar para o gmail, nao funfo nao…se alguem conseguir posta ai pq realmente é mto mais facil…

abraco a todos…

vou editar o topico em breve com as opcoes de proxy e arquivo

Eu tinha em casa até um trabalho de faculdade que fiz usando commons mail que enviava um email e com um boleto feito com a jboleto em anexo para um email de uma pessoa qualquer cadastrada no banco. Depois quando eu estiver em casa eu posto o exemplo da classe que utilizei…

Ok…funcionando a gente cria um novo topoico…

pois mta gente quer utilizar e as vezes nao da certo…

SimpleEmail email = new SimpleEmail();
	
	try {
		email.setDebug(true);
		email.setHostName("smtp.gmail.com");
		email.setAuthentication("meuEmail@gmail.com","minhaSenha");			
		email.setSSL(true);
		email.addTo("destinatario@bla.com");
		email.setFrom("meuEmail@gmail.com");
		email.setSubject("Teste");
		email.setMsg("Bla...Bla");
		email.send();

	} catch (EmailException e) {

		System.out.println(e.getMessage());

	}

Isso foi o que eu precisei fazer para usar a API do jakarta commons.
Os jars que eu adicionei ao meu projeto foram:
javaMail: mail.jar
commons-email-1.1: commons-email-1.1.jar

Tudo funcionou.

Depois eu faço um exemplo com arquivo e mando aqui também, fica realmente mais fácil usando o jakarta-commons.


javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
  nested exception is:
	java.net.SocketException: Connection reset by peer: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
	at javax.mail.Service.connect(Service.java:275)
	at javax.mail.Service.connect(Service.java:156)
	at TesteEmail.sendMail(TesteEmail.java:91)
	at TesteEmail.main(TesteEmail.java:123)
Caused by: java.net.SocketException: Connection reset by peer: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:516)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:549)
	at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
	... 5 more

Eu não consegui enviar, conforme o erro acima diz… :cry:

Blz Felipe!!

Primeiro me desculpe pois faltou falar um jar activation.

javaMail: mail.jar (http://java.sun.com/products/javamail/downloads/index.html)
commons-email-1.1: commons-email-1.1.jar (http://commons.apache.org/downloads/download_email.cgi)
activation: activation.jar (http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html)

Esses foram os jars que eu usei para o exemplo.

Tenta fazer um teste usando o seu e-mail do gmail tanto como origem(from) como destino(to) ou seja por exemplo:

felipe@gmail.com

email.setAuthentication("felipe@gmail.com",“sua senha do gmail”);
email.setSSL(true);
email.setFrom("felipe@gmail.com");
email.addTo("felipe@gmail.com");

felipe@gmail.com e apenas um exemplo, tem que ser seu e-mail válido no gmail.

Você também pode mudar a porta usando o método setSmtpPort(aPortNumber):

email.setSmtpPort(aPortNumber);

Qualquer coisa posta seu código ai para eu ver, ou um exemplo que retrate bem a maneira de como você montou.

Falou!!

Estou ‘debaixo’ de um proxy…deve ser isso!

Também estou usando proxy, fiz um teste antes de mandar essa resposta para você, e funcionou da mesma forma.

Caso eu descubra como evitar esse erro posto blz.

BLz pessoal?

to voltando de ferias e ja vou atualizar o topico com as seguintes informacoes:

  • utilizando proxy
  • adicionando arquivo (anexos)

logo em seguida vou fazer outro topico para o envio de emails utilizando a commons e coloco como autores todos os que colaboraram com o exemplo.

Abraco a todos.

[color=blue] Enviando arquivos em formato HTML usando uma URL [/color]

[color=red] Esse exemplo foi tirado da pagina do Apache referente ao Jakarta Commons, apenas alterei para funcionar na minha maquina. [/color]

exemplo original



// Create the email message
		HtmlEmail email = new HtmlEmail();
		
		try {
			
			email.setHostName("smtp.gmail.com");
			
			email.setAuthentication("meuEmail@gmail.com","minhaSenha");
			email.setSSL(true);
			
			email.setFrom("meuEmail@gmail.com");
			email.addTo("destinatario@gmail.com");

			email.setSubject("Test email with inline image");

			// embed the image and get the content id
			URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
			String cid = email.embed(url, "Apache logo");

			// set the html message
			email.setHtmlMsg("<html>The apache logo - <img src=\"cid:" + cid
					+ "\"></html>");

			// set the alternative message
			email.setTextMsg("Your email client does not support HTML messages");

			// send the email
			email.send();

		} catch (EmailException e) {
			
			System.out.println(e.getMessage());
	
		} catch (MalformedURLException e) {
			
			System.out.println(e.getMessage());
			
		}




[color=blue] Enviando arquivos em formato HTML usando um arquivo local[/color]

[color=red] Esse exemplo foi tirado da pagina do Apache referente ao Jakarta Commons, apenas alterei para funcionar na minha maquina. [/color]

exemplo original

// Create the email message
		HtmlEmail email = new HtmlEmail();
		
		try {
			
			email.setHostName("smtp.gmail.com");
			
			email.setAuthentication("meuEmail@gmail.com","minhasenha");
			email.setSSL(true);
			
			email.setFrom("meuEmail@gmail.com");
			email.addTo("destinatario@gmail.com");

			email.setSubject("Teste usando arquivo local");

			// embed the image and get the content id
			
			File file = new File("C:/Documents and Settings/Desktop/images/logo/logo.png");			
			
			String cid = email.embed(file, "Apache logo using local file");

			// set the html message
			email.setHtmlMsg("<html>The apache logo - <img src=\"cid:" + cid + "\"></html>");

			// set the alternative message
			email.setTextMsg("Your email client does not support HTML messages");

			// send the email
			email.send();

		} catch (EmailException e) {
			
			System.out.println(e.getMessage());
	
		}

cara, muito bom teu tutorial.

porém está dando o erro:
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
nested exception is:
java.net.ConnectException: Connection timed out: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
at javax.mail.Service.connect(Service.java:288)
at javax.mail.Service.connect(Service.java:169)
at teste.SendMail.sendMail(SendMail.java:87)
at teste.Main.main(Main.java:20)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)
at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
… 5 more

será que é do proxy? alguém tem alguma idéia?

voce ta colocando sua senha e seu login certo e na parte que tem que colocar?

sim sim

os problemas que eu tive que davam esse erro era quando eu deixava de colocar informacoes sobre login certo e quando minha conexao estava ruim. Entao pode ser proxy, claro que se voce estiver utilizando.

Se estiver utilizando de uma olhada em mensagens anteriores que tem explicando como faz…vou atualizar o exemplo para suportar proxy…

abracao…se der certo comunica a gente…