API JavaMail - Servidores SMTP

SMTP é um acrônimo para Simple Mail Transfer Protocol. É um padrão da Internet para transmissão de correio eletrônico (e-mail) em redes de protocolo da Internet (IP). O SMTP usa a porta TCP 25. As conexões SMTP protegidas por SSL são conhecidas pela abreviatura SMTPS, embora SMTPS não seja um protocolo por si só.

API JavaMail tem pacote com.sun.mail.smtpque atuam como provedor de protocolo SMTP para acessar um servidor SMTP. A tabela a seguir lista as classes incluídas neste pacote:

ClasseDescrição
SMTPMessageEsta classe é uma especialização da classe MimeMessage que permite especificar várias opções e parâmetros de SMTP que serão usados ​​quando esta mensagem for enviada por SMTP.
SMTPSSLTransportEsta classe implementa a classe abstrata Transporte usando SMTP sobre SSL para envio e transporte de mensagens.
SMTPTransportEsta classe implementa a classe abstrata Transport usando SMTP para envio e transporte de mensagens.

A tabela a seguir lista as exceções lançadas:

ExceçãoDescrição
SMTPAddressFailedExceptionEssa exceção é lançada quando a mensagem não pode ser enviada.
SMTPAddressSucceededExceptionEssa exceção é encadeada em uma SendFailedException quando a propriedade mail.smtp.reportsuccess é verdadeira.
SMTPSenderFailedExceptionEssa exceção é lançada quando a mensagem não pode ser enviada.
SMTPSendFailedExceptionEssa exceção é lançada quando a mensagem não pode ser enviada. A exceção inclui o endereço do remetente, que o servidor de e-mail rejeitou.

o com.sun.mail.smtpprovedor usa autenticação SMTP opcionalmente. Para usar a autenticação SMTP, você precisará definir a propriedade mail.smtp.auth ou fornecer ao Transporte SMTP um nome de usuário e uma senha ao se conectar ao servidor SMTP. Você pode fazer isso usando uma das seguintes abordagens:

  • Forneça um objeto Autenticador ao criar sua Sessão de e-mail e forneça as informações de nome de usuário e senha durante o retorno de chamada do Autenticador. A propriedade mail.smtp.user pode ser definida para fornecer um nome de usuário padrão para o retorno de chamada, mas a senha ainda precisará ser fornecida explicitamente. Essa abordagem permite que você use o método de envio de Transporte estático para enviar mensagens. Por exemplo:

  • Transport.send(message);
  • Chame o método de conexão de transporte explicitamente com argumentos de nome de usuário e senha. Por exemplo:

    Transport tr = session.getTransport("smtp");
    tr.connect(smtphost, username, password);
    msg.saveChanges();
    tr.sendMessage(msg, msg.getAllRecipients());
    tr.close();

O provedor de protocolo SMTP suporta as seguintes propriedades, que podem ser definidas no objeto JavaMail Session. As propriedades são sempre definidas como strings. Por exemplo:

props.put("mail.smtp.port", "587");

Aqui o Type coluna descreve como a string é interpretada.

NomeTipoDescrição
mail.smtp.userCordaNome de usuário padrão para SMTP.
mail.smtp.hostCordaO servidor SMTP ao qual se conectar.
mail.smtp.portintA porta do servidor SMTP para conectar, se o método connect () não especificar explicitamente uma. O padrão é 25.
mail.smtp.connectiontimeoutintValor de tempo limite de conexão do soquete em milissegundos. O padrão é tempo limite infinito.
mail.smtp.timeoutintValor de tempo limite de E / S do soquete em milissegundos. O padrão é tempo limite infinito.
mail.smtp.fromCordaEndereço de e-mail a ser usado para o comando SMTP MAIL. Isso define o endereço de retorno do envelope. O padrão é msg.getFrom () ou InternetAddress.getLocalAddress ().
mail.smtp.localhostCordaNome do host local usado no comando SMTP HELO ou EHLO. O padrão é InetAddress.getLocalHost (). GetHostName (). Normalmente, não deve ser necessário definir se o JDK e o serviço de nomes estiverem configurados corretamente.
mail.smtp.localaddressCordaEndereço local (nome do host) para vincular ao criar o soquete SMTP. O padrão é o endereço escolhido pela classe Socket. Normalmente não deve ser necessário definir.
mail.smtp.localportintNúmero da porta local para vincular ao criar o soquete SMTP. O padrão é o número da porta escolhido pela classe Socket.
mail.smtp.ehloboleanoSe for falso, não tente fazer logon com o comando EHLO. O padrão é verdadeiro.
mail.smtp.authboleanoSe verdadeiro, tente autenticar o usuário usando o comando AUTH. O padrão é falso.
mail.smtp.auth.mechanisms CordaSe definido, lista os mecanismos de autenticação a serem considerados. Apenas mecanismos suportados pelo servidor e suportados pela implementação atual serão usados. O padrão é "LOGIN PLAIN DIGEST-MD5 NTLM", que inclui todos os mecanismos de autenticação suportados pela implementação atual.
mail.smtp.auth.login.disable boleanoSe verdadeiro, evita o uso do comando AUTH LOGIN. O padrão é falso.
mail.smtp.auth.plain.disableboleanoSe verdadeiro, evita o uso do comando AUTH PLAIN. O padrão é falso.
mail.smtp.auth.digest-md5.disableboleanoSe verdadeiro, evita o uso do comando AUTH DIGEST-MD5. O padrão é falso.
mail.smtp.auth.ntlm.disableboleanoSe verdadeiro, evita o uso do comando AUTH NTLM. O padrão é falso.
mail.smtp.auth.ntlm.domainCordaO domínio de autenticação NTLM.
mail.smtp.auth.ntlm.flagsintSinalizadores específicos do protocolo NTLM.
mail.smtp.submitter CordaO remetente a ser usado na tag AUTH no comando MAIL FROM. Normalmente usado por uma retransmissão de e-mail para passar informações sobre o remetente original da mensagem.
mail.smtp.dsn.notify CordaA opção NOTIFY para o comando RCPT. NEVER ou alguma combinação de SUCCESS, FAILURE e DELAY (separados por vírgulas).
mail.smtp.dsn.retCordaA opção RET para o comando MAIL. FULL ou HDRS.
mail.smtp.sendpartialboleanoSe definido como verdadeiro, e uma mensagem tiver alguns endereços válidos e alguns inválidos, envie a mensagem de qualquer maneira, relatando a falha parcial com SendFailedException. Se definido como falso (o padrão), a mensagem não será enviada a nenhum dos destinatários se houver um endereço de destinatário inválido.
mail.smtp.sasl.enableboleanoSe definido como verdadeiro, tente usar o pacote javax.security.sasl para escolher um mecanismo de autenticação para login. O padrão é falso.
mail.smtp.sasl.mechanismsCordaUma lista separada por espaço ou vírgula de nomes de mecanismo SASL para tentar usar.
mail.smtp.sasl.authorizationid CordaO ID de autorização a ser usado na autenticação SASL. Se não for definido, o ID de autenticação (nome do usuário) será usado.
mail.smtp.sasl.realmCordaO domínio a ser usado com a autenticação DIGEST-MD5.
mail.smtp.quitwait boleanoSe definido como falso, o comando QUIT é enviado e a conexão é encerrada imediatamente. Se definido como verdadeiro (o padrão), faz com que o transporte aguarde a resposta ao comando QUIT.
mail.smtp.reportsuccess boleanoSe definido como verdadeiro, faz com que o transporte inclua um SMTPAddressSucceededException para cada endereço bem-sucedido.
mail.smtp.socketFactory Fábrica de SoquetesSe definida como uma classe que implementa a interface javax.net.SocketFactory, esta classe será usada para criar sockets SMTP.
mail.smtp.socketFactory.classCordaSe definido, especifica o nome de uma classe que implementa a interface javax.net.SocketFactory. Esta classe será usada para criar sockets SMTP.
mail.smtp.socketFactory.fallbackboleanoSe definido como verdadeiro, a falha em criar um soquete usando a classe de fábrica de soquete especificada fará com que o soquete seja criado usando a classe java.net.Socket. O padrão é verdadeiro.
mail.smtp.socketFactory.port intEspecifica a porta para conectar ao usar a fábrica de soquetes especificada. Se não for definida, a porta padrão será usada.
mail.smtp.ssl.enableboleanoSe definido como verdadeiro, use SSL para conectar e usar a porta SSL por padrão. O padrão é falso para o protocolo "smtp" e verdadeiro para o protocolo "smtps".
mail.smtp.ssl.checkserveridentityboleanoSe definido como verdadeiro, verifica a identidade do servidor conforme especificado pelo RFC 2595. O padrão é falso.
mail.smtp.ssl.trust CordaSe definido, e um socket factory não foi especificado, habilita o uso de MailSSLSocketFactory.
Se definido como "*", todos os hosts são confiáveis.
Se definido como uma lista de hosts separados por espaços em branco, esses hosts são confiáveis.
Caso contrário, a confiança depende do certificado que o servidor apresenta.
mail.smtp.ssl.socketFactory SSL Socket FactorySe definida como uma classe que estende a classe javax.net.ssl.SSLSocketFactory, esta classe será usada para criar sockets SSL SMTP.
mail.smtp.ssl.socketFactory.classCordaSe definido, especifica o nome de uma classe que estende a classe javax.net.ssl.SSLSocketFactory. Esta classe será usada para criar sockets SSL SMTP.
mail.smtp.ssl.socketFactory.portintEspecifica a porta para conectar ao usar a fábrica de soquetes especificada. Se não for definida, a porta padrão será usada.
mail.smtp.ssl.protocols cordaEspecifica os protocolos SSL que serão ativados para conexões SSL. O valor da propriedade é uma lista separada por espaços em branco de tokens aceitáveis ​​para o método javax.net.ssl.SSLSocket.setEnabledProtocols.
mail.smtp.starttls.enable boleanoSe verdadeiro, habilita o uso do comando STARTTLS (se suportado pelo servidor) para mudar a conexão para uma conexão protegida por TLS antes de emitir qualquer comando de login. O padrão é falso.
mail.smtp.starttls.requiredboleanoSe verdadeiro, requer o uso do comando STARTTLS. Se o servidor não suportar o comando STARTTLS ou se o comando falhar, o método de conexão falhará. O padrão é falso.
mail.smtp.socks.hostcordaEspecifica o nome do host de um servidor proxy SOCKS5 que será usado para conexões com o servidor de e-mail.
mail.smtp.socks.port cordaEspecifica o número da porta para o servidor proxy SOCKS5. Deve ser usado apenas se o servidor proxy não estiver usando o número de porta padrão 1080.
mail.smtp.mailextensionCordaCadeia de extensão para anexar ao comando MAIL.
mail.smtp.usersetboleanoSe definido como verdadeiro, use o comando RSET em vez do comando NOOP no método isConnected. Em alguns casos, o sendmail responderá lentamente após muitos comandos NOOP; o uso de RSET evita esse problema de sendmail. O padrão é falso.

Em geral, os aplicativos não precisam usar as classes deste pacote diretamente. Em vez disso, eles devem usar as APIs definidas pelo pacote javax.mail (e subpacotes). Digamos, por exemplo, que os aplicativos nunca devem construir instâncias de SMTPTransport diretamente. Em vez disso, eles devem usar o método getTransport da sessão para adquirir um objeto de transporte apropriado.

Exemplos de uso do servidor SMPT são demonstrados no capítulo Enviando e-mails .