Connessione al Server SMTP

Le seguenti proprietà devono essere impostate quando ci si connette a un server SMTP con supporto SSL.

Negli esempi seguenti mostriamo come:

  1. Imposta un nome utente.
  2. Imposta una password.
  3. Imposta la porta.
  4. Imposta l’opzione di sicurezza.

Il seguente snippet di codice mostra come connettersi a un server SMTP abilitato SSL.

// 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);

Connessione al server tramite server proxy SOCKS

A volte usiamo server proxy per comunicare con il mondo esterno. In questi casi, i client di posta non possono comunicare su Internet senza specificare l’indirizzo del proxy. Aspose.Email supporta le versioni 4, 4a e 5 del protocollo proxy SOCKS. Questo articolo fornisce un esempio funzionante di invio email tramite un server di posta proxy. Per inviare un’email tramite un server proxy:

  1. Inizializza il proxy con le informazioni richieste, ovvero indirizzo proxy, porta e versione SOCKS.
  2. Inizializza SmtpClient con l’indirizzo host, nome utente e password, e qualsiasi altra impostazione.
  3. Imposta la proprietà Proxy del client su Proxy oggetto creato in precedenza.

Il seguente snippet di codice mostra come connettersi a un server tramite un server 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)"));

Connessione al server tramite server 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)"));
}

Personalizza il meccanismo di autenticazione

Recupera l’elenco dei meccanismi di autenticazione supportati dal server SMTP utilizzando il getSupportedAuthentication metodo del SmtpClient classe. Questo metodo consente al client di determinare quali metodi di autenticazione sono disponibili per stabilire una connessione sicura con il server. Quindi, usando il setAllowedAuthentication metodo che ottiene (o imposta) l’enumerazione dei tipi di autenticazione consentiti dall’utente, scegliendo il meccanismo di autenticazione più appropriato per la comunicazione client‑server. Questo consente di impostare esplicitamente il metodo di autenticazione per il client di posta.

Il seguente esempio di codice mostra come personalizzare l’autenticazione del client email:

smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.Login);

Utilizzare l’autenticazione CRAM-MD5 per connettersi a un server

Per garantire un’autenticazione e una comunicazione sicure con il server SMTP, è possibile specificare e imporre l’uso di CRAM-MD5 come metodo di autenticazione consentito per il client SMTP. Il seguente snippet di codice mostra come configurare il tipo di autenticazione consentito per il SmtpClient:

smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.CramMD5);

Associa il client SMTP a un indirizzo IP specifico sull’host

La possibilità che un host abbia più porte disponibili per l’invio di email non può essere esclusa. In tali casi, può sorgere la necessità di associare il client di invio email a una porta specifica sull’host per l’invio di email. Questo può essere realizzato anche con l’API Aspose.Email utilizzando il SmtpClient bindIPEndPoint proprietà. L’API SmtpClient può essere impostato per utilizzare un indirizzo IP specifico sull’host specificando il relativo endpoint IP. Il seguente snippet di codice mostra come associare il client SMTP a un indirizzo IP specifico sull’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();
}

Convalida Credenziali del Server Mail senza Inviare Email

A volte è necessario verificare le credenziali senza inviare un’email. Aspose.Email fornisce il validateCredentials() metodo per eseguire questa operazione. Se la validazione ha successo, il codice all’interno dell’if viene eseguito, tipicamente usato per eseguire ulteriori azioni o recuperare dati dal server IMAP. Il seguente snippet di codice dimostra la validazione delle credenziali senza inviare un’email:

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

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

Come Impostare il Timeout per le Operazioni di Posta

Ogni operazione di posta richiede del tempo a seconda di molti fattori (ritardi di rete, dimensione dei dati, performance del server, ecc.). Puoi impostare un timeout per tutte le operazioni di posta. L’esempio di codice qui sotto mostra come farlo usando il Timeout proprietà. Nota: non dovresti impostare valori grandi per evitare lunghe attese nella tua applicazione.

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

    // some code...
}