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:
Classe | Descrição |
---|---|
javax.mail.Session | A classe principal da API. Um objeto multithread representa o connection factory. |
javax.mail.Message | Uma classe abstrata que modela uma mensagem de e-mail. As subclasses fornecem as implementações reais. |
javax.mail.Address | Uma 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.Authenticator | Uma classe abstrata usada para proteger os recursos de correio no servidor de correio. |
javax.mail.Transport | Uma classe abstrata que modela um mecanismo de transporte de mensagens para enviar uma mensagem de email. |
javax.mail.Store | Uma 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.Folder | Uma classe abstrata que representa uma pasta de mensagens de correio. Ele pode conter subpastas. |
javax.mail.internet.MimeMessage | A 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.InternetAddress | Esta 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étodo Descriçã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.