Zamanlama ve iptal
`scheduledAt`, `emails.reschedule`, `emails.update` ve `emails.cancel`.
Daha sonra gönderme
message = {from: "[email protected]", to: "[email protected]", subject: "Your September invoice", text: "Invoice attached."} client.emails.send(message, scheduledAt: "PT1H")client.emails.send(message, scheduledAt: Time.utc(2027, 1, 1, 9))client.emails.send(message, scheduledAt: "2027-01-01T09:00:00.000Z")Bir Time ya da DateTime, String olarak bir ISO 8601 anı ya da PT1H veya P2D gibi bir süre. En fazla bir yıl ileri, asla geçmişte değil. Hash'in yanındaki bir anahtar kelime argümanı, alanı daha önce kurduğunuz bir iletiye ekler.
Bir Ruby Date, 2027-01-01 gibi çıplak bir tarih olarak gönderilir ve API bunu o günün UTC gece yarısı olarak okur. Saat önemliyse Time.utc(2027, 1, 1, 9) gibi bir Time geçirin.
Erteleme ve durdurma
message = {from: "[email protected]", to: "[email protected]", subject: "Your September invoice", text: "Invoice attached."} queued = client.emails.send(message, scheduledAt: "PT1H") client.emails.reschedule(queued[:id], Time.now + 86_400)client.emails.cancel(queued[:id])Yalnızca queued ve scheduled iletiler durdurulabilir. Daha ileri aşamadaki her şey bir OpenEmail::ConflictError fırlatır, çünkü bir kısmı zaten birinin posta kutusundadır. Zaten iptal edilmiş bir iletiyi iptal etmek başarılı olur ve hiçbir şeyi değiştirmez.
Bir zaman aralığında gönderilmeyi bekleyenleri bulmak için, uygulamanın takviminin yaptığı gibi status: ["scheduled", "queued"] ile scheduled_from: ve scheduled_to: kullanarak listeleyin.
Gitmeden önce değiştirme
emails.update henüz gitmemiş bir iletiyi değiştirir: ne zaman gideceğini scheduledAt ile, ne söylediğini subject, html ve text ile, hangi adresle çıkacağını from ile, kime gideceğini ise to, cc ve bcc ile. Bunlardan herhangi birini birlikte gönderebilirsiniz; belirtmediğiniz bir alan değerini korur. Bir alıcı listesi saklanan listenin tamamının yerini alır. Uygulamanın takviminde zamanlanmış bir iletiyi düzenlemek de tam olarak bunu yapar.
updated = client.emails.update( "msg_3f9a1c07d2b84e6a9c5b1f20", subject: "Your September invoice, corrected", to: ["[email protected]", "[email protected]"], scheduledAt: Time.utc(2026, 10, 5, 8)) puts updated[:status], updated[:subject], updated[:scheduledAt]from bir gönderimde olduğu gibi denetlenir, bu yüzden anahtarın adına gönderebileceği bir adres olmalıdır. Kabul edildiğinde çevrilmiş bir ileti onaylanmış metnini korur; bu yüzden ona verilen yeni bir subject, html ya da text 409 translation_locked verir. Zamanlanmadan önce şifrelenmiş bir ileti de metnini ve alıcılarını korur. Bunları değiştirmek yerine iptal edip yeniden gönderin.
Bunun yerine bir geri alma penceresi
message = {from: "[email protected]", to: "[email protected]", subject: "Your September invoice", text: "Invoice attached."} held = client.emails.send(message, cancellableForSeconds: 30) puts held[:status], held[:cancellableUntil]Zamanlanmış bir mesaj gidene kadar zaten iptal edilebilir; bu yüzden ikisi birleştirilemez ve sunucu bunu reddeder. Anlık bir mesajda geri alma penceresi için bunu kullanın.
Parametreler: zamanlama
scheduledAtTime, DateTime or String- `emails.send` üzerinde ne zaman gönderileceği: bir Time ya da DateTime, String olarak bir ISO 8601 anı ya da `PT1H` veya `P2D` gibi bir süre. Bir Time ya da DateTime bir UTC anı olarak, bir String olduğu gibi, bir Ruby Date ise UTC gece yarısı anlamına gelen çıplak bir tarih olarak gönderilir. En az bir saniye sonra ve en fazla 365 gün ileride olmalıdır; iki sınırın ihlali de `scheduledAt` üzerinde bir `validation_error` verir. Doğal dil kabul edilmez, çünkü “gelecek salı” ifadesini yanlış ayrıştırmak bir iletiyi geri alınamayacak bir zamanda gönderir.
cancellableForSecondsInteger- ANINDA bir gönderim için gönderimi geri alma penceresi: 0 ile 900 arasında bir Integer, varsayılanı 0. 0'dan büyük her değer, gidene kadar zaten iptal edilebilen `scheduledAt` ile birlikte reddedilir; bu şekilde bekletilen bir ileti `scheduled` değil, `queued` durumunda bekler. Bu, kısa bir gecikmeyle aynı erteleme mekanizmasıdır.
idStringzorunlu- `msg_` kimliği; `emails.cancel`, `emails.reschedule` ve `emails.update` çağrılarının ilk argümanı. Bunlar kendilerine ait bir kapsam yerine `emails:send` gerektirir ve kimliği anahtarın kendi çalışma alanında arar; bu yüzden başka bir çalışma alanına ait bir kimlik, hiç var olmamış bir kimlik gibi tam olarak `not_found_error` verir.
scheduled_atTime, DateTime or Stringzorunlu- `emails.reschedule` çağrısının ikinci argümanı olarak yeni zaman; aynı kurallarla ve aynı bir yıllık pencereye göre okunur. `reschedule` yalnızca bunu değiştirir ve istemci başka hiçbir şey göndermez. Bir süre, SUNUCUNUN onu okuduğu ana göredir; bu yüzden yeniden denenen bir yeniden zamanlama, ilkinin düşeceği andan biraz sonraya düşer: daha sonraya, asla daha önceye değil.
api_keyString- Üç çağrının herhangi birinde istemcinin anahtarı yerine bu anahtarla işlem yapar.
Yanıt
cancel, reschedule ve update her biri iletinin tamamını Symbol anahtarlı bir Hash olarak döndürür.
objectString- Her zaman `email`. Bu çağrılar bir onay yerine iletinin tamamıyla yanıt verir; bu yüzden neyin değiştiğini görmek için hiçbir şeyin yeniden getirilmesi gerekmez. `emails.send` aynı biçimi ve ek olarak `replayed` döndürür.
idString- `msg_` tanıtıcısı. İletinin ömrü boyunca sabittir ve onunla ilgili diğer her çağrının aldığı kimliktir.
statusString- İptalden sonra `cancelled`, yeniden zamanlamadan sonra `scheduled`. Bu, bir geri alma penceresinin ardında yalnızca `queued` durumunda olan bir ileti için de geçerlidir ve yeniden zamanlama onu gerçek bir zamanlamaya dönüştürür. Yalnızca `queued` ve `scheduled` iletiler taşınabilir ya da durdurulabilir. Daha ileri aşamadaki her şey `email_not_cancellable` kodlu bir `conflict_error` verir, çünkü bir kısmı zaten birinin posta kutusundadır.
scheduledAtString or nil- İletinin sevk edilmesi gereken ISO 8601 anı. İkisi tek bir mekanizma olduğu için hem bir geri alma penceresi hem de `scheduledAt` ile yapılan bir gönderim için ayarlanır; sıradan bir anında gönderimde nil olur.
cancellableUntilString or nil- İptalin artık çalışmadığı an; iki ertelenmiş yolda da `scheduledAt` ile aynı andır. Çağrı döndüğünde zaten gitmiş olan anında bir gönderimde nil.
sentAtString or nil- İletinin gerçekte çıktığı an. Beklerken nil, iptal edilmiş bir iletide ise sonsuza dek nil.
messageIdString or nil- RFC 5322 Message-ID; MIME oluşana kadar nil, bu yüzden bu çağrıların işlem yapabildiği bir iletide her zaman nil. API'ye hitap etmek için kullanılacak bir şey değildir ve daha sonraki bir geri dönme de bununla gelmez: gönderim hizmeti başlığı çıkışta yeniden yazar.
threadIdString or nil- Bu iletinin ait olduğu konuşma dizisi; istekten alınır ve gönderildikten sonra taşıma katmanının bildirdiği değerle yeniden yazılır. Bir yanıt değilse nil.
transportString or nil- Baytların nasıl çıktığı; sevk edilene kadar nil, bu yüzden bir iptalin ya da yeniden zamanlamanın döndürebileceği her iletide nil. Test modunda bir gönderim `test` kaydeder ve bu gem'in henüz adlandırmadığı bir taşıma katmanı da görünebilir; bu yüzden bilinmeyen bir değeri bir hata olarak değil, bir bilgi olarak ele alın.
attemptsInteger- Sevk işleminin bu kaydı kaç kez sahiplendiği. Başarılı bir gönderimle değil, her sahiplenmeyle artar ve hâlâ bekleyen her şey için 0'dır.
lastErrorString or nil- İleti için kaydedilen son hata; hiçbir şey başarısız olmadıkça nil. İşi kuyruğa alınamayan ertelenmiş bir gönderim buraya `Could not schedule: …` olarak yazılır ve `failed` durumuna taşınır; bu, zamanlanmış bir iletinin kimse istemeden iptal edilemez hâle gelmesinin tek yoludur.
fromString- İletinin hangi adresle çıkmasına yetki verildiği: gönderilen `from`, çıplak ve küçük harfe çevrilmiş olarak saklanır. Görünen ad burada atılır, çünkü `emails.list` çağrısının `from:` filtresi eşitliğe göre karşılaştırır.