Ansluta till SMTP‑server

Följande egenskaper måste sättas när du ansluter till en SMTP‑server med SSL‑stöd.

I exemplen nedan visar vi hur man:

  1. Ange ett användarnamn.
  2. Ange ett lösenord.
  3. Ange porten.
  4. Ange säkerhetsalternativ.

Följande kodexempel visar hur du ansluter till en SSL‑aktiverad SMTP‑server.

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

Ansluta till server via SOCKS‑proxyserver

Ibland använder vi proxyservrar för att kommunicera med omvärlden. I sådana fall kan e‑postklienter inte kommunicera över Internet utan att ange proxyadressen. Aspose.Email stöder versionerna 4, 4a och 5 av SOCKS‑proxy‑protokollet. Denna artikel ger ett fungerande exempel på att skicka e‑post via en proxy‑mailserver. Så här skickar du e‑post via en proxyserver:

  1. Initiera proxy med den erforderliga informationen, dvs. proxyadress, port och SOCKS‑version.
  2. Initiera SmtpClient med värdadressen, användarnamn och lösenord samt eventuella andra inställningar.
  3. Ställ in klientens Proxy‑egenskap till Proxy objekt skapat tidigare.

Följande kodexempel visar hur du ansluter till en server via en proxyserver.

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

Ansluta till server via HTTP‑proxyserver

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

Anpassa autentiseringsmekanism

Hämta listan över autentiseringsmekanismer som stöds av SMTP‑servern med hjälp av getSupportedAuthentication metod för SmtpClient klass. Denna metod låter klienten avgöra vilka autentiseringsmetoder som är tillgängliga för att upprätta en säker anslutning till servern. Därefter, med hjälp av setAllowedAuthentication metod som hämtar (eller sätter) en uppräkning av de autentiseringstyper som är tillåtna av användaren, välj den mest lämpliga autentiseringsmekanismen för klient‑server‑kommunikationen. Detta låter dig explicit ange autentiseringsmetoden för e‑postklienten.

Följande kodexempel visar hur du anpassar e‑postklientens autentisering:

smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.Login);

Använda CRAM‑MD5‑autentisering för att ansluta till en server

För att säkerställa säker autentisering och kommunikation med SMTP‑servern kan du ange och kräva användning av CRAM‑MD5 som den tillåtna autentiseringsmetoden för SMTP‑klienten. Följande kodexempel visar hur du konfigurerar den tillåtna autentiseringstypen för SmtpClient:

smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.CramMD5);

Binda SMTP‑klient till specifik IP-adress på värden

Möjligheten att en värd har flera portar tillgängliga för att skicka e‑post kan inte uteslutas. I sådana fall kan behovet uppstå att binda e‑postklienten till en specifik port på värden för att skicka e‑post. Detta kan också uppnås med Aspose.Email‑API:n genom att använda SmtpClient bindIPEndPoint egenskap. API:t SmtpClient kan ställas in för att använda en specifik IP-adress på värden genom att ange den specifika IP-endpunkten. Följande kodexempel visar hur du binder SMTP‑klienten till en specifik IP-adress på värden.

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

Validera e‑postserverns autentiseringsuppgifter utan att skicka e‑post

Ibland är det nödvändigt att verifiera autentiseringsuppgifter utan att skicka ett e‑postmeddelande. Aspose.Email tillhandahåller validateCredentials() metod för att utföra denna operation. Om valideringen lyckas körs koden inuti if‑satsen, vilket vanligtvis används för att utföra ytterligare åtgärder eller hämta data från IMAP‑servern. Följande kodexempel demonstrerar validering av autentiseringsuppgifter utan att skicka ett e‑postmeddelande:

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

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

Hur du anger timeout för e‑postoperationer

Varje e‑postoperation tar tid beroende på många faktorer (nätverksfördröjningar, datastorlek, serverprestanda osv.). Du kan sätta en timeout för alla e‑postoperationer. Kodexemplet nedan visar hur du gör det med Timeout egenskap. Obs: du bör inte sätta stora värden för att undvika långa väntetider i din applikation.

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

    // some code...
}