EWS ve IMAP Kullanarak Exchange Server'a Bağlan
Exchange Web Service kullanarak Exchange sunucularına 2007, 2010 ve 2013 bağlanmak için Aspose.Email şu … sağlar. IEWSClient arayüz, … uygular EWSClient sınıf. EWSClient.GetEWSClient metod bir … örnekleyip döndürür IEWSClient nesne, bir Exchange posta kutusu ve diğer klasörlerle ilgili işlemleri gerçekleştirmek için daha sonra kullanılır. Bu makale, … nesnelerinin nasıl örneklenebileceğini gösterir. IEWSClient.
EWS kullanarak Exchange Server’a Bağlanma
Aşağıdaki kod parçacığı, Exchange Web Service (EWS) kullanarak nasıl bağlantı kuracağınızı gösterir:
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
private static IEWSClient GetExchangeEWSClient()
{
const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
const string domain = @"";
const string username = @"username@ASE305.onmicrosoft.com";
const string password = @"password";
NetworkCredential credentials = new NetworkCredential(username, password, domain);
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credentials);
return client;
}
EWSClient Başlatmaya Özel Başlıklar Ekleyin
İstemci başlatılırken belirli başlıkların gerekli olduğu senaryolarda, örneğin EWS’de X-AnchorMailbox başlığı gibi, bir örnek oluştururken özel başlık eklemek için aşağıdaki aşırı yüklenmiş yöntemleri kullanın IEWSClient:
-
IEWSClient GetEWSClient(string mailboxUri, ICredentials credentials, WebProxy proxy, Dictionary headers)
-
async Task GetEwsClientAsync(string mailboxUri, ICredentials credentials, WebProxy proxy, CancellationToken cancellationToken , Dictionary headers)
Aşağıdaki kod örneği, özel HTTP başlıklarını kullanarak IEWSClient’i nasıl yapılandırıp başlatacağınızı gösterir:
var headers = new Dictionary<string, string>();
headers.Add("X-AnchorMailbox", smtpExampleAddress);
IEWSClient client = EWSClient.GetEWSClient(HttpsExampleCom, new OAuthNetworkCredential("UserName", "Token"), null, headers);
IMAP kullanarak Exchange Server’a Bağlanma
Microsoft Exchange Server, bir posta kutusundaki öğelere erişmek için IMAP protokolünü destekler. Aspose.Email kullanın ImapClient IMAP protokolünü kullanarak Exchange Server’a bağlanan sınıf. Daha fazla bilgi için … ImapClient class. Öncelikle, Exchange Server’ınız için IMAP hizmetlerinin etkin olduğundan emin olun:
- Denetim Masası’nı açın.
- Yönetim Araçları’na gidin, ardından Hizmetler.
- Microsoft Exchange IMAP4 hizmetinin durumunu kontrol edin.
- Henüz çalışmıyorsa, etkinleştirin / başlatın.
Aşağıdaki kod parçacığı, IMAP protokolünü kullanarak Microsoft Exchange sunucusunun Gelen Kutusu klasöründen bağlanıp mesajları listelemeyi gösterir.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Connect to Exchange Server using ImapClient class
ImapClient imapClient = new ImapClient("ex07sp1", "Administrator", "Evaluation1");
imapClient.SecurityOptions = SecurityOptions.Auto;
// Select the Inbox folder
imapClient.SelectFolder(ImapFolderInfo.InBox);
// Get the list of messages
ImapMessageInfoCollection msgCollection = imapClient.ListMessages();
foreach (ImapMessageInfo msgInfo in msgCollection)
{
Console.WriteLine(msgInfo.Subject);
}
// Disconnect from the server
imapClient.Dispose();
Aşağıdaki kod parçacığı, SSL kullanımını gösterir.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
public static void Run()
{
// Connect to Exchange Server using ImapClient class
ImapClient imapClient = new ImapClient("ex07sp1", 993, "Administrator", "Evaluation1", new RemoteCertificateValidationCallback(RemoteCertificateValidationHandler));
imapClient.SecurityOptions = SecurityOptions.SSLExplicit;
// Select the Inbox folder
imapClient.SelectFolder(ImapFolderInfo.InBox);
// Get the list of messages
ImapMessageInfoCollection msgCollection = imapClient.ListMessages();
foreach (ImapMessageInfo msgInfo in msgCollection)
{
Console.WriteLine(msgInfo.Subject);
}
// Disconnect from the server
imapClient.Dispose();
}
// Certificate verification handler
private static bool RemoteCertificateValidationHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true; // ignore the checks and go ahead
}
IMAP kullanarak bir Exchange sunucusuna bağlandıktan ve … aldığınızda IMapMessageInfoCollection, şunu alabilirsiniz MessageInfo nesne. Aşağıdaki kod parçacığı, şunun sıra numarasını nasıl kullanacağınızı gösterir MessageInfo belirli bir mesajı kaydetmek için nesne.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Select the Inbox folder
imapClient.SelectFolder(ImapFolderInfo.InBox);
// Get the list of messages
ImapMessageInfoCollection msgCollection = imapClient.ListMessages();
foreach (ImapMessageInfo msgInfo in msgCollection)
{
// Fetch the message from inbox using its SequenceNumber from msgInfo
MailMessage message = imapClient.FetchMessage(msgInfo.SequenceNumber);
// Save the message to disc now
message.Save(dataDir + msgInfo.SequenceNumber + "_out.msg", SaveOptions.DefaultMsgUnicode);
}
Tercih Edilen Şifreleme Protokolünü Ayarlama
EWS, desteklenen işlemler için HTTPS taşıma protokolünü kullanır. Şifreleme SSL/TLS protokolleriyle sağlanır. Bu protokoller .NET framework tarafından uygulanır ve .NET framework’ün mevcut sürümüne bağlı olarak farklılık gösterebilir.
SSL/TLS versiyonunu ayarlamak için aşağıdaki kodu kullanın:
var client = new ImapClient("some.host");
client.SupportedEncryption = EncryptionProtocols.Tls13;
veya
var client = new ImapClient("some.host");
client.SetSupportedEncryptionUnsafe(EncryptionProtocols.Tls13);
Not: belirtilen EncryptionProtocol, .NET framework’ün mevcut sürümü tarafından desteklenmiyorsa, SupportedEncryption özellik, şifreleme protokolünü desteklenen bir seviyeye düşürür ve SetSupportedEncryptionUnsafe metot bir istisna fırlatır.
Modern Kimlik Doğrulama kullanarak Exchange Server’a Bağlan
Modern Kimlik Doğrulama artık tüm yeni Microsoft 365/Azure kiracılarında varsayılan olarak etkin, çünkü bu protokol, artık kullanılmayan Temel Kimlik Doğrulamadan daha güvenlidir.
Modern Kimlik Doğrulama, Active Directory Authentication Library ve OAuth 2.0’e dayanır. Zaman sınırlı tokenler kullanır ve uygulamalar kullanıcı kimlik bilgilerini saklamaz.
Önkoşul ayarları
Modern Kimlik Doğrulamayı kullanmak için etkin olduğundan emin olun. Ancak, 1 Ağustos 2017’den önce oluşturulmuş kiracılarda modern kimlik doğrulama varsayılan olarak kapalıdır. Şu konumda Microsoft 365 yönetici merkezi, Settings > Org Settings > Modern Authentication bölümüne gidin. Görünen Modern authentication menüsünde, artık Temel kimlik doğrulama gerektirmeyen protokolleri görebilirsiniz. Azure’daki yeni Microsoft365 kiracılarında, Temel Kimlik Doğrulama tüm uygulamalar için varsayılan olarak devre dışıdır. Bu nedenle, metin bu bölümde görüntülenecektir.
Kuruluşunuzda güvenlik varsayılanları etkin, bu da Exchange Online için modern kimlik doğrulamanın gerektiği ve temel kimlik doğrulama bağlantılarının engellendiği anlamına gelir. > Buradaki ayarları değiştirmeden önce Azure portalında güvenlik varsayılanlarını kapatmanız gerekir.
Kiracı (tenant) için Temel Kimlik Doğrulamayı şu yerden etkinleştirebilirsiniz Azure portalda Azure Active Directory > Properties > Manage Security defaults > Enable Security defaults > No seçeneğine gidin. Daha fazla bilgi için şuraya bakın Microsoft Dokümantasyon Makalesi.
Azure Active Directory ile Uygulama Kaydı
Uygulama kaydını Azure Active Directory ile yapmak gerekir. Uygulamanızla posta kutularına erişmek için iki tür izin vardır. Oluşturduğunuz uygulamaya bağlı olarak belirli bir izin türü seçin:
- Delegeli izinler kullanan uygulamalarda oturum açmış bir kullanıcı bulunur. Başka bir deyişle, hizmete bağlandığınızda kullanıcı adı ve şifre için bir iletişim kutusu açılır. Uygulama, oturum açmış bir kullanıcıdan daha fazla ayrıcalığa sahip olamaz.
- Uygulama izinleri kullanan uygulamalar, oturum açmış bir kullanıcı olmadan çalışır. Örneğin, arka plan hizmetleri veya daemon olarak çalışan uygulamalardır. Sadece bir yönetici, uygulama izinlerine onay verebilir.
Ayrıca, şuraya bakın Microsoft Dokümantasyon Makalesi daha fazla bilgi için.
Kayıt prosedürü seçilen izin türüne bağlıdır. Uygulamanızı kaydetmek için şuraya bakın Microsoft Dokümantasyon Makalesi.
EWSClient ile Modern Kimlik Doğrulama Kullan
Uygulamayı kaydettikten sonra, aşağıdaki bölümlerden oluşacak kodu yazmaya odaklanabiliriz:
- Yetkilendirme tokeni al.
- Tokeni kimlik doğrulama için kullan.
Yetkilendirme Tokeni Al
Tokeni almak için şunu kullanacağız .NET için Microsoft Authentication Library (MSAL).
Yetkilendirme tokeni almak için aşağıdaki adımlar izlenir.
- Şunu ekleyin Microsoft.Identity.Client nuget paketi MSAL.NET ikili dosyalarını içeren.
- Kimlik bilgilerini saklamak için bir AccessParameters sınıfı oluştur.
- Erişim parametrelerini kabul eden ve MSAL.NET kullanarak bir erişim tokeni alıcı bir metot oluştur.
Aşağıdaki kod örnekleri seçilen kimlik doğrulama türüne bağlı olacaktır.
Delegeli kimlik doğrulama ile token al
public class AccessParameters
{
public string TenantId { get; set; }
public string ClientId { get; set; }
public string RedirectUri { get; set; } = "http://localhost";
public string[] Scopes { get; set; } = { "https://outlook.office365.com/EWS.AccessAsUser.All" };
}
public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
var pca = PublicClientApplicationBuilder
.Create(accessParameters.ClientId)
.WithTenantId(accessParameters.TenantId)
.WithRedirectUri(ccessParameters.RedirectUri)
.Build();
var result = await pca.AcquireTokenInteractive(accessParameters.Scopes)
.WithUseEmbeddedWebView(false)
.ExecuteAsync();
return result.AccessToken;
}
Uygulama kimlik doğrulama ile token al
public class AccessParameters
{
public string TenantId { get; set; }
public string ClientId { get; set; }
public string ClientSecret { get; set; }
public string[] Scopes { get; set; } = { "https://outlook.office365.com/.default" };
}
public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
var cca = ConfidentialClientApplicationBuilder
.Create(accessParameters.ClientId)
.WithClientSecret(accessParameters.ClientSecret)
.WithTenantId(accessParameters.TenantId)
.Build();
var result = await cca.AcquireTokenForClient(accessParameters.Scopes).ExecuteAsync();
return result.AccessToken;
}
Token ile Kimlik Doğrulama
Bundan sonra, başarılı bir şekilde token aldığımızda, şunu başlatalım EwsClient.
Delegeli kimlik doğrulama ile token kullanma
NetworkCredential credentials = new OAuthNetworkCredential(accessToken);
using var client = EWSClient.GetEWSClient("https://outlook.office365.com/EWS/Exchange.asmx", credentials);
Uygulama kimlik doğrulama ile token kullanma
// Use Microsoft365 username and access token
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);
using var client = EWSClient.GetEWSClient("https://outlook.office365.com/EWS/Exchange.asmx", credentials);
IMAP, POP veya SMTP İstemcileri ile Modern Kimlik Doğrulama Kullan
Uygulama izinleri aracılığıyla IMAP, POP, SMTP erişimi desteklenmez. Başka bir deyişle, yalnızca delegeli kimlik doğrulama desteklenir.
Azure Active Directory ile uygulama kaydı prosedürü tanımlanmıştır yukarıda.
Microsoft 365 Yönetici Merkezinde IMAP, POP, SMTP AUTH’ı Etkinleştir veya Devre Dışı Bırak
- Şunu açın Microsoft 365 yönetici merkezi ve Users > Active users bölümüne gidin.
- Kullanıcıyı seçin ve çıkan menüde Mail’e tıklayın.
- Email apps bölümünde, Manage email apps üzerine tıklayın.
- IMAP, POP, Kimlik Doğrulamalı SMTP ayarını doğrulayın: işaretli değil = devre dışı, işaretli = etkin.
- Değişiklikleri kaydet butonuna tıklayın.
Token Sunucusundan Kimlik Doğrulama Tokeni Al
Outlook kaynak URL’lerini de içerecek şekilde tam kapsamları belirttiğinizden emin olun.
IMAP: https://outlook.office.com/IMAP.AccessAsUser.All POP: https://outlook.office.com/POP.AccessAsUser.All SMTP: https://outlook.office.com/SMTP.Send
Tokeni almak için şunu kullanacağız .NET için Microsoft Authentication Library (MSAL).
Yetkilendirme tokeni almak için aşağıdaki adımlar izlenir.
- Şunu ekleyin Microsoft.Identity.Client nuget paketi MSAL.NET ikili dosyalarını içeren.
- Kimlik bilgilerini saklamak için bir AccessParameters sınıfı oluştur.
- Erişim parametrelerini kabul eden ve MSAL.NET kullanarak bir erişim tokeni alıcı bir metot oluştur.
public class AccessParameters
{
public string TenantId { get; set; }
public string ClientId { get; set; }
public string RedirectUri { get; set; } = "http://localhost";
public string[] Scopes { get; set; } = {
"https://outlook.office.com/IMAP.AccessAsUser.All",
"https://outlook.office.com/SMTP.Send" };
}
public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
var pca = PublicClientApplicationBuilder
.Create(accessParameters.ClientId)
.WithTenantId(accessParameters.TenantId)
.WithRedirectUri(ccessParameters.RedirectUri)
.Build();
var result = await pca.AcquireTokenInteractive(accessParameters.Scopes)
.WithUseEmbeddedWebView(false)
.ExecuteAsync();
return result.AccessToken;
}
Token ile Kimlik Doğrulama
Bundan sonra, başarılı bir şekilde token aldığımızda, şunu başlatalım ImapClient.
var imapClient = new ImapClient(
"outlook.office365.com",
993,
username,
accessToken,
true);
Benzer şekilde, SmtpClient başlatma aşağıdaki gibi görünecek.
var smtpClient = new SmtpClient(
"smtp.office365.com",
587,
username,
accessToken,
true);
İstemci İstek Kimliğini Döndür
Bu ReturnClientRequestId özelliği, istemci istek kimliğinin Exchange Web Services (EWS) çağrılarının yanıtında döndürülüp döndürülmeyeceğini belirtmek için kolaylık sağlamak amacıyla EWSClient’e eklendi. İstemci istek kimliği, uygulamanızdan gönderilen her EWS isteği için ayarlayabileceğiniz benzersiz bir tanımlayıcıdır. Ayarlayarak the ReturnClientRequestId özelliği true olarak ayarladığınızda, istemci istek kimliğinin EWS sunucusundan gelen yanıta dahil edilmesini istediğinizi belirtirsiniz. Bu, birden çok isteğin asenkron olarak yapıldığı ve işlendiği senaryolarda istek ve yanıtların izlenmesi ve ilişkilendirilmesi için yararlı olabilir.
Aşağıdaki kod parçacığı, özelliğin nasıl kullanılabileceğini gösterir:
using (IEWSClient client = TestUtil.CreateEWSClient(user))
{
// Client will create random id and pass it to the server.
// The server should include this id in request-id header of all responses.
client.ReturnClientRequestId = true;
client.LogFileName = "ews.log";
client.GetMailboxInfo();
}
EWS İsteklerine X-AnchorMailbox ve Diğer Başlıkları Ekle
Aspose.Email API, Exchange isteklerine başlık eklemeye izin verir. Bu, farklı amaçlar için kullanılabilecek çeşitli başlıkları EWS isteklerine eklemek için kullanılabilir. Örneğin, Exchange sunucusundaki hız sınırlama sorunlarını yönetmek için kullanılan X-AnchorMailbox başlığının eklenmesi gibi. AddHeader metodu IEWSClient aşağıdaki kod parçacığında gösterildiği gibi EWS isteklerine başlık eklemek için kullanılır.
Geçersiz veya Süresi Dolmuş SSL Sertifikasını Yok Say veya Atla
Aspose.Email, Exchange Server üzerindeki SSL sertifikalarını her iki yöntemi de kullanarak işleyebilir ExchangeClient ve EWSClient sınıfları. SSL sertifikası süresi dolmuş veya geçersiz hale gelmişse, Aspose.Email geçersiz SSL sertifikası nedeniyle bir istisna fırlatır. Aşağıdaki kodda kullanılan yöntemle bu SSL sertifika hatalarını yok sayarak önleyin. Callback işleyicisini main() veya init() metodunuzda kaydedin ve aşağıdaki yöntemi sınıfın üyesi olarak ekleyin.