Belgelere geç
C#

Yapılandırma

İstemcinin her seçeneği, ortamdan okudukları ve reddettikleri.

Seçenekler

client.cs
using var http = new HttpClient(); var client = new OpenEmailClient(new OpenEmailOptions{    ApiKey = Environment.GetEnvironmentVariable("OPENEMAIL_API_KEY"),    BaseUrl = "https://api.openemail.uk",    Timeout = TimeSpan.FromSeconds(30),    MaxRetries = 2,    HttpClient = http,    Headers = { ["X-Team"] = "billing" },}); Console.WriteLine($"{client.Mode} {client.Raw.BaseUrl}");
SeçenekNe yapar
ApiKeyoe_live_ ya da oe_test_ ile başlayan çalışma alanı API anahtarı.
AccessTokenBir kişinin bağladığı uygulama için OAuth erişim belirteci. Bir anahtar ya da bir belirteç geçirin, ikisini birden değil.
AccessTokenProviderErişim belirtecini döndüren bir işlev. Her istekten önce çalışır, bu yüzden belirteci yenilemenin yeri burasıdır.
BaseUrlAPI'nin kaynağı. localhost:2222 gibi yalın bir ana makineye şeması eklenir.
HttpClientUygulamanızda zaten bulunan HttpClient; örneğin IHttpClientFactory üzerinden gelen ya da bir test işleyicisi taşıyan bir istemci. İstemci onu hiçbir zaman serbest bırakmaz.
TimeoutTek bir denemenin ne kadar sürebileceği. Varsayılan 30 saniyedir, TimeSpan.Zero bunu kapatır ve yüklemeler en az on dakika bekler.
MaxRetriesBaşarısız bir isteğin kaç kez yeniden deneneceği. Varsayılan 2'dir, 0 ise bir kez gönderir.
UserAgentopenemail-dotnet/ ve sürümden oluşan User-Agent üstbilgisinin yerine geçer.
HeadersHer isteğe eklenen üstbilgiler.

Belirtmediğiniz her şey ortamdan okunur: OPENEMAIL_API_KEY, ardından OPENEMAIL_ACCESS_TOKEN ve OPENEMAIL_BASE_URL. client.Mode, anahtarın bir live anahtarı mı yoksa bir test anahtarı mı olduğunu söyler.

İptal ve zaman aşımları

Her yöntem son olarak bir CancellationToken alır. Onu iptal etmek çağrıyı yeniden denemelerle birlikte hemen durdurur ve OperationCanceledException fırlatır, Timeout ise her denemeyi sınırlar.

deadline.cs
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(10)); var thread = await client.Threads.GetAsync("CAHk7pQ2x9LmZ4-mail.example.com", cancellationToken: deadline.Token); Console.WriteLine(thread["messageCount"]);

Bir çağrıdaki seçenekler

Sorgu parametreleri ve çağrı ayarları, API'nin adlarını taşıyan adlandırılmış argümanlardır; örneğin limit:, cursor: ve idempotencyKey:. Her yöntem, yalnızca o çağrı için başka bir anahtarla işlem yapmak üzere apiKey: alır; böylece tek bir süreç tek bir istemciyle birden çok çalışma alanına hizmet verebilir.

another-workspace.cs
var page = await client.Emails.ListAsync(    status: new[] { "failed", "bounced" },    limit: 50,    apiKey: Environment.GetEnvironmentVariable("OTHER_WORKSPACE_KEY")); Console.WriteLine($"{page.Count} {page.HasMore}");

OAuth erişim tokenları

Bir kişinin OAuth ile bağladığı uygulama, API anahtarı yerine bir erişim belirteci tutar. Onu AccessToken olarak geçirin ya da AccessTokenProvider geçirip belirteci süresi dolmak üzereyken orada yenileyin; böylece istemcinin yeniden oluşturulması hiç gerekmez.

access-token.cs
var current = "token-from-your-oauth-flow"; var client = new OpenEmailClient(new OpenEmailOptions{    AccessTokenProvider = _ => Task.FromResult(current),}); var me = await client.Me.GetAsync(); Console.WriteLine(me["workspaceId"]);

ASP.NET Core

Tüm uygulama için tek bir istemci kaydedin. Serbest bırakılacak kendine ait bir bağlantısı yoktur, bu yüzden doğru ömür singleton'dır.

Program.cs
using OpenEmail; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton(new OpenEmailClient(new OpenEmailOptions{    ApiKey = builder.Configuration["OpenEmail:ApiKey"],})); var app = builder.Build(); app.MapPost("/invoices/{number}/send", async (string number, OpenEmailClient client, CancellationToken cancellationToken) =>{    var sent = await client.Emails.SendAsync(new Body    {        ["from"] = "[email protected]",        ["to"] = "[email protected]",        ["subject"] = $"Invoice {number}",        ["text"] = "The invoice is attached.",    }, idempotencyKey: $"invoice-{number}", cancellationToken: cancellationToken);     return Results.Ok(new { id = (string?)sent["id"] });}); app.Run();

İstemcinin reddettikleri

  • oe_live_ ya da oe_test_ ile başlamayan bir anahtar ve bir erişim belirteciyle birlikte verilen bir anahtar.
  • Sunucu bu makinede localhost, bir 127.x.x.x adresi ya da ::1 üzerinde değilse, bir kimlik bilgisini düz http: üzerinden göndermek.
  • Bir sunucunun dinlediği adres olan 0.0.0.0 üzerindeki bir temel URL. Aynı bağlantı noktasıyla 127.0.0.1 kullanın.
  • Boş bir kimlik ya da yalnızca noktalardan oluşan ve bir URL ayrıştırıcısının kaldıracağı bir kimlik.
  • Bir yönlendirmeyi izlemek. Paketin oluşturduğu HTTP istemcisi hiçbir yönlendirmeyi izlemez, böylece bir kimlik bilgisi asla başka bir ana makineye gitmez.

Bir istemciyi ya da bir özel durumu yazdırmak hiçbir zaman kimlik bilgisi göstermez. Bir istemcide ToString() yalnızca modunu ve temel URL'sini verir, başka hiçbir şey vermez.

Yöntemi olmayan bir uç nokta

client.Raw.RequestAsync(), istemcinin kimlik bilgisi, temel URL'si, zaman aşımı ve yeniden deneme kurallarıyla herhangi bir yolu çağırır. Yol tek bir / ile başlamalıdır ve temel URL'nin kaynağının dışına çıkan bir yol reddedilir.

request.cs
var label = await client.Raw.RequestAsync("/labels", "POST", body: new Body { ["name"] = "Invoices" }); Console.WriteLine(label?["id"]);