Como faço para enviar um e-mail em Java?

votos
28

Eu preciso enviar e-mails a partir de um servlet em execução dentro de Tomcat. Eu sempre vou enviar para o mesmo destinatário com o mesmo assunto, mas com diferentes conteúdos.

O que é uma maneira simples, fácil de enviar um e-mail em Java?

relacionados:

Como enviar e-mail a partir de um aplicativo Java usando o Gmail?

Publicado 19/05/2009 em 21:50
fonte usuário
Em outras línguas...                            


9 respostas

votos
29

Aqui está o meu código para fazer isso:

import javax.mail.*;
import javax.mail.internet.*;

// Set up the SMTP server.
java.util.Properties props = new java.util.Properties();
props.put("mail.smtp.host", "smtp.myisp.com");
Session session = Session.getDefaultInstance(props, null);

// Construct the message
String to = "you@you.com";
String from = "me@me.com";
String subject = "Hello";
Message msg = new MimeMessage(session);
try {
    msg.setFrom(new InternetAddress(from));
    msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
    msg.setSubject(subject);
    msg.setText("Hi,\n\nHow are you?");

    // Send the message.
    Transport.send(msg);
} catch (MessagingException e) {
    // Error.
}

Você pode obter as bibliotecas JavaMail de Sun aqui: http://java.sun.com/products/javamail/

Respondeu 19/05/2009 em 21:58
fonte usuário

votos
23

JavaMail pode ser um pouco de dor de usar. Se você quiser um mais simples, mais limpa, solução, em seguida, ter um olhar para a capa da Primavera para JavaMail. Os documentos de referência está aqui:

http://static.springframework.org/spring/docs/2.5.x/reference/mail.html

No entanto, isso significa que você precisa Primavera em seu aplicativo, se isso não é uma opção, então você pode olhar para outro invólucro opensource como simples-java-mail:

simplejavamail.org

Alternativamente, você pode usar JavaMail diretamente, mas as duas soluções acima são maneiras mais fáceis e mais limpas para enviar e-mail em Java.

Respondeu 19/05/2009 em 22:02
fonte usuário

votos
18

Outra opção que envolve o API Java Mail é commons-mail do Apache .

De seu Guia do Usuário.

SimpleEmail email = new SimpleEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("Test message");
email.setMsg("This is a simple test of commons-email");
email.send();
Respondeu 19/05/2009 em 22:05
fonte usuário

votos
9

Para followup sobre a resposta do jon, aqui está um exemplo de enviar um e-mail usando simples-java-mail .

A idéia é que você não precisa de saber sobre todas as partes técnicas (aninhados) que compõem um e-mail. Nesse sentido, é muito parecido com commons-mail do Apache, exceto que simples Java Mail é um pouco mais simples do que API de discussão da Apache ao lidar com anexos e imagens embutidas. facilidade de discussão da Primavera funciona tão bem, mas é um pouco estranho em uso (por exemplo, requer uma innerclass anônimo) e é claro que você precisa para uma dependência de Primavera que você recebe muito mais do que apenas uma biblioteca de correspondência simples, uma vez que sua base foi projetado para ser uma solução COI.

Simples Java Correio btw é um invólucro em torno do API JavaMail.

final Email email = new Email();

email.setFromAddress("lollypop", "lolly.pop@somemail.com"); 
email.setSubject("hey");
email.addRecipient("C. Cane", "candycane@candyshop.org", RecipientType.TO);
email.addRecipient("C. Bo", "chocobo@candyshop.org", RecipientType.BCC); 
email.setText("We should meet up! ;)"); 
email.setTextHTML("<img src='cid:wink1'><b>We should meet up!</b><img src='cid:wink2'>");

// embed images and include downloadable attachments 
email.addEmbeddedImage("wink1", imageByteArray, "image/png");
email.addEmbeddedImage("wink2", imageDatesource); 
email.addAttachment("invitation", pdfByteArray, "application/pdf");
email.addAttachment("dresscode", odfDatasource);

new Mailer("smtp.host.com", 25, "username", "password").sendMail(email);
// or alternatively, pass in your own traditional MailSession object.
new Mailer(preconfiguredMailSession).sendMail(email);
Respondeu 20/05/2009 em 08:45
fonte usuário

votos
5

Eu costumo definir a minha sessão javamail na seção GlobalNamingResources de arquivo server.xml do tomcat para que meu código não dependem dos parâmetros de configuração:

<GlobalNamingResources>
    <Resource name="mail/Mail" auth="Container" type="javax.mail.Session"
              mail.smtp.host="localhost"/>
    ...
</GlobalNamingResources>

e eu recebo a sessão via JNDI:

    Context context = new InitialContext();
    Session sess = (Session) context.lookup("java:comp/env/mail/Mail");

    MimeMessage message = new MimeMessage(sess);
    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    message.setSubject(subject, "UTF-8");
    message.setText(content, "UTF-8");
    Transport.send(message);
Respondeu 19/05/2009 em 22:13
fonte usuário

votos
3

JavaMail é ótimo se você pode confiar em um servidor SMTP externo. Se, no entanto, você tem que ter seu próprio servidor SMTP, então dê uma olhada Asprin .

Respondeu 19/05/2009 em 22:09
fonte usuário

votos
1

Adicionar jar java.mail em seu caminho de classe se é projeto não maven adicionar a dependência abaixo em sua pom.xml executar o código

 <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4</version>
    </dependency>

Abaixo está o código testado

import java.util.Date;
    import java.util.Properties;

    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;

    public class MailSendingDemo {
        static Properties properties = new Properties();
        static {
            properties.put("mail.smtp.host", "smtp.gmail.com");
            properties.put("mail.smtp.port", "587");
            properties.put("mail.smtp.auth", "true");
            properties.put("mail.smtp.starttls.enable", "true");
        }
        public static void main(String[] args) {
            String returnStatement = null;
            try {
                Authenticator auth = new Authenticator() {
                    public PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("yourEmailId", "password");
                    }
                };
                Session session = Session.getInstance(properties, auth);
                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress("yourEmailId"));            
                message.setRecipient(Message.RecipientType.TO, new InternetAddress("recepeientMailId"));
                message.setSentDate(new Date());
                message.setSubject("Test Mail");
                message.setText("Hi");
                returnStatement = "The e-mail was sent successfully";
                System.out.println(returnStatement);    
                Transport.send(message);
            } catch (Exception e) {
                returnStatement = "error in sending mail";
                e.printStackTrace();
            }
        }
    }
Respondeu 11/10/2017 em 07:30
fonte usuário

votos
1

usar a biblioteca Java correio

import javax.mail.*

...

Session mSession = Session.getDefaultInstance(new Properties());
Transport mTransport = null;
mTransport = mSession.getTransport("smtp");
mTransport.connect(cServer, cUser, cPass);
MimeMessage mMessage = new MimeMessage(mSession);
mTransport.sendMessage(mMessage,  mMessage.getAllRecipients());
mTransport.close();

Esta é uma versão truncada do código que eu uso para ter uma aplicação enviar e-mails. Obviamente, colocando um corpo e destinatários na mensagem antes de enviá-lo, provavelmente vai servi-lo melhor.

A localização do repositório Maven é artifactId: javax.mail, groupId: mail.

Respondeu 19/05/2009 em 21:57
fonte usuário

votos
-1

Aqui está a solução simples

Baixar esses frascos: 1. JavaMail 2. smtp 3. Java.mail

Copie e cole o código abaixo de [http://javapapers.com/core-java/java-email/][1]

Edite o ToEmail, usuário e senha (Gmail ID de usuário e Pwd)

Respondeu 12/03/2014 em 06:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more