API Java Mail - Usando o GMailL

no meu debug aparece…

“DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 465, isSSL false”

isSSL não tinha que ser true?

é dizem que sim…

mas aqui ta como false e cabei de testar e enviou…

tenta usar o exemplo de commons do pessoal…eu particularmente acho mais facil…so que na epoca nao tinha conseguido mandar…
assim que sobrar um tempo vou criar outro topico para envio de email pela api commons…

desculpe nao resolver seu problema…

Eu sempre setei o ssl como true para entrar no GMAIL. E geralmente uso outra porta e não a 465. Acho que era a 587. Em um artigo que eu havia lido eles disseram que pode ser uma ou outra…

tranquilo…
o commons tb uso, e está dando o mesmo erro… tenho q ver mesmo

renatocustodio,

como tu setou o ssl?

props.put("mail.smtp.ssl", "true"); 

tentei assim, mas continua false

Achei um link com alguns problemas que poderiam estar causando erro na porta 465.

O mais provavel pelo que li deve ser firewall.

problemas relacionados

entendi… realmente… eu tentei um telnet na porta 465 e não ta dando… vou tentar fora desta rede…

[quote=hopster]renatocustodio,

como tu setou o ssl?[/quote]
No commons algo como: email.setSSL(true);

Onde email é uma varíável do tipo simpleMail, HtmlMail, etc…

ok… deu certo em outra rede… deve ser o firewall da empresa mesmo…

Tudo bem Pessoal?

Como autor do tópico foram feitas duas atualizações:

Abraço a todos e bom proveito.

A porta 465 é somente para o abençoado outlook.
Para utilizar o gmail com outros clientes de email, basta utilizar a porta 587 TSL.

This Works Fine!
.NET Forever!

como é apenas para o outlook se funciona para esta aplicacao e perfeitamente?

abraços

Dá erro:

DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 587, isSSL false

Erro: Envio Mensagem
javax.mail.MessagingException: Unknown SMTP host: smtp.gmail.com;
nested exception is:
java.net.UnknownHostException: smtp.gmail.com
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1389)
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 sendEmail.sendMail(sendEmail.java:96)
at Main.main(Main.java:6)
Caused by: java.net.UnknownHostException: smtp.gmail.com
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source)
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

Já usei a porta 465 tb…

Obs.: Uso o proxy AnalogX.

props.setProperty(“proxySet”,“true”);
props.setProperty(“socksProxyHost”,“192.168.0.101”);
props.setProperty(“socksProxyPort”,“6588”);

É a configuração que uso no IE pra me conectar à internet.

Olá a todos.

Eu encontrei em um fórum sa Sun de como enviar e-mail através do Gmail. Esse código funciona independente se vc está usando proxy ou não.

O link é esse: http://forums.sun.com/thread.jspa?threadID=617974.

Baseado nesse link, eu criei a seguinte classe:

import java.util.Properties;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class GmailMailer {

	// Host do Gmail
	private String SMTP_HOST_NAME;

	// Login do usuário
	private String SMTP_AUTH_USER;

	// Senha do usuário
	private String SMTP_AUTH_PWD;

	// E-mail do remetente
	private String emailFromAddress;

	// Título do e-mail
	private String emailSubjectTxt;

	// Conteúdo do e-mail
	private String emailMsgTxt;

	// E-mails dos destinatários
	private String[] emailList;

	public GmailMailer() {
		SMTP_HOST_NAME = "gmail-smtp.l.google.com";
		SMTP_AUTH_USER = "xxxxx@gmail.com";
		SMTP_AUTH_PWD = "xxxx";
	}

	public void sendEmail(String fromAddress, String[] toAddress, String subjectTxt, String messageTxt) throws Exception{
		emailFromAddress = fromAddress;
		emailList = toAddress;
		emailSubjectTxt = subjectTxt;
		emailMsgTxt = messageTxt;

		boolean debug = false;
		java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

		// Configurando o endereço SMTP do host 
		Properties props = new Properties();
		props.put("mail.transport.protocol", "smtp");
		props.put("mail.smtp.starttls.enable", "true");
		props.put("mail.smtp.host", SMTP_HOST_NAME);
		props.put("mail.smtp.auth", "true");

		// Caso o e-mail precise de autenticação
		Authenticator auth = new SMTPAuthenticator();
		Session session = Session.getDefaultInstance(props, auth);

		session.setDebug(debug);

		// Criando a mensagem
		Message msg = new MimeMessage(session);

		// Adicionando o e-mail do remetente
		InternetAddress addressFrom = new InternetAddress(emailFromAddress);
		msg.setFrom(addressFrom);

		// Adicionando os e-mails dos destinatários
		InternetAddress[] addressTo = new InternetAddress[emailList.length];
		for (int i = 0; i < emailList.length; i++) {
			addressTo[i] = new InternetAddress(emailList[i]);
		}
		msg.setRecipients(Message.RecipientType.TO, addressTo);

		// Adicionando o título do e-mail
		msg.setSubject(emailSubjectTxt);
		
		// Adicionando o conteúdo do e-mail
		msg.setContent(emailMsgTxt, "text/plain");
		Transport.send(msg);
	}

	/**
	 * Autentica o usuário quando o servidor SMTP requisita
	 */
	private class SMTPAuthenticator extends javax.mail.Authenticator {

		public PasswordAuthentication getPasswordAuthentication() {
			String username = SMTP_AUTH_USER;
			String password = SMTP_AUTH_PWD;
			return new PasswordAuthentication(username, password);
		}
	}

}

Para executar ele, eu criei outra classe abaixo:

public class TesteGmailMailer {

	public static void main(String[] args) {
		GmailMailer mail = new GmailMailer();
		String[] listaEmails = {"xxxxx@gmail.com","xxxx@yahoo.com.br"};
		try {
			mail.sendEmail("xxxx@gmail.com",
							listaEmails, 
						   "Teste de envio de email", 
						   "Isso é um teste");
			System.out.println("E-mail enviado com sucesso");
		} catch (Exception e) {
			System.out.println("Não foi possível enviar o e-mail");
			e.printStackTrace();
		}
	}
}

aqui não funcionou com proxy…

Alguem sabe me dizer como eu faço para ocultar o remetente ou colocar um outro endereço? Obrigado!!!

O Gmail, por motivos de segurança, não deixa você alterar o remetente.

olá pessoal
fiz um programa para envio de email
usei os exemplos acima e funcionou 100%
mas agora mudei o servidor, que não é gmail, e dá erro, não envia
o que pode ser ? firewall ? abrir portas do modem ?

erro

javax.mail.MessagingException: Exception reading response;
  nested exception is:
	javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1764)
	at com.sun.mail.smtp.SMT ...........

Tudo bem marcoscorso?

Nao sei ao certo qual 'e o motivo, mas se for o hotmail ele nao utiliza smtp pelo que vi quando fiz este tutorial.
Assim, voce tem que setar as configuracoes do seu email de origem ( servidor ) para que funcione o codigo. Tente tirar SSL.

Foquei no gmail, pois era a dificuldade do pessoal.

Nao sei se estou certo quando a minha resposta, mas espero que ajude a tomar algum rumo.

Abracos,
Gabriel Massote Prado.