Pergunta

Estou revisando o código que não escrevi que usa o Javamail e tendo um pouco de problemas para entender por que a API do Javamail foi projetada da maneira que é. Tenho a sensação de que, se entendi, poderia estar fazendo um trabalho melhor.

Nós chamamos:

transport = session.getTransport("smtp");
transport.connect(hostName, port, user, password);

Então, por que o eclipse está me avisando que este:

transport.send(message, message.getAllRecipients());

É uma chamada para um método estático?

Por que estou recebendo um objeto de transporte e fornecendo configurações específicas se não posso usar esse objeto para enviar a mensagem? Como a classe de transporte sabe qual servidor e outras configurações a serem usadas para enviar a mensagem? Está funcionando bem, o que é difícil de acreditar. E se eu tivesse instanciado objetos de transporte para dois servidores diferentes; Como saberia qual usar?

Ao escrever esta pergunta, descobri que realmente deveria estar ligando:

transport.sendMessage(message, message.getAllRecipients());

Então, qual é o objetivo do método estático de transporte.send ()? Isso é apenas um design ruim, ou existe uma razão pela qual é assim?

Foi útil?

Solução

Transport.send() é basicamente um método de conveniência. Sim, se você está gerenciando o seu próprio Transport Instância, ligue sendMessage().

Não tenho certeza se considero um design ruim, pois com frequência você não se importa em gerenciar os detalhes do envio e monitoramento do transporte. Crack abrir o send() Método para ver o que faz por você. Outras maneiras de nomear ou colocar esse método podem ser marginalmente melhores.

Outras dicas

O javadoc diz:

Send é um método estático que cria e gerencia sua própria conexão. Qualquer conexão associada a qualquer instância de transporte usada para chamar esse método é ignorada e não usada. Esse método deve ser chamado apenas usando o Formulário Transport.send (MSG);, e nunca deve ser chamado usando uma variável de instância.

E sim provavelmente, o design não é bom

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top