Conectando ao Servidor SMTP

As propriedades a seguir precisam ser definidas ao conectar a um servidor SMTP com suporte a SSL.

Nos exemplos abaixo mostramos como:

  1. Defina um nome de usuário.
  2. Defina uma senha.
  3. Defina a porta.
  4. Defina a opção de segurança.

O trecho de código a seguir mostra como conectar a um servidor SMTP com SSL habilitado.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java

SmtpClient client = new SmtpClient("smtp.gmail.com");

// Set username, password, port, and security options
client.setUsername("your.email@gmail.com");
client.setPassword("your.password");
client.setPort(587);
client.setSecurityOptions(SecurityOptions.SSLExplicit);

Conectando ao Servidor via Proxy Socks

Às vezes usamos servidores proxy para nos comunicar com o mundo externo. Nesses casos, os clientes de e‑mail não conseguem se comunicar pela Internet sem especificar o endereço do proxy. Aspose.Email oferece suporte às versões 4, 4a e 5 do protocolo proxy SOCKS. Este artigo fornece um exemplo funcional de envio de e‑mail usando um servidor de proxy de e‑mail. Para enviar um e‑mail via servidor proxy:

  1. Inicialize o Proxy com as informações necessárias, ou seja, endereço do proxy, porta e versão SOCKS.
  2. Initialize SmtpClient com o endereço do host, nome de usuário e senha, e quaisquer outras configurações.
  3. Defina a propriedade Proxy do cliente para o Proxy objeto criado anteriormente.

O trecho de código a seguir mostra como conectar a um servidor via servidor proxy.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java

SmtpClient client = new SmtpClient("smtp.domain.com", "username", "password");
client.setSecurityOptions(SecurityOptions.SSLImplicit);
String proxyAddress = "192.168.203.142"; // proxy address
int proxyPort = 1080; // proxy port
SocksProxy proxy = new SocksProxy(proxyAddress, proxyPort, SocksVersion.SocksV5);
client.setProxy(proxy);
client.send(new MailMessage("sender@domain.com", "receiver@domain.com", "Sending Email via proxy",
        "Implement socks proxy protocol for versions 4, 4a, 5 (only Username/Password authentication)"));

Conectando ao Servidor via Servidor Proxy HTTP

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java

HttpProxy proxy = new HttpProxy("18.222.124.59", 8080);
try (SmtpClient client = new SmtpClient("host", 587, "username", "password")) {
    client.setProxy(proxy);
    client.send(new MailMessage("sender@domain.com", "receiver@domain.com", "Sending Email via proxy",
            "Implement socks proxy protocol for versions 4, 4a, 5 (only Username/Password authentication)"));
}

Personalizar Mecanismo de Autenticação

Recupere a lista de mecanismos de autenticação suportados pelo servidor SMTP usando o getSupportedAuthentication método do SmtpClient classe. Esse método permite que o cliente determine quais métodos de autenticação estão disponíveis para estabelecer uma conexão segura com o servidor. Em seguida, usando o setAllowedAuthentication método que obtém (ou define) a enumeração dos tipos de autenticação permitidos pelo usuário, escolha o mecanismo de autenticação mais adequado para a comunicação cliente‑servidor. Isso permite definir explicitamente o método de autenticação para o cliente de e‑mail.

O exemplo de código a seguir mostra como personalizar a autenticação do cliente de e‑mail:

smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.Login);

Usando autenticação CRAM-MD5 para conectar a um servidor

Para garantir autenticação segura e comunicação com o servidor SMTP, você pode especificar e impor o uso de CRAM-MD5 como método de autenticação permitido para o cliente SMTP. O trecho de código a seguir mostra como configurar o tipo de autenticação permitido para o SmtpClient:

smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.CramMD5);

Vincular Cliente SMTP a Endereço IP Específico no Host

A possibilidade de um host ter várias portas disponíveis para o envio de e‑mails não pode ser descartada. Nesses casos, pode surgir a necessidade de vincular o cliente de envio de e‑mail a uma porta específica no host para o envio de e‑mails. Isso também pode ser alcançado com a API Aspose.Email usando o SmtpClient bindIPEndPoint propriedade. A API SmtpClient pode ser configurado para usar um endereço IP específico no host ao especificar o EndPoint de IP específico. O trecho de código a seguir mostra como vincular o cliente SMTP a um Endereço IP específico no Host.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java

SmtpClient client = new SmtpClient("smtp.domain.com", // host
        587, // port
        "username", // username
        "password", // password
        SecurityOptions.Auto // Security Options
);
try {
    client.bindIPEndPoint(new BindIPEndPointHandler() {
        public InetSocketAddress invoke(InetSocketAddress remoteEndPoint) {
            return new InetSocketAddress(0);
        }
    });
    client.noop();
} finally {
    client.dispose();
}

Validar Credenciais do Servidor de E‑mail sem Enviar E‑mail

Às vezes é necessário verificar credenciais sem enviar um e‑mail. Aspose.Email fornece o validateCredentials() método para realizar esta operação. Se a validação for bem‑sucedida, o código dentro da instrução if é executado, tipicamente usado para executar ações adicionais ou recuperar dados do servidor IMAP. O trecho de código a seguir demonstra a validação de credenciais sem enviar um e‑mail:

try (SmtpClient smtpClient = new SmtpClient(
        server.SmtpUrl, server.SmtpPort, "username", "password", SecurityOptions.Auto)) {
    smtpClient.setTimeout(4000);

    if (smtpClient.validateCredentials()) {
        // to do something
    }
}

Como Definir Tempo Limite para Operações de E‑mail

Cada operação de e‑mail leva algum tempo dependendo de diversos fatores (atrasos de rede, tamanho dos dados, desempenho do servidor, etc.). Você pode definir um tempo limite para todas as operações de e‑mail. O exemplo de código abaixo mostra como fazer isso usando o Tempo limite propriedade. Nota: não deve definir valores grandes para evitar longas esperas em sua aplicação.

try (SmtpClient smtpClient = new SmtpClient("host", 587, "username", "password", SecurityOptions.SSLExplicit))
{
    smtpClient.setTimeout(60000); // 60 seconds

    // some code...
}