Conectando al servidor SMTP

Las siguientes propiedades deben establecerse al conectar con un servidor SMTP con soporte SSL.

En los ejemplos siguientes mostramos cómo:

  1. Establecer un nombre de usuario.
  2. Establecer una contraseña.
  3. Establecer el puerto.
  4. Establecer opción de seguridad.

El siguiente fragmento de código muestra cómo conectar con un servidor SMTP con 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 al servidor a través de un servidor proxy SOCKS

A veces utilizamos servidores proxy para comunicarnos con el mundo exterior. En tales casos, los clientes de correo no pueden comunicarse a través de Internet sin especificar la dirección del proxy. Aspose.Email ofrece soporte para las versiones 4, 4a y 5 del protocolo proxy SOCKS. Este artículo proporciona un ejemplo funcional de envío de correo electrónico usando un servidor proxy de correo. Para enviar un correo electrónico a través de un servidor proxy:

  1. Inicialice el proxy con la información requerida, es decir, dirección del proxy, puerto y versión de SOCKS.
  2. Inicializar SmtpClient con la dirección del host, nombre de usuario y contraseña, y cualquier otra configuración.
  3. Establezca la propiedad Proxy del cliente a la Proxy objeto creado anteriormente.

El siguiente fragmento de código muestra cómo conectarse a un servidor a través de un 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 al servidor a través de un 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 autenticación

Recuperar la lista de mecanismos de autenticación que soporta el servidor SMTP usando el getSupportedAuthentication método del SmtpClient clase. Este método permite al cliente determinar qué métodos de autenticación están disponibles para establecer una conexión segura con el servidor. Luego, usando el setAllowedAuthentication método que obtiene (o establece) la enumeración de los tipos de autenticación permitidos por el usuario, elija el mecanismo de autenticación más apropiado para la comunicación cliente-servidor. Esto le permite establecer el método de autenticación para el cliente de correo explícitamente.

El siguiente ejemplo de código muestra cómo personalizar la autenticación del cliente de correo electrónico:

smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.Login);

Uso de autenticación CRAM-M5 para conectar a un servidor

Para garantizar una autenticación y comunicación seguras con el servidor SMTP, puede especificar y aplicar el uso de CRAM-MD5 como método de autenticación permitido para el cliente SMTP. El siguiente fragmento de código muestra cómo configurar el tipo de autenticación permitido para el SmtpClient:

smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.CramMD5);

Vincular cliente SMTP a una dirección IP específica en el host

Puede que un host tenga varios puertos disponibles para enviar correos electrónicos. En dichos casos, puede surgir la necesidad de vincular el cliente de envío de correo a un puerto específico del host para enviar correos. Esto también puede lograrse con la API Aspose.Email usando el SmtpClient bindIPEndPoint propiedad. La API SmtpClient puede configurarse para usar una dirección IP específica en el host especificando el punto final de IP específico. El siguiente fragmento de código muestra cómo vincular el cliente SMTP a una dirección IP específica en el 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 credenciales del servidor de correo sin enviar correo electrónico

A veces es necesario verificar credenciales sin enviar un correo electrónico. Aspose.Email proporciona el validateCredentials() método para realizar esta operación. Si la validación es exitosa, se ejecuta el código dentro de la sentencia if, típicamente usado para realizar acciones adicionales o recuperar datos del servidor IMAP. El siguiente fragmento de código demuestra la validación de credenciales sin enviar un correo electrónico:

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

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

Cómo establecer tiempo de espera para operaciones de correo

Cada operación de correo lleva tiempo dependiendo de muchos factores (retardos de red, tamaño de datos, rendimiento del servidor, etc.). Puede establecer un tiempo de espera para todas las operaciones de correo. El ejemplo de código a continuación le muestra cómo hacerlo usando el Tiempo de espera propiedad. Nota: no debe establecer valores grandes para evitar largas esperas en su aplicación.

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

    // some code...
}