Estou tentando enviar um e-mail usando Java:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String [] args) {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Estou recebendo o erro:
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
nested exception is:java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
Este código funcionará para enviar e-mail?
Respostas:
O código a seguir funciona muito bem com o servidor SMTP do Google. Você precisa fornecer seu nome de usuário e senha do Google.
Atualização em 11 de dezembro de 2015
Nome de usuário + senha não é mais uma solução recomendada. Isso é devido ao
O Google lançou a API do Gmail - https://developers.google.com/gmail/api/?hl=en . Devemos usar o método oAuth2, em vez de nome de usuário + senha.
Aqui está o snippet de código para funcionar com a API do Gmail.
GoogleMail.java
Para construir um serviço autorizado do Gmail por meio do oAuth2, aqui está o snippet de código.
Utils.java
Para fornecer uma maneira amigável de autenticação oAuth2, usei o JavaFX para exibir a seguinte caixa de diálogo de entrada
A chave para exibir a caixa de diálogo oAuth2 amigável pode ser encontrada em MyAuthorizationCodeInstalledApp.java e SimpleSwingBrowser.java
fonte
Send
vez de,send
mas é uma classe útil. Alguma ideia sobre as implicações de segurança de armazenar a senha do gmail no código?O código a seguir funcionou para mim.
fonte
Arquivos jar necessários
Clique aqui - Como adicionar jarras externas
fonte
A resposta curta - Não.
A resposta longa - não, já que o código depende da presença de um servidor SMTP em execução na máquina local e ouvindo na porta 25. O servidor SMTP (tecnicamente o MTA ou Agente de transferência de correio) é responsável pela comunicação com o Agente do usuário de correio (MUA, que neste caso é o processo Java) para receber emails de saída.
Agora, os MTAs são normalmente responsáveis por receber e-mails de usuários de um domínio específico. Portanto, para o domínio gmail.com, seriam os servidores de e-mail do Google os responsáveis por autenticar os agentes de usuários de e-mail e, portanto, transferir os e-mails para as caixas de entrada nos servidores do Gmail. Não tenho certeza se o GMail confia em servidores de retransmissão de email abertos, mas certamente não é uma tarefa fácil executar autenticação em nome do Google e, em seguida, retransmitir email para os servidores do GMail.
Se você ler o JavaMail FAQ sobre como usar JavaMail para acessar o GMail , você notará que o nome do host e a porta estão apontando para os servidores do GMail, e certamente não para o localhost. Se você pretende usar sua máquina local, precisará executar a retransmissão ou o encaminhamento.
Provavelmente, você precisará entender o protocolo SMTP em profundidade se pretende chegar a algum lugar quando se trata de SMTP. Você pode começar com o artigo da Wikipedia sobre SMTP , mas qualquer outro progresso na verdade exigirá programação em um servidor SMTP.
fonte
Você precisa de um servidor SMTP para enviar e-mails. Existem servidores que você pode instalar localmente em seu próprio PC, ou você pode usar um dos muitos servidores online. Um dos servidores mais conhecidos é o do Google:
Acabei de testar com êxito as configurações de SMTP permitidas do Google usando o primeiro exemplo do Simple Java Mail :
Observe as várias portas e estratégias de transporte (que tratam de todas as propriedades necessárias para você).
Curiosamente, o Google exige TLS na porta 25 também, embora as instruções do Google indiquem o contrário .
fonte
Já faz um bom tempo que isso foi postado. Mas em 13 de novembro de 2012, posso verificar se a porta 465 ainda funciona.
Consulte a resposta de GaryM neste fórum . Espero que isso ajude mais algumas pessoas.
fonte
O código a seguir funciona muito bem. Experimente isso como um aplicativo java com javamail-1.4.5.jar
fonte
Bem, não, não sem alterar algumas partes, já que você está recebendo um erro. No momento, você está tentando enviar e-mail por meio de um servidor SMTP em execução localhost, mas não está executando nenhum;
ConnectException
.Assumindo que o código está OK (eu realmente não verifiquei), você terá que executar um servidor SMTP local ou usar um (remoto) (do seu ISP).
Com relação ao código, você pode encontrar exemplos no pacote de download do JavaMail conforme mencionado no FAQ :
fonte
Experimente isso. funciona bem para mim. Certifique-se de que antes de enviar o e-mail vc precisa dar acesso ao aplicativo menos seguro em sua conta do gmail. Então vá para o link a seguir e experimente com este código java.
Ative o gmail para um aplicativo menos seguro
Você precisa importar o arquivo javax.mail.jar e o arquivo activation.jar para o seu projeto.
Este é o código completo para enviar e-mail em java
fonte
Aqui está a solução de trabalho mano. É garantido.
[email protected]
Abra este link abaixo:
https://support.google.com/accounts/answer/6010255?hl=en
Aqui está o meu código:
fonte
Coloquei minha classe de trabalho do gmail java no pastebin para sua revisão, preste atenção especial ao método "startSessionWithTLS" e você poderá ajustar o JavaMail para fornecer a mesma funcionalidade. http://pastebin.com/VE8Mqkqp
fonte
Seu código funciona, além de configurar a conexão com o servidor SMTP. Você precisa de um servidor de correio (SMTP) em execução para enviar e-mail para você.
Aqui está seu código modificado. Comentei as partes que não são necessárias e alterei a criação da Sessão para que seja necessário um Autenticador. Agora é só descobrir o SMPT_HOSTNAME, USERNAME e PASSWORD que você deseja usar (seu provedor de Internet normalmente os fornece).
Sempre faço assim (usando um servidor SMTP remoto que conheço) porque rodar um servidor de e-mail local não é tão trivial no Windows (aparentemente é muito fácil no Linux).
fonte
Na verdade, 465 funciona e a exceção que você está recebendo pode ser devido à porta SMTP 25 não aberta. Por padrão, o número da porta é 25. No entanto, você pode configurá-lo usando o agente de e-mail que está disponível como código aberto - Mercury
Para simplificar, apenas use a configuração a seguir e você ficará bem.
Para ainda mais: verifique o exemplo de trabalho completo do zero aqui
fonte
Tive a mesma exceção que você. A razão para isso é não ter um servidor smpt instalado e funcionando em sua máquina (já que seu host é localhost). Se você usa o Windows 7, ele não tem um servidor SMTP. então você terá que baixar, instalar e configurar com domínio e criação de contas. Usei hmailserver como servidor smtp instalado e configurei na minha máquina local. https://www.hmailserver.com/download
fonte
Você pode encontrar uma classe java completa e muito simples para enviar e-mails usando a conta do Google (gmail) aqui,
Envie e-mail usando java e conta do Google
Ele usa as seguintes propriedades
fonte