Cara Membuat Koneksi IMAP dalam C#
Daftar Ekstensi Server IMAP
Aspose.Email’s ImapClient memungkinkan Anda mengambil ekstensi server yang didukung oleh server seperti IDLE, UNSELECT, QUOTA, dll. Ini membantu mengidentifikasi ketersediaan ekstensi sebelum menggunakan klien untuk fungsionalitas tersebut. GetCapabilities() metode mengembalikan tipe ekstensi yang didukung dalam bentuk array string. Potongan kode berikut menunjukkan cara mengambil ekstensi.
Koneksi IMAP Standar
The ImapClient Kelas ini memungkinkan aplikasi mengelola kotak surat IMAP menggunakan protokol IMAP. ImapClient kelas digunakan untuk menyambungkan ke server surat IMAP dan mengelola email dalam folder email IMAP. Untuk menyambungkan ke server IMAP
- Buat sebuah instansi dari ImapClient kelas.
- Tentukan nama host, nama pengguna, dan kata sandi dalam konstruktor ImapClient.
Catatan, pembatasan password harus memenuhi persyaratan server. Klien email tidak menambahkan pembatasan password.
Setelah ImapClient instansi diinisiasi, panggilan berikutnya ke operasi apapun menggunakan instansi ini akan menyambung ke server. Potongan kode berikut menunjukkan cara menyambungkan ke server IMAP menggunakan langkah-langkah di atas.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Create an imapclient with host, user and password
ImapClient client = new ImapClient("localhost", "user", "password");
Koneksi IMAP dengan SSL
Menyambungkan dengan Server IMAP menjelaskan cara menyambungkan ke server IMAP dalam empat langkah sederhana:
- Buat sebuah instansi dari ImapClient kelas.
- Tentukan nama host, nama pengguna, dan kata sandi.
- Tentukan port.
- Tentukan Opsi Keamanan.
Proses menyambungkan ke server IMAP yang mendukung SSL serupa tetapi memerlukan Anda mengatur beberapa properti tambahan:
- Atur SecurityOptions ke SSLImplicit.
Potongan kode berikut menunjukkan cara
- Atur nama pengguna, kata sandi, dan port.
- Atur opsi keamanan.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// 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.SecurityOptions = SecurityOptions.SSLImplicit;
Pengaturan Koneksi Proxy
Menyambungkan ke Server melalui Proxy
Server proxy biasanya digunakan untuk berkomunikasi dengan dunia luar. Dalam kasus seperti itu, klien surat tidak dapat berkomunikasi melalui Internet tanpa menentukan alamat proxy. Aspose.Email menyediakan dukungan untuk versi 4, 4a, dan 5 dari protokol proxy SOCKS. Artikel ini memberikan contoh kerja mengakses kotak surat menggunakan server proxy surat. Untuk mengakses kotak surat melalui server proxy:
- Inisialisasi SocksProxy dengan informasi yang diperlukan, yaitu alamat proxy, port, dan versi SOCKS.
- Inisialisasi ImapClient dengan alamat host, nama pengguna, kata sandi, dan pengaturan lainnya.
- Setel properti klien SocksProxy properti klien ke SocksProxy objek yang dibuat di atas.
Potongan kode berikut menunjukkan cara mengambil kotak surat melalui server proxy.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Connect and log in to IMAP and set SecurityOptions
ImapClient client = new ImapClient("imap.domain.com", "username", "password");
client.SecurityOptions = 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.Proxy = proxy;
try
{
client.SelectFolder("Inbox");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Menyambungkan ke Server melalui HTTP Proxy
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
HttpProxy proxy = new HttpProxy("18.222.124.59", 8080);
using (ImapClient client = new ImapClient("imap.domain.com", "username", "password"))
{
client.Proxy = proxy;
client.SelectFolder("Inbox");
}
Koneksi Mode Hanya Baca
The ImapClient kelas menyediakan sebuah ReadOnly properti yang ketika diatur ke true, menunjukkan bahwa tidak ada perubahan yang boleh dilakukan pada status permanen kotak surat. Contoh kode berikut mendemonstrasikan penggunaan ImapClient.ReadOnly properti. Ini memperoleh jumlah pesan yang belum dibaca, kemudian mengambil satu pesan dan kemudian memperoleh jumlah pesan yang belum dibaca lagi dalam mode baca-saja. Jumlah pesan yang belum dibaca tetap sama menandakan bahwa status permanen kotak surat tidak berubah.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
ImapClient imapClient = new ImapClient();
imapClient.Host = "<HOST>";
imapClient.Port = 993;
imapClient.Username = "<USERNAME>";
imapClient.Password = "<PASSWORD>";
imapClient.SupportedEncryption = EncryptionProtocols.Tls;
imapClient.SecurityOptions = SecurityOptions.SSLImplicit;
ImapQueryBuilder imapQueryBuilder = new ImapQueryBuilder();
imapQueryBuilder.HasNoFlags(ImapMessageFlags.IsRead); /* get unread messages. */
MailQuery query = imapQueryBuilder.GetQuery();
imapClient.ReadOnly = true;
imapClient.SelectFolder("Inbox");
ImapMessageInfoCollection messageInfoCol = imapClient.ListMessages(query);
Console.WriteLine("Initial Unread Count: " + messageInfoCol.Count());
if (messageInfoCol.Count() > 0)
{
imapClient.FetchMessage(messageInfoCol[0].SequenceNumber);
messageInfoCol = imapClient.ListMessages(query);
// This count will be equal to the initial count
Console.WriteLine("Updated Unread Count: " + messageInfoCol.Count());
}
else
{
Console.WriteLine("No unread messages found");
}
Pengaturan Autentikasi CRAM-MD5
Untuk autentikasi aman dan akses ke server email, Aspose.Email untuk .NET menawarkan metode autentikasi CRAM-MD5. Cuplikan kode berikut akan menunjukkan cara kerjanya dengan ImapClient:
imapClient.AllowedAuthentication = ImapKnownAuthenticationType.CramMD5;
Menetapkan Batas Waktu untuk Operasi IMAP
Setiap operasi email memerlukan waktu tergantung pada banyak faktor (penundaan jaringan, ukuran data, kinerja server, dll.). Anda dapat mengatur timeout untuk semua operasi email. Contoh kode di bawah ini menunjukkan cara melakukannya menggunakan Timeout properti. Catatan: Anda tidak seharusnya mengatur nilai besar untuk menghindari penundaan lama dalam aplikasi Anda.
Konfigurasikan Batas Waktu Operasi
using (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
imapClient.Timeout = 60000; // 60 seconds
// some code...
}
Batasi Batas Waktu Salam
Klien IMAP dapat menggunakan mode otomatis untuk membuat koneksi. Dalam mode ini, klien IMAP mencoba semua parameter koneksi yang mungkin sampai koneksi berhasil. Server IMAP, jika koneksi benar, mengirimkan string salam ke klien. Server dapat menggunakan inisiasi koneksi SSL/TLS implisit atau eksplisit (START TLS). Jika mode koneksi tidak cocok (misalnya, server menunggu koneksi SSL implisit tetapi klien mencoba membuat koneksi tidak aman atau SSL eksplisit), server tidak akan mengirimkan string salam dan pengguna akan menunggu lama sampai batas waktu tercapai, dan klien beralih ke opsi koneksi berikutnya. Untuk mengatasi masalah ini, properti GreetingTimeout diperkenalkan. Properti ini memungkinkan Anda mengatur batas waktu untuk string salam, dan mengurangi waktu pembuatan koneksi otomatis.
using (ImapClient client = new ImapClient("localhost", 993, "username", "password"))
{
client.GreetingTimeout = 4000;
client.SelectFolder(ImapFolderInfo.InBox);
}
Menggunakan Protokol Kriptografi dengan IMAP
Aspose.Email mendukung protokol kriptografi SSL (usang) dan TLS untuk menyediakan keamanan komunikasi. Anda dapat mengaktifkan enkripsi kriptografi untuk melindungi pertukaran data antara aplikasi Anda dan server mail.
CATATAN: Anda harus mengatur hanya versi protokol yang didukung oleh .NET Framework. Jika beberapa versi protokol kriptografi tidak didukung oleh versi .NET Framework Anda saat ini, mereka akan diabaikan dan dilewati. Dalam kasus ini, pengecualian tidak akan dihasilkan. Silakan gunakan SetSupportedEncryptionUnsafe metode jika Anda ingin mengatur protokol tanpa pemeriksaan kompatibilitas.
Contoh kode di bawah menunjukkan cara mengatur TLS 1.3 untuk ImapClient instance kelas.
using (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
imapClient.SupportedEncryption = EncryptionProtocols.Tls13;
// some code...
}
Jika protokol enkripsi yang ditentukan tidak didukung dalam versi .NET Framework saat ini, perbedaan perilaku antara SetSupportedEncryptionUnsafe metode dan SupportedEncryption properti adalah sebagai berikut:
- Jika SupportedEncryption properti digunakan, klien email menurunkan protokol enkripsi ke tingkat yang didukung.
- Jika SetSupportedEncryptionUnsafe metode digunakan, klien email melemparkan pengecualian.
Menggunakan Perintah IMAP IDLE
API Aspose.Email ImapClient menyediakan kemampuan untuk membuka koneksi ke server dan menunggu kedatangan pesan email. Ini menghindari polling server berulang-ulang untuk email yang masuk. Cuplikan kode berikut menunjukkan cara menggunakan pustaka Aspose.Email untuk memantau kotak masuk email IMAP untuk pesan baru dan pesan yang dihapus, kemudian melakukan tindakan spesifik berdasarkan peristiwa tersebut:
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Connect and log in to IMAP
ImapClient client = new ImapClient("imap.domain.com", "username", "password");
ManualResetEvent manualResetEvent = new ManualResetEvent(false);
ImapMonitoringEventArgs eventArgs = null;
client.StartMonitoring(delegate(object sender, ImapMonitoringEventArgs e)
{
eventArgs = e;
manualResetEvent.Set();
});
Thread.Sleep(2000);
SmtpClient smtpClient = new SmtpClient("exchange.aspose.com", "username", "password");
smtpClient.Send(new MailMessage("from@aspose.com", "to@aspose.com", "EMAILNET-34875 - " + Guid.NewGuid(), "EMAILNET-34875 Support for IMAP idle command"));
manualResetEvent.WaitOne(10000);
manualResetEvent.Reset();
Console.WriteLine(eventArgs.NewMessages.Length);
Console.WriteLine(eventArgs.DeletedMessages.Length);
client.StopMonitoring("Inbox");
smtpClient.Send(new MailMessage("from@aspose.com", "to@aspose.com", "EMAILNET-34875 - " + Guid.NewGuid(), "EMAILNET-34875 Support for IMAP idle command"));
manualResetEvent.WaitOne(5000);
Contoh kode berikut menunjukkan cara menyiapkan pemantauan asynchronous untuk pesan email baru:
var client = = new ImapClient("imap.domain.com", "username", "password");
//anySuccess is a flag to prevent infinite Client.ResumeMonitoring calls
var anySuccess = false;
await client.StartMonitoringAsync(OnNewMessagesCallback, OnErrorCallback);
void OnErrorCallback(object eventSender, ImapMonitoringErrorEventArgs errorEventArguments)
{
//The exception can be handled here
Logger.Debug.Write(
$"An error occured while folder monitoring: {errorEventArguments.FolderName}",
errorEventArguments.Error);
//IMAP folder monitoring is stopped on any error. Here is an example
//of resuming after that.
if (!anySuccess) return;
anySuccess = false;
//Make sure you use ResumeMonitoring instead of StartMonitoring here
//to prevent missing any emails between the error handling and resuming.
client.ResumeMonitoring(OnNewMessagesCallback, OnErrorCallback,
errorEventArguments.MonitoringState);
}
void OnNewMessagesCallback(object sender, ImapMonitoringEventArgs successEventArgs)
{
anySuccess = true;
//Use successEventArgs.NewMessages to handle new messages
//Use successEventArgs.DeletedMessages to handle deleted messages
}
Dukungan untuk Ekstensi IMAP
API Aspose.Email menyediakan dukungan untuk ekstensi IMAP. Ekstensi IMAP berikut didukung oleh API saat ini. Ekstensi IMAP ini tidak didukung oleh semua server.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
using (ImapClient client = new ImapClient("imap.gmail.com", 993, "username", "password"))
{
// Set SecurityOptions
client.SecurityOptions = SecurityOptions.Auto;
Console.WriteLine(client.IdSupported.ToString());
ImapIdentificationInfo serverIdentificationInfo1 = client.IntroduceClient();
ImapIdentificationInfo serverIdentificationInfo2 = client.IntroduceClient(ImapIdentificationInfo.DefaultValue);
// Display ImapIdentificationInfo properties
Console.WriteLine(serverIdentificationInfo1.ToString(), serverIdentificationInfo2);
Console.WriteLine(serverIdentificationInfo1.Name);
Console.WriteLine(serverIdentificationInfo1.Vendor);
Console.WriteLine(serverIdentificationInfo1.SupportUrl);
Console.WriteLine(serverIdentificationInfo1.Version);
}
Perintah Daftar Diperluas IMAP4
Potongan kode berikut menunjukkan cara menggunakan perintah daftar diperluas IMAP4.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
using (ImapClient client = new ImapClient("imap.gmail.com", 993, "username", "password"))
{
ImapFolderInfoCollection folderInfoCol = client.ListFolders("*");
Console.WriteLine("Extended List Supported: " + client.ExtendedListSupported);
foreach (ImapFolderInfo folderInfo in folderInfoCol)
{
switch (folderInfo.Name)
{
case "[Gmail]/All Mail":
Console.WriteLine("Has Children: " + folderInfo.HasChildren);
break;
case "[Gmail]/Bin":
Console.WriteLine("Bin has children? " + folderInfo.HasChildren);
break;
case "[Gmail]/Drafts":
Console.WriteLine("Drafts has children? " + folderInfo.HasChildren);
break;
case "[Gmail]/Important":
Console.WriteLine("Important has Children? " + folderInfo.HasChildren);
break;
case "[Gmail]/Sent Mail":
Console.WriteLine("Sent Mail has Children? " + folderInfo.HasChildren);
break;
case "[Gmail]/Spam":
Console.WriteLine("Spam has Children? " + folderInfo.HasChildren);
break;
case "[Gmail]/Starred":
Console.WriteLine("Starred has Children? " + folderInfo.HasChildren);
break;
}
}
}