Prefácio
Acredito que todos deveriam saber que a API aberta geral nos chama terá um valor de retorno ou código de status para nos dizer se a execução é bem -sucedida ou não. No entanto, o Javamail não fornece esse valor de retorno.
Portanto, ao ligar para o Javamail para enviar e -mails, só podemos usar a exceção de captura para determinar se o email foi enviado com sucesso. Acreditamos que, desde que não haja exceção, o email será enviado com sucesso. Então, vamos analisar por que o Javamail não fornece um valor de retorno e se o status de envio de email bem -sucedido é confiável por meio de exceções.
Javamail Enviando Princípio de Correio
Ao enviar e -mails usando o Javamail, devemos fornecer uma sessão de correio. O processo de criação de uma sessão de correio é o seguinte:
Propriedades Props = new Properties (); // o IP e a porta do servidor que envia o email props.put ("Mail.smtp.host", Mail_smtp_host); ProPs.put ("Mail.smtp.port", Mail_smtp_port); // se a autenticação é necessária props.put ("Mail.smtp.auth", "true"); props.put ("Mail.smtp.socketFactory.class", "javax.net.ssl.sssockfactory"); Sessão session = session.getDefaultInstance (Props, new Authenticator () {Protected PasswordAuthentication getPasswordAtHentication () {// Faça login no nome de usuário e senha do servidor de envio de email retornar nova senha.Analise o código.
Antes de criar a sessão, primeiro criamos uma propriedade. Isso define os seguintes parâmetros: mail.smtp.host , mail.smtp.port , mail.smtp.auth e mail.smtp.socketFactory.class . Ao criar uma sessão, você também deve passar o nome de usuário e a senha para enviar o email.
O código de e -mail de envio é o seguinte:
// 5 etapas para enviar e -mails usando javamail // 1. Criar sessão sessão sessão session = session.getInstance (prop); // Ative o modo de depuração da sessão, para que você possa visualizar o status de execução do email enviado pelo programa session.setDebug (true); // 2. Obtenha o objeto de transporte através do transporte de sessão ts = session.getTransport (); // 3. Use o nome de usuário e a senha do email para conectar -se ao servidor de email. Ao enviar email, o remetente precisa enviar o nome de usuário e a senha do email para o servidor SMTP. O nome de usuário e a senha podem ser verificados antes que o email possa ser enviado ao destinatário normalmente. ts.connect ("smtp.sohu.com", "gacl", "email senha"); // 4. Crie uma mensagem de mensagem Mensagem = CreateSImpleMail (sessão); // 5. Enviar e -mail ts.sendMessage (message, message.getAllRecipients ()); // fechar a conexão ts.close ();Resumo do processo de envio de e -mails tem as seguintes etapas:
1. Crie um objeto de sessão que contenha um link de rede para o servidor de correio
2. Crie um objeto de mensagem que represente o conteúdo do email
3. Crie um objeto de transporte
4. Link para o servidor
5. Envie mensagem
6. Feche o link
Como o transporte é apenas uma classe abstrata, o método ts.sendMessage é na verdade o método sendMessage da classe de implementação SMTPTRANSPORT SMTPTransport .
O método sendMessage do SMTPTransport depende do protocolo SMTP para enviar emails.
Portanto, quando o Javamail usa o serviço SMTP para enviar e -mails, quando você envia o email para o servidor SMTP, você pode obter apenas o status que foi enviado para a fila SMTP, mas você não pode obtê -lo se o servidor de email pode enviá -lo com sucesso. Ou seja, você não pode garantir que o email seja enviado com sucesso. Isso depende da transmissão de conteúdo do protocolo SMTP.
No entanto, se o protocolo SMTP falhar, será relatado um erro. O serviço de transmissão de dados confiável do SMTP fornecido pelo TCP transmite mensagens de email do servidor de email do remetente para o servidor de email do destinatário.
Portanto, podemos pensar que, quando chamamos o Javamail para enviar e -mails, se o programa não relatar um erro, isso significa que o email será enviado com sucesso.
SMTP Mecanismo de trabalho
O SMTP geralmente possui dois modos de trabalho: enviando SMTP e recebendo SMTP.
O método de trabalho específico é: Depois de receber a solicitação de email do usuário, ele determina se o email é um email local. Se for enviado diretamente para o email do usuário, caso contrário, consulte o registro MX do servidor de correio remoto do DNS e estabeleça um canal de transmissão de mão dupla com o SMTP de recebimento remoto. Depois disso, o comando SMTP é enviado pelo SMTP de envio, recebido pelo SMTP de recebimento, e a resposta é transmitida na direção oposta. Depois que o canal de transmissão é estabelecido, o remetente SMTP envia um comando de email para indicar o remetente do correio. Se o destinatário SMTP puder receber o e -mail, a resposta OK será devolvida. O remetente SMTP emite um comando RCPT para confirmar se o email foi recebido. Se o destinatário SMTP o receber, ele retornará uma resposta boa; Se não puder ser recebido, envia uma resposta de rejeição (mas não aborta toda a operação de email) e ambas as partes repetirão isso muitas vezes. Quando o destinatário recebe todos os e -mails, uma sequência especial será recebida. Se o destinatário processar com sucesso os emails, ele retornará uma resposta boa.
Processo de trabalho do SMTP
O Simple Mail Transfer Protocol (SMTP) é um protocolo de transmissão de email baseado em texto usado na Internet para trocar correio entre servidores de email. O SMTP é um serviço no nível do aplicativo que pode ser adaptado a vários sistemas de rede.
Os comandos e respostas do SMTP são todos baseados no texto, com unidades de comportamento de comando, e a nova linha é CR/LF. As informações de resposta geralmente têm apenas uma linha, começando com um código de 3 dígitos, e uma descrição de texto muito curta pode ser anexada posteriormente.
O SMTP precisa passar por três etapas: estabelecendo uma conexão, entregando e -mails e liberando uma conexão. Especificamente:
(1) Estabeleça uma conexão TCP.
(2) O cliente envia um comando HELO para o servidor para identificar a própria identidade do remetente e o cliente envia um comando de email.
(3) O servidor responde com OK, indicando que está pronto para receber.
(4) O cliente envia comando RCPT.
(5) O lado do servidor indica se está disposto a receber e -mails para o destinatário.
(6) Fim da negociação, envie email e use os dados de comando para enviar o conteúdo de entrada.
(7) Termine este envio e saia com o comando Quit.
O servidor SMTP rotula e -mails com base no Mail Exchange (MX) no DNS. Ao enviar e -mails, o servidor de email está localizado de acordo com o sufixo de endereço do destinatário. O SMTP conclui as funções de edição, coleta e leitura de e -mails através do agente do usuário (UA); e transmite os emails para o destino através do agente de transferência de correio (MTA).
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo seja de ajuda para o seu estudo ou trabalho. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar.