Primeiro faça o download da API JavaMail e verifique se os arquivos jar relevantes estão no seu caminho de classe.
Aqui está um exemplo completo de trabalho usando o GMail.
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Main {
private static String USER_NAME = "*****"; // GMail user name (just the part before "@gmail.com")
private static String PASSWORD = "********"; // GMail password
private static String RECIPIENT = "[email protected]";
public static void main(String[] args) {
String from = USER_NAME;
String pass = PASSWORD;
String[] to = { RECIPIENT }; // list of recipient email addresses
String subject = "Java send mail example";
String body = "Welcome to JavaMail!";
sendFromGMail(from, pass, to, subject, body);
}
private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) {
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
// To get the array of addresses
for( int i = 0; i < to.length; i++ ) {
toAddress[i] = new InternetAddress(to[i]);
}
for( int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch (AddressException ae) {
ae.printStackTrace();
}
catch (MessagingException me) {
me.printStackTrace();
}
}
}
Naturalmente, você desejará fazer mais nos catch
blocos do que imprimir o rastreamento de pilha, como fiz no código de exemplo acima. (Remova os catch
blocos para ver quais chamadas de método da API JavaMail lançam exceções para que você possa ver melhor como tratá-las adequadamente.)
Obrigado a @jodonnel e a todos os outros que responderam. Estou lhe dando uma recompensa porque sua resposta me levou cerca de 95% do caminho para uma resposta completa.
smtp.gmail.com
,. Consulte Configurando outros clientes de email para obter detalhes.javax.mail.AuthenticationFailedException
e tive que ativar explicitamente "aplicativos menos seguros" nas minhas configurações do gmail: google.com/settings/security/lesssecureapps . Uma vez que os "aplicativos menos seguros" foram ativados, o código funcionouAlgo assim (parece que você só precisa alterar o servidor SMTP):
fonte
message.setText("Welcome to JavaMail");
com esta linha:message.setContent("<h1>Hello world</h1>", "text/html");
props.put("mail.smtp.starttls.enable", "true")
Outras pessoas têm boas respostas acima, mas eu gostaria de adicionar uma nota sobre minha experiência aqui. Descobri que, ao usar o Gmail como um servidor SMTP de saída para meu aplicativo da web, o Gmail só permite enviar ~ 10 mensagens antes de responder com uma resposta antispam que eu preciso seguir manualmente para reativar o acesso SMTP. Os emails que eu estava enviando não eram spam, mas eram emails de "bem-vindo" do site quando os usuários se registraram no meu sistema. Então, YMMV, e eu não confiaria no Gmail para um webapp de produção. Se você estiver enviando email em nome de um usuário, como um aplicativo de desktop instalado (onde o usuário insere suas próprias credenciais do Gmail), você pode ficar bem.
Além disso, se você estiver usando o Spring, aqui está uma configuração funcional para usar o Gmail para SMTP de saída:
fonte
Embora essa pergunta esteja encerrada, eu gostaria de postar uma solução de contador, mas agora usando o Simple Java Mail (invólucro smtp de código aberto JavaMail):
fonte
new Mailer(your login / your session, TransportStrategy.SMTP_TLS).sendMail(email);
Meu código completo, como abaixo, está funcionando bem:
fonte
fonte
O mínimo necessário:
fonte
As soluções de código postado podem causar problemas quando você precisar configurar várias sessões SMTP em qualquer lugar da mesma JVM.
O FAQ do JavaMail recomenda o uso de
ao invés de
porque o getDefault usará apenas as propriedades fornecidas na primeira vez que for invocado. Todos os usos posteriores da instância padrão ignoram as alterações de propriedade.
Consulte http://www.oracle.com/technetwork/java/faq-135477.html#getdefaultinstance
fonte
É isso que faço quando quero enviar um email com anexo, funciona bem. :)
fonte
Uma rota fácil seria ter a conta do Gmail configurada / ativada para acesso POP3. Isso permitiria enviar via SMTP normal através dos servidores do Gmail.
Em seguida, basta enviar smtp.gmail.com (na porta 587)
fonte
Oi tente este código ....
fonte
Aqui está uma aula fácil de usar para o envio de e-mails
Gmail
. Você precisa adicionar aJavaMail
biblioteca ao seu caminho de compilação ou apenas usarMaven
.Exemplo de uso:
fonte
Se você deseja usar o Outlook
Javamail API
, usecomo host para obter mais e código de trabalho completo Confira esta resposta .
fonte
Valor adicionado:
Session.getInstance()
recomendado sobreSession.getDefaultInstance()
fonte