API JavaMail - classes principais

A API JavaMail consiste em algumas interfaces e classes usadas para enviar, ler e excluir mensagens de e-mail. Embora existam muitos pacotes na API JavaMail, vai cobrir os dois principais pacotes que são usados em Java correio API com frequência: javax.mail e javax.mail.internet pacote. Esses pacotes contêm todas as classes principais do JavaMail. Eles são:

ClasseDescrição
javax.mail.SessionA classe principal da API. Um objeto multithread representa o connection factory.
javax.mail.MessageUma classe abstrata que modela uma mensagem de e-mail. As subclasses fornecem as implementações reais.
javax.mail.AddressUma classe abstrata que modela os endereços (de e para os endereços) em uma mensagem. As subclasses fornecem as implementações específicas.
javax.mail.AuthenticatorUma classe abstrata usada para proteger os recursos de correio no servidor de correio.
javax.mail.TransportUma classe abstrata que modela um mecanismo de transporte de mensagens para enviar uma mensagem de email.
javax.mail.StoreUma classe abstrata que modela um armazenamento de mensagens e seu protocolo de acesso, para armazenar e recuperar mensagens. Uma loja é dividida em pastas.
javax.mail.FolderUma classe abstrata que representa uma pasta de mensagens de correio. Ele pode conter subpastas.
javax.mail.internet.MimeMessageA mensagem é uma classe abstrata, portanto, deve funcionar com uma subclasse; na maioria dos casos, você usará um MimeMessage. Um MimeMessage é uma mensagem de e-mail que compreende tipos e cabeçalhos MIME.
javax.mail.internet.InternetAddressEsta classe representa um endereço de e-mail da Internet usando a sintaxe de RFC822. A sintaxe de endereço típica tem o formato usuá[email protected] ou Nome pessoal <usuá[email protected]> .

Vamos estudar cada uma dessas classes em detalhes e, nos capítulos subsequentes, estudaremos exemplos usando cada uma delas.

Aula da Sessão

A classe Session é a classe primária da API JavaMail e não é uma subclasse. O objeto Session atua como o connection factory para a API JavaMail, que lida com a definição da configuração e autenticação.

O objeto de sessão pode ser criado das seguintes maneiras:

  • Procurando o objeto administrado armazenado no serviço JNDI

    InitialContext ctx = new InitialContext();
    Session session = (Session) ctx.lookup("usersMailSession");

    usersMailSession é o objeto de nome JNDI usado como o objeto administrado para o objeto de Sessão. usersMailSession pode ser criado e configurado com os parâmetros necessários como pares nome / valor, incluindo informações como o nome do host do servidor de correio, a conta do usuário que envia o correio e os protocolos suportados pelo objeto Sessão.

  • Outro método de criação do objeto Session é baseado na abordagem programática em que você pode usar um objeto java.util.Properties para substituir algumas das informações padrão, como o nome do servidor de correio, nome de usuário, senha e outras informações que podem ser compartilhado em todo o seu aplicativo.

O construtor da classe Session é privado . Portanto, a classe Session fornece dois métodos (listados abaixo) que obtêm o objeto Session .

  • getDefaultInstance(): Existem dois métodos para obter o objeto de sessão usando o método getDefaultInstance (). Ele retorna a sessão padrão.

    public static Session getDefaultInstance(Properties props)
    public static Session getDefaultInstance(Properties props,Authenticator auth)
  • getInstance(): Existem dois métodos para obter o objeto de sessão usando o método getInstance (). Ele retorna a nova sessão.

    public static Session getInstance(Properties props)
    public static Session getInstance(Properties props,Authenticator auth)

Classe da Mensagem

Com o objeto Session criado, passamos agora à criação de uma mensagem que será enviada. O tipo de mensagem será javax.mail.Message .

  • A mensagem é uma classe abstrata. Portanto, sua classe subclasse javax.mail.internet.MimeMessage é mais usada.

  • Para criar a mensagem, você precisa passar o objeto de sessão no construtor de classe MimeMessage. Por exemplo:

    MimeMessage message=new MimeMessage(session);
  • Uma vez que o objeto de mensagem é criado, precisamos armazenar informações nele. A classe de mensagem implementa a interface javax.mail.Part enquanto javax.mail.internet. MimeMessage implementa javax.mail.internet.MimePart. Você pode usar message.setContent () ou mimeMessage.setText () para armazenar o conteúdo.

  • Métodos comumente usados ​​da classe MimeMessage são

    MétodoDescrição
    public void setFrom (endereço de endereço)usado para definir o campo de cabeçalho from.
    public void addRecipients (tipo Message.RecipientType, endereços String) usado para adicionar o endereço fornecido ao tipo de destinatário.
    public void setSubject (String subject)usado para definir o campo do cabeçalho do assunto.
    public void setText (String textmessage) usado para definir o texto como o conteúdo da mensagem usando texto / tipo MIME simples.

Classe de endereço

Agora que temos os objetos Session e Message (com conteúdo armazenado neles), precisamos endereçar a carta usando o objeto Address .

  • O endereço é uma classe abstrata. Portanto, sua classe de subclasse javax.mail.internet.InternetAddress é mais usada.

  • O endereço pode ser criado apenas passando o endereço de e-mail:

    Address address = new InternetAddress("[email protected]");
  • Outra forma de criar Endereço é passar o nome de um log com o endereço de e-mail:

    Address address = new InternetAddress("[email protected]", Manisha);
  • Você também pode definir os campos Para, De, CC, BCC como abaixo

    • message.setFrom(address)

    • message.addRecipient (tipo, endereço)

    • Três tipos de endereço predefinidos são objetos com um destes valores:

      • Message.RecipientType.TO

      • Message.RecipientType.CC

      • Message.RecipientType.BCC

Classe de Autenticador

A classe Authenticator representa um objeto que sabe como obter autenticação para uma conexão de rede. Normalmente, ele fará isso solicitando informações ao usuário.

  • O Authenticator é uma classe abstrata. Você cria uma subclasse PasswordAuthentication , passando um nome de usuário e senha para seu construtor.

  • Você deve registrar o Autenticador com a Sessão ao criar o objeto de sessão.

A seguir está um exemplo de uso do Autenticador :

Properties props = new Properties();
//Override props with any customized data
PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd")
Session session = Session.getDefaultInstance(props, auth);

Classe de Transporte

A classe de transporte é usada como um mecanismo de transporte de mensagem. Essa classe normalmente usa o protocolo SMTP para enviar uma mensagem.

  • É uma classe abstrata.

  • Você pode usar a versão padrão da classe apenas chamando o método send () estático :

    Transport.send(message);
  • A outra maneira de enviar mensagem é obtendo uma instância específica da sessão para seu protocolo, passar o nome de usuário e a senha (em branco se desnecessário), enviar a mensagem e fechar a conexão:

    message.saveChanges(); // implicit with send()
    //Get transport for session
    Transport transport = session.getTransport("smtp");
    //Connect
    transport.connect(host, username, password);
    //repeat if necessary
    transport.sendMessage(message, message.getAllRecipients());
    //Done, close the connection
    transport.close();

Classe Loja

Uma classe abstrata que modela um armazenamento de mensagens e seu protocolo de acesso, para armazenar e recuperar mensagens. As subclasses fornecem implementações reais. Store estende a classe Service , que fornece muitos métodos comuns para nomear repositórios, conectar-se a repositórios e ouvir eventos de conexão.

Os clientes obtêm acesso a um Armazenamento de Mensagens obtendo um objeto Armazenamento que implementa o protocolo de acesso ao banco de dados. A maioria dos armazenamentos de mensagens exige que o usuário seja autenticado antes de permitir o acesso. O método de conexão executa essa autenticação.

Store store = session.getStore("pop3");
store.connect(host, username, password);

Classe de pasta

Pasta é uma classe abstrata que representa uma pasta para mensagens de correio. As subclasses implementam pastas específicas de protocolo. As pastas podem conter subpastas e também mensagens, fornecendo assim uma estrutura hierárquica.

Depois de se conectar à Loja, você pode obter uma pasta, que deve ser aberta antes que você possa ler as mensagens dela.

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();

O método getFolder (String name) para um objeto Folder retorna a subpasta nomeada. Feche a conexão de armazenamento e pasta quando a leitura de e-mail for concluída.

Podemos ver a relação Store e Folder na imagem abaixo:

Como podemos ver, para cada conta de usuário, o servidor possui um depósito que é o armazenamento das mensagens do usuário. O armazenamento é dividido em pastas e a pasta “caixa de entrada” é a pasta que contém principalmente as mensagens de e-mail. Uma pasta pode conter mensagens e subpastas.