Ansluta till IMAP‑server

Den ImapClient klassen låter applikationer hantera IMAP‑brevlådor med IMAP‑protokollet. ImapClient klassen används för att ansluta till IMAP‑mailservrar och hantera e‑post i IMAP‑mailmappar. För att ansluta till en IMAP‑server

  1. Skapa en instans av ImapClient klass.
  2. Ange värdnamn, användarnamn och lösenord i ImapClient‑konstruktor.

När ImapClient instansen initieras, nästa anrop till någon operation med denna instans kommer att ansluta till servern. Följande kodsnutt visar hur du ansluter till en IMAP‑server med stegen ovan.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an imapclient with host, user and password
ImapClient client = new ImapClient("localhost", "user", "password");

Ansluta med SSL‑aktiverad IMAP‑server

Ansluta med IMAP‑server beskrev hur man ansluter till en IMAP‑server i fyra enkla steg:

  1. Skapa en instans av ImapClient klass.
  2. Ange värdnamn, användarnamn och lösenord.
  3. Ange porten.
  4. Specificera Säkerhetsalternativ.

Processen för att ansluta till en SSL‑aktiverad IMAP‑server är liknande men kräver att du sätter några ytterligare egenskaper:

Följande kodsnutt visar hur man

  1. Ange användarnamn, lösenord och port.
  2. Ange säkerhetsalternativ.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the ImapClient class
ImapClient client = new ImapClient("imap.domain.com", 993, "user@domain.com", "pwd");

// Set the security mode to implicit
client.setSecurityOptions(SecurityOptions.SSLImplicit);

Ansluta till server via proxy

Proxy‑servrar används ofta 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ödjer versionerna 4, 4a och 5 av SOCKS‑proxy‑protokollet. Denna artikel ger ett fungerande exempel på hur man får åtkomst till brevlådan via en proxy‑mailserver. Så här får du åtkomst till brevlådan via en proxy‑server:

  1. Initiera SocksProxy med den nödvändiga informationen, dvs proxyadress, port och SOCKS‑version.
  2. Initiera ImapClient med värdadress, användarnamn, lösenord och eventuella andra inställningar.
  3. Ställ in klienten SocksProxy egenskap till SocksProxy objekt skapat ovan.

Följande kodsnutt visar hur du hämtar brevlådan via en proxy‑server.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP and set SecurityOptions
ImapClient client = new ImapClient("imap.domain.com", "username", "password");
client.setSecurityOptions(SecurityOptions.Auto);

String proxyAddress = "192.168.203.142"; // proxy address
int proxyPort = 1080; // proxy port
SocksProxy proxy = new SocksProxy(proxyAddress, proxyPort, SocksVersion.SocksV5);

// Set the proxy
client.setProxy(proxy);

try {
    client.selectFolder("Inbox");
} catch (java.lang.RuntimeException ex) {
    System.out.println(ex.getMessage());
}

Ansluta till server via HTTP‑proxy

// 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);
final ImapClient client = new ImapClient("imap.domain.com", "username", "password");
try {
    client.setProxy(proxy);
    client.selectFolder("Inbox");
} finally {
    if (client != null)
        client.dispose();
}

Anpassa autentiseringsmekanism

Hämta listan över autentiseringsmekanismer som stöds av IMAP‑servern med hjälp av getSupportedAuthentication metod för ImapClient 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:

imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.Plain);

Ansluta till servern i skrivskyddat läge

Den ImapClient klass tillhandahåller en ReadOnly egenskap som när den sätts till true indikerar att inga ändringar ska göras i brevlådans permanenta tillstånd. Följande kodexempel visar användningen av ImapClient.ReadOnly egenskap. Den hämtar antalet olästa meddelanden, hämtar sedan ett meddelande och hämtar åter antalet olästa meddelanden i skrivskyddat läge. Antalet olästa meddelanden förblir detsamma, vilket indikerar att brevlådans permanenta tillstånd inte ändrades.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapClient imapClient = new ImapClient();
imapClient.setHost("<HOST>");
imapClient.setPort(993);
imapClient.setUsername("<USERNAME>");
imapClient.setPassword("<PASSWORD>");
imapClient.setSupportedEncryption(EncryptionProtocols.Tls);
imapClient.setSecurityOptions(SecurityOptions.SSLImplicit);

ImapQueryBuilder imapQueryBuilder = new ImapQueryBuilder();
imapQueryBuilder.hasNoFlags(ImapMessageFlags.isRead()); /* get unread messages. */
MailQuery query = imapQueryBuilder.getQuery();

imapClient.setReadOnly(true);
imapClient.selectFolder("Inbox");
ImapMessageInfoCollection messageInfoCol = imapClient.listMessages(query);
System.out.println("Initial Unread Count: " + messageInfoCol.size());
if (messageInfoCol.size() > 0) {
    imapClient.fetchMessage(messageInfoCol.get_Item(0).getSequenceNumber());

    messageInfoCol = imapClient.listMessages(query);
    // This count will be equal to the initial count
    System.out.println("Updated Unread Count: " + messageInfoCol.size());
} else {
    System.out.println("No unread messages found");
}

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

För att säkerställa säker autentisering och kommunikation med IMAP‑servern kan du ange och kräva användning av CRAM-MD5 som tillåten autentiseringsmetod för IMAP‑klienten. Följande kodsnutt visar hur du konfigurerar den tillåtna autentiseringstypen för ImapClient:

imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.CramMD5);

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 (ImapClient imapClient = new ImapClient(
        server.ImapUrl, server.ImapPort, "username", "password", SecurityOptions.Auto)) {
    imapClient.setTimeout(4000);

    if (imapClient.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 (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
    imapClient.setTimeout(60000); // 60 seconds

    // some code...
}

Hur man begränsar Greeting Timeout

IMAP‑klienten kan använda automatiskt läge för att etablera en anslutning. I detta läge går IMAP‑klienten igenom alla möjliga anslutningsparametrar tills anslutningen är etablerad. En IMAP‑server skickar en hälsningssträng till klienten när anslutningen är korrekt. Servrar kan använda implicit eller explicit (START TLS) SSL/TLS‑anslutningsinitiering. Om anslutningsläget inte stämmer (t.ex. servern väntar på en implicit SSL‑anslutning men klienten försöker upprätta en osäker eller explicit SSL‑anslutning) kommer servern inte att skicka någon hälsningssträng och användaren får vänta länge tills timeouten nås; klienten går då vidare till nästa anslutningsalternativ. För att undvika detta problem har egenskapen GreetingTimeout införts. Denna egenskap låter dig ställa in timeout för hälsningssträngen och minska tiden för automatisk anslutningsupprättning.

ImapClient imapClient = new ImapClient();
imapClient.setGreetingTimeout(4000);