Visão geral
1. Padrões relacionados ao email
Os programas de serviço Javamail fornecidos pelos fabricantes podem implementar seletivamente determinados protocolos de email, os protocolos de correio comum incluem:
SMTP (Simple Mail Transfer Protocol) é um protocolo de transferência de correio simples. É um conjunto de regras para transmitir correio do endereço de origem para o endereço de destino. Ele controla o método de trânsito das letras.
Pop3 (Protocolo dos Correios Versão 3): É um protocolo padrão usado para receber e -mails.
IMAP (Internet Mail Access Protocol): isto é, protocolo de acesso à Internet Mail. É um protocolo alternativo para POP3.
Esses três protocolos têm protocolos correspondentes à transmissão criptografada SSL, a saber, SMTPs, POP3s e IMAPS.
MIME (Extensões multiuso da Internet Mail): Ou seja, o padrão de extensão de correio de correio da Internet multiuso. Não é um protocolo de transferência de correio. No entanto, o formato é definido para mensagens, anexos e outros conteúdos transmitidos.
2. Introdução ao Javamail
Javamail é uma API publicada pela Sun para lidar com o email. Não está incluído no Java SE, mas faz parte do Java EE.
Mail.Jar: Este arquivo JAR contém a API Javamail e os provedores de serviços SMTP, IMAP e POP3 fornecidos pelo sol;
Attivation.Jar: Este arquivo JAR contém implementações da API JAF e Sun.
As classes principais usadas nos pacotes Javamail para processamento de e -mails são: propriedades, sessão, mensagem, endereço, autenticador, transporte, loja, etc.
3. Processo de transferência de correio
Conforme mostrado na figura acima, as etapas para o processamento de e -mails são as seguintes:
4. Estrutura de mensagens
Classe Mimemessage: representa o email inteiro.
MimebodyPart Classe: Uma mensagem MIME que representa a mensagem.
MIMEMULTIPART CLASS: representa uma informação MIME combinada composta por várias informações MIME.
5. A classe principal do Javamail
O Javamail fornece uma abstração de alto nível de envio e recebimento de e-mails, formando algumas interfaces e classes importantes, que formam a base do programa. Vamos dar uma olhada nesses objetos mais comuns.
6. Java.util.properties Classe (objeto de propriedade)
A classe java.util.properties representa um conjunto de propriedades.
Cada uma de suas teclas e valores é da string de tipo.
Como o Javamail precisa se comunicar com o servidor de correio, isso exige que o programa forneça muitas informações, como endereço do servidor, porta, nome de usuário, senha, etc. O Javamail encapsula essas informações de atributo através do objeto Propriedades.
Exemplo: por exemplo, o código a seguir encapsula várias informações de atributo:
Propriedades prop = new Properties (); Prop.SetProperty ("Mail.debug", "True"); Prop.SetProperty ("Mail.host", "[email protegido]"); prop.setProperty ("Mail.Transport.Protocol", "Para diferentes protocolos de email, o Javamail estipula que os provedores de serviços devem apoiar uma série de atributos.
A tabela a seguir são alguns atributos comuns (os valores dos atributos são definidos como tipo de string, e a barra de tipo de atributo indica apenas como os atributos são analisados):
7. Javax.mail.session Classe (objeto de sessão)
A sessão representa uma sessão de correio.
As principais funções da sessão incluem dois aspectos:
Receba várias informações de atributo de configuração: informações de atributo definidas através do objeto Propriedades;
Inicialize o ambiente Javamail: Inicialize o ambiente Javamail de acordo com o arquivo de configuração do Javamail para criar instâncias de outras classes importantes através do objeto de sessão.
O Javamail fornece informações básicas de configuração através dos seguintes arquivos no diretório Meta-Inf do pacote JAR para que a sessão possa carregar a classe de implementação do provedor de acordo com este arquivo de configuração:
javamail.default.providers;
javamail.default.address.map.
exemplo:
Propriedades Props = new Properties (); Props.SetProperty ("Mail.Transport.Protocol", "Smtp"); sessão session = session.getInstance (Props);8. Javax.mail.Transport Class (transferência de correio)
Existem apenas duas maneiras de lidar com operações de email: envio ou recebimento.
O Javamail descreve essas duas operações diferentes como transmissão (javax.mail.transport) e armazenamento (javax.mail.store), transmitindo o envio do correio correspondente e armazenando o recebimento do correio correspondente.
getTransport: getTransport () na classe de sessão possui vários métodos sobrecarregados que podem ser usados para criar objetos de transporte.
Connect: Se o comando de autenticação - Mail.smtp.auth estiver definido, ao conectar -se ao servidor usando o método de conexão da classe de transporte, o nome do usuário e a senha devem ser adicionados.
SendMessage: O método SendMessage da classe de transporte é usado para enviar mensagens de email.
Fechar: o método de fechamento da classe de transporte é usado para fechar a conexão com o servidor de email.
9. Javax.mail.store Class (armazenamento de correio)
getstore: getstore () na classe de sessão possui vários métodos sobrecarregados que podem ser usados para criar objetos de armazenamento.
Conecte: Se o comando de autenticação - Mail.smtp.auth estiver definido, ao conectar -se ao servidor usando o método Connect da classe Store, o nome do usuário e a senha devem ser adicionados.
GetFolder: O método GetFolder da classe Store pode obter o objeto de pasta da pasta na caixa de correio.
Fechar: o método de fechamento da classe Store é usado para fechar a conexão com o servidor de email.
10. javax.mail.message (objeto de mensagem)
javax.mail.message é uma classe abstrata que só pode ser instanciada por subclasses e, na maioria dos casos, é javax.mail.internet.mimemessage.
Mimemessage representa uma mensagem de email do tipo MIME.
Para criar uma mensagem, você precisa passar o objeto de sessão para o construtor Mimemessage:
Mensagem Mimemessage = new Mimemessage (sessão);
Nota: Existem outros construtores, como o uso de fluxos de entrada no formato RFC822 para criar mensagens.
setFrom: defina o remetente do email
setrecipient: defina o remetente, a pessoa do CC e a pessoa secreta do e -mail
Os três tipos de endereço predefinidos são:
Message.recipientType.to: destinatário
Message.recipientType.cc: CC Pessoa
Message.recipientType.bcc: secretamente doe
Setsubject: defina o assunto do email
setContent: defina o conteúdo de email
SetText: Se o conteúdo do email for um texto simples, você poderá usar esta interface para definir o conteúdo do texto.
10. javax.mail.address (endereço)
Depois de criar sessão e mensagem e preencher a mensagem, você pode usar o endereço para determinar o endereço de email. Como a mensagem, o endereço também é uma classe abstrata. Você está usando a classe javax.mail.internet.internetaddress.
Se o endereço criado contiver apenas um endereço de email, basta passar o endereço de email para o construtor.
exemplo:
Endereço de endereço = novo InternetAddress ("[email protegido]");
Autenticador: certificado
Como a classe Java.net, a API Javamail também pode utilizar o Authenticator para acessar recursos protegidos por meio de nome de usuário e senha. Para a API Javamail, esses recursos são servidores de correio. O Javamail Authenticator está no pacote javax.mail e é diferente do autenticador de classe com o mesmo nome em java.net. Os dois não compartilham o mesmo autenticador porque a API do Javamail é usada para o Java 1.1 e não possui a categoria Java.net.
Para usar o Authenticator, primeiro crie uma subclasse da classe abstrata e retorne uma instância do PasswordAuthentication do método getPasswordAtHentication (). Após a conclusão da criação, você deve registrar o autenticador na sessão. Então, quando a autenticação for necessária, o autenticador será notificado. Você pode exibir o Windows ou ler nomes de usuário e senhas de um arquivo de configuração (embora não esteja seguro para não criptografar) e devolvê -los ao programa de chamada como objetos de senha de autenticação.
exemplo:
Propriedades props = new Properties (); autenticator auth = new MyAuthenticator (); sessão session = session.getDefaultInstance (Props, auth);
Exemplo
Enviar e -mail
public static void main (string [] args) lança exceção {Propriedades prop = new Properties (); Prop.SetProperty ("Mail.debug", "True"); Prop.SetProperty ("Mail.host", Mail_server_host); Prop.SetProperty ("Mail.Transport.Protocol", "SMTP"); Prop.SetProperty ("Mail.smtp.auth", "true"); // 1. Crie sessão session Session = session.getInstance (prop); Transporte ts = nulo; // 2. Obtenha o objeto de transporte através da sessão ts = session.gettransport (); // 3. Conecte -se ao servidor de email Ts.Connect (Mail_server_host, usuário, senha); // 4. Crie uma mensagem MIMEMESSAGE MENSAGE = NOVA MIMEMESSAGE (SESSÃO); // Mensagem de email message.setFrom (new InternetAddress (Mail_From)); // remetente do message.setRecipient (message.recipientType.to, novo internetDresp (Mail_to)); // o destinatário do email message.setRecipient (message.recipientType.cc, new InternetAddress (Mail_CC)); // o CC message.SetRecipient (message.recipientType.bcc, new InternetAddress (Mail_BCC)); // a mensagem Mensagem do remetente do remetente.SetSubject ("Mail de texto de teste"); // o título do email // a mensagem da mensagem.settext ("incomparável no mundo"); // 5. Envie o correio ts.sendMessage (message, message.getAllRecipients ()); ts.close ();}Envie e-mails formatados por HTML
public static void main (string [] args) lança exceção {Propriedades prop = new Properties (); Prop.SetProperty ("Mail.debug", "True"); Prop.SetProperty ("Mail.host", Mail_server_host); Prop.SetProperty ("Mail.Transport.Protocol", "SMTP"); Prop.SetProperty ("Mail.smtp.auth", "true"); // 1. Crie sessão session Session = session.getInstance (prop); Transporte ts = nulo; // 2. Obtenha o objeto de transporte através da sessão ts = session.gettransport (); // 3. Conecte -se ao servidor de email Ts.Connect (Mail_server_host, usuário, senha); // 4. Crie uma mensagem MIMEMESSAGE MENSAGE = NOVA MIMEMESSAGE (SESSÃO); // Mensagem de email message.setFrom (new InternetAddress (Mail_From)); // remetente do message.setRecipient (message.recipientType.to, novo internetDresp (Mail_to)); // o destinatário do email message.setRecipient (message.recipientType.cc, new InternetAddress (Mail_CC)); // o CC message.SetRecipient (message.recipientType.bcc, new InternetAddress (Mail_BCC)); // o destinatário da mensagem de email.SetSubject ("teste HTML Mail"); // o título da string de email htmlcontent = "<h1> hello </h1>" + "<p> Mostrar a imagem <img src = 'cid: abc.jpg'> 1.jpg </p>"; Texto MimeBodyPart = new MimebodyPart (); text.setContent (htmlContent, "text/html; charset = utf-8"); MimeBodyPart Image = new MimeBodyPart (); Datahandler dh = new Datahandler (new FileDatasource ("d: // [04] temp // img // 1.jpg")); image.setDatahandler (DH); image.setContentId ("abc.jpg"); // Descreva o relacionamento de dados Mimemultipart mm = new Mimemultipart (); mm.addbodypart (texto); mm.addbodypart (imagem); mm.SetSubtype ("Relacionado"); message.setContent (mm); message.SaveChanges (); // 5. Envie o correio ts.sendMessage (message, message.getAllRecipients ()); ts.close ();}Envie e -mails com anexos
public static void main (string [] args) lança exceção {Propriedades prop = new Properties (); Prop.SetProperty ("Mail.debug", "True"); Prop.SetProperty ("Mail.host", Mail_server_host); Prop.SetProperty ("Mail.Transport.Protocol", "SMTP"); Prop.SetProperty ("Mail.smtp.auth", "true"); // 1. Crie sessão session Session = session.getInstance (prop); Transporte ts = nulo; // 2. Obtenha o objeto de transporte através da sessão ts = session.gettransport (); // 3. Conecte -se ao servidor de email Ts.Connect (Mail_server_host, usuário, senha); // 4. Crie uma mensagem MIMEMESSAGE MENSAGE = NOVA MIMEMESSAGE (SESSÃO); // Mensagem de email message.setFrom (new InternetAddress (Mail_From)); // remetente do message.setRecipient (message.recipientType.to, novo internetDresp (Mail_to)); // o destinatário do email message.setRecipient (message.recipientType.cc, new InternetAddress (Mail_CC)); // o CC message.SetRecipient (message.recipientType.bcc, new InternetAddress (Mail_BCC)); // o destinatário da mensagem de email.SetSubject ("teste com e -mail de anexo"); // o título do email MimeBodyPart Text = new MimebodyPart (); text.setContent ("Existem dois anexos no email.", "Texto/html; charset = utf-8"); // Descreva o relacionamento de dados Mimemultipart mm = new Mimemultipart (); mm.SetSubtype ("Relacionado"); mm.addbodypart (texto); String [] arquivos = {"d: // [04] temp // img // 1.jpg", "d: // [04] temp // img // 2.jpg"}; // Adicione um anexo de email para (String FileName: Files) {MimebodyPart AnextPart = new MimeBodyPart (); AnextPart.attachfile (nome do arquivo); mm.addbodyPart (AnextPart); } message.setContent (mm); message.SaveChanges (); // 5. Envie o correio ts.sendMessage (message, message.getAllRecipients ()); ts.close ();}Receba e -mails em sua caixa de correio
classe pública storemail {final estático string user = "robot"; // Nome de usuário final estático String senha = "Password520"; // senha public final Static String Mail_server_host = "Mail. ***. Com"; // Mailbox Server public final static string type_html = "text/html; charset = utf-8"; // Tipo de conteúdo de texto public final estático string Mail_from = "[email protegido]"; // remetente público final estático string Mail_to = "[email protegido]"; // para o destinatário Public Final Static String Mail_CC = "[email protegido]"; // CC Pessoa public final estático String Mail_BCC = "[Email Protected]"; // Enviar secretamente o public static void main (string [] args) lança exceção {// Crie um objeto Propriedades com propriedades de informações de conexão específicas Prop = new Properties (); Prop.SetProperty ("Mail.debug", "True"); Prop.SetProperty ("Mail.store.protocol", "POP3"); Prop.SetProperty ("Mail.pop3.host", Mail_server_host); // 1. Crie sessão session sessão session = session.getInstance (prop); // 2. Obtenha o objeto da loja através da Session Store = session.getStore (); // 3. Conecte -se ao correio do servidor Store.Connect (Mail_server_host, usuário, senha); // 4. Obtenha a pasta de email na pasta Caixa de correio = store.getFolder ("Caixa de entrada"); pasta.open (pasta.read_only); // Obtenha todas as mensagens na pasta Mensagem Objetos Mensagem [] Mensagens = Folder.getMessages (); for (int i = 0; i <mensagens.length; i ++) {string sujeito = messages [i] .getSubject (); String de = (mensagens [i] .getFrom () [0]). ToString (); System.out.println ("th" + (i + 1) + "o assunto da mensagem:" + sujeito); System.out.println ("th" + (i + 1) + "o endereço do remetente do email:" + de); } // 5. Feche a pasta.close (false); store.close (); }}E -mail encaminhado
Exemplo: Obtenha o primeiro email sob a pasta de email especificada e encaminhe -o
public static void main (string [] args) lança exceção {Propriedades prop = new Properties (); Prop.put ("Mail.store.protocol", "POP3"); Prop.put ("Mail.pop3.host", Mail_server_host); Prop.put ("Mail.pop3.Starttls.enable", "True"); prop.put ("Mail.smtp.auth", "true"); Prop.put ("Mail.smtp.host", Mail_server_host); // 1. Crie sessão session Session = session.getDefaultInstance (Prop); // 2. Leia a loja de pastas de e -mail Store = session.getStore ("POP3"); store.Connect (Mail_server_host, usuário, senha); Pasta pasta = store.getFolder ("Caixa de entrada"); pasta.open (pasta.read_only); // Obtenha a primeira mensagem de email na pasta de email message [] Mensagens = pasta.getMessages (); if (mensagens.length <= 0) {return; } Mensagem mensagem = mensagens [0]; // Imprima a string da mensagem da chave de = InternetAddress.toString (message.getFrom ()); if (de! = null) {System.out.println ("de:" + de); } String ResponderTO = InternetAddress.toString (message.getReplyTo ()); if (responda! } String para = internetAddress.toString (message.getRecipients (message.recipientType.to)); if (to! = null) {System.out.println ("para:" + to); } String sujeito = message.getSubject (); if (sujeito! = null) {System.out.println ("sujeito:" + sujeito); } Data enviada = message.getSentDate (); if (enviado! = null) {System.out.println ("enviado:" + enviado); } // Avançar a mensagem do cabeçalho da mensagem de email para a frente = new Mimemessage (sessão); forward.setFrom (new InternetAddress (Mail_From)); forward.setRecipient (message.recipientType.to, new InternetAddress (Mail_to)); forward.SetSubject ("fwd:" + message.getSubject ()); // Avançar o conteúdo do e -mail MimeBodyPart BodyPart = new MimeBodyPart (); BodyPart.SetContent (Mensagem, "Mensagem/RFC822"); Multipart multipart = new Mimemultipart (); multipart.addbodyPart (BodyPart); forward.setContent (multipart); Forward.SaveChanges (); Transporte ts = session.gettransport ("smtp"); ts.connect (usuário, senha); ts.sendMessage (Forward, Forward.getAllRecipients ()); pasta.close (false); store.close (); ts.close (); System.out.println ("Mensagem encaminhada com sucesso ...");}O acima é tudo sobre este artigo. Espero que seja útil que todos aprendam a enviar e receber e -mails da Javamail.