Proton ana sayfası

Sieve süzgeci (gelişmiş özel süzgeçler)

Okuma süresi
43 dakikalık
Kategori
E-postaları Al ve okumak

Proton Mail, kullanıcılara e-postaları etiketler atayarak veya klasörlere ayırarak otomatik olarak süzmeleri için çeşitli yollar sunar. Genel olarak üç yöntem vardır:

  1. Göndericileri her zaman veya hiçbir zaman istenmeyen e-posta klasörüne konmayacak şekilde Engellenenler ve İzin Verilenler Listelerine eklemek;
  2. Proton Mail’in etkileşimli arayüzünü kullanarak bir özel süzgeç oluşturmak;
  3. [En gelişmiş] Sieve’de özel süzgeç oluşturmak.

Bu yöntemler arasında Sieve’de özel süzgeç oluşturmak en yüksek esnekliği sunar ancak kullanımı da daha karmaşıktır. Bu nedenle Sieve’i, teknik deneyime sahip kullanıcılar için gelişmiş bir özellik olarak değerlendiriyoruz. Çoğu kullanıcı için ihtiyacınız olan özel süzgeçleri oluşturmak üzere etkileşimli arayüz uygundur.

İçindekiler

Sieve nedir?

Sieve, e-postaları süzmek için kullanılan bir programlama dilidir. Sieve’de basit kurallar yazarak süzgeçler oluşturabilirsiniz. Örneğin, “Kyle’dan gelen tüm iletilere yeşil etiketi ekle”. Bu kuralları birleştirmek, gelişmiş bir süzme sistemi oluşturabilir.

Sıfırdan Sieve kuralları yazabilir, bunları bu makaledeki gibi örneklerden alabilir veya bunu kolaylaştıran bir yazılım kullanabilirsiniz.

Aslında, Sieve süzgeçleri oluşturmak için girdilerinizi kullanan etkileşimli arayüz aracılığıyla size Sieve süzgeçleri oluşturmanın bir yolunu zaten sunuyoruz. Etkileşimli arayüzün kendisi Sieve’in bir alt kümesini kullandığından, Sieve öğrenmenin bir başka iyi yolu da etkileşimli arayüzü kullanarak süzgeçler oluşturmak ve süzgeçleri Sieve’de düzenlemektir.

Örneğin, etkileşimli arayüz kullanılarak oluşturulan aşağıdaki süzgeci karşılaştırın…


Sieve düzenleyicisinde görüntülenen aynı süzgecin koduyla:

Bu makale sizi Sieve ile tanıştıracak ve kendi Sieve süzgeçlerinizi nasıl yazacağınızı açıklayacaktır. Sieve kullanımı hakkında daha fazla bilgiye ihtiyacınız varsa, internette yardımcı olabilecek çok sayıda başka kılavuz bulunmaktadır. Proton Mail’de Sieve hakkında bu sayfada yanıtlanmayan sorularınız varsa, Destek ekibimize her zaman buradan ulaşabilirsiniz.

Başlarken

Sieve süzgeçleri oluşturmaya başlamak için mail.proton.me(yeni pencere) adresinde oturum açın, Ayarlar → Tüm ayarlar → Proton Mail → Süzgeçler → Sieve süzgeci ekle bölümüne gidin.

Bir Sieve betiği, komutlar listesinden oluşur. Çoğu betik bir require komutuyla başlar. require komutu, belirli bir işlevsellik sağlayan bir eklentiyi yükler. Örneğin, bir etiket atamak veya bir iletiyi bir klasöre koymak için fileinto komutuna ihtiyacımız vardır.

Bu komutu yüklemek için sadece şunu yazarız:

require "fileinto";

Birden fazla eklenti yüklemek için bir liste kullanabilirsiniz:

require ["fileinto", "imap4flags"];

Bu durumda, imap4flags, postayı okundu olarak işaretlemenize olanak tanıyan bir eklenti yükler. require komutundan sonra genellikle gelen ileti üzerinde bazı testler gerçekleştirirsiniz. Bu, if ve address veya header gibi başka bir komutun birleştirilmesiyle yapılır.

Son olarak, testler başarılı olursa bir iletiye işlem uygulayabilirsiniz. Örneğin, belirli bir göndericiden gelen tüm e-postaları aynı klasöre koymak ve gelen postayı okundu olarak işaretlemek istediğimizi varsayalım. Bu şu şekilde yazılabilir:

require ["fileinto", "imap4flags"];
# I don't really like Spott
if address :is "from" "Spott.Tenerman@northpark.example.com"
{ 
    addflag "\\Seen";
    fileinto "enemies";
}

# işaretinin bir yorumu belirttiğini ve Sieve betiğinin bir parçası olarak yorumlanmadığını unutmayın. Ayrıca, ayarladığınız klasörün veya etiketin (burada enemies) ortamınızda bulunması gerekir: Klasör ve etiket oluşturmayı buradan öğrenebilirsiniz. Bu süzgeci girdikten sonra KAYDET düğmesine basın. Süzgeciniz artık gelen her e-posta için çalışacaktır.

Elbette, birden fazla göndericiden gelen e-postaları aynı klasöre koymak isteyebilirsiniz. Bu durumda, address komutuna bir dizi dize iletebilirsiniz (bir dize(yeni pencere), bu durumda bir e-posta adresi olan bir dizi karakterdir):

require ["fileinto", "imap4flags"];
# I don't really like Spott and Kyyyhel
if address :is "from" ["Spott.Tenerman@northpark.example.com", "Kyhel.Broski@northpark.example.com"]
{ 
    addflag "\\Seen";
    fileinto "enemies";
}

Bir test koşuluna bir dize iletebildiğiniz her durumda, genellikle bir liste iletmenin de mümkün olduğunu unutmayın. Ardından listedeki dizelerden herhangi birini deneyerek bir eşleşme bulmaya çalışacaktır. Bu durum, fileinto, addflag vb. komutlar için geçerli değildir.

Ancak Sieve, e-posta kutunuzu yeniden düzenlemekten daha güçlüdür. Ayrıca e-postaları bir yanıt iletisiyle reddetmenize de olanak tanır:

require "reject";
# Reject mails that spell my name wrong
if header :contains "subject" "Kyhel"
{
    reject "My name is not Kyhel";
}

Testleri kullanma

Sieve’de testleri birleştirme

Başlarken bölümünde gösterdiğimiz gibi, gelen iletiler üzerinde if komutunu kullanarak, bir e-postanın bir require komutundan etkilenip etkilenmeyeceğini belirlemek için testler gerçekleştirebilirsiniz.

if komutuna ek olarak, betiğinizi basit bir şekilde yapılandırmanıza olanak tanıyan başka test komutları da vardır.

Else

else komutu, if komutu işlemlerini yürütmediğinde bir şeyler yapmanıza olanak tanır. Bunun bir örneği şudur:

require ["fileinto"];
# If the subject contains something incomprehensible, then put the mail into the kenny folder
if header :contains "subject" "mmph mmph"
{
    fileinto "Kenny";
} else { 
    fileinto "Understandable";
}

Burada, konu tam olarak mmph mmph ise e-posta Kenny klasörüne taşınacaktır. Diğer durumda (yani konu tam olarak mmph mmph olmadığında) e-posta Understandable klasörüne taşınacaktır.

Elsif

elsif, else if ifadesinin kısaltmasıdır. else komutu gibi, if koşulu yanlış olduğunda ancak yalnızca elsif koşulu doğruysa yürütülür. elsif doğru değilse, bir sonraki elsif veya else bloğu yürütülür.

require ["fileinto", "imap4flags"];
# If the subject contains something incomprehensible, then put the mail into the kenny folder
if header :contains "subject" "mmph mmph"
{
    fileinto "Kenny";
# Kyhel sends me only speeches
} elsif address :is "from" "Kyhel.Broski@northpark.example.com" { 
    fileinto "Speeches";
} else { 
# otherwise the mail is important, so add a star.
    addflag "\\Flagged";
}

Tek bir çalıştırmada if, elsif veya else bloklarından yalnızca birinin yürütüleceğini unutmayın.

Anyof

Bazen birden fazla testten biri başarılı olduğunda bir komutu çalıştırmanız gerekir. Bunun için anyof komutunu kullanabilirsiniz. Bu işlem, anyof yazıldıktan sonra bir sol parantez ‘(’, test etmek istediğiniz ve virgülle ayrılmış ifadeler ile bir sağ parantez ‘)’ yazılarak gerçekleştirilir.

require ["fileinto", "imap4flags"];
# Kenny either sends from kenny@northpark.example.com or puts "mmph mmph" in the subject.
   if anyof(address :is "from" "kenny@northpark.example.com", header :contains "subject" "mmph mmph")
{
    fileinto "Kenny";
}

Bu betik, kenny@northpark.example.com adresinden gelen veya konu satırında mmph mmph içeren iletileri Kenny. klasörüne yerleştirecektir.

Allof

anyof komutunun karşıtı da mevcuttur: allof. Bu, yalnızca belirtilen tüm koşullar eşleştiğinde bir komutu çalıştırmanıza olanak tanır:

require ["fileinto", "imap4flags"];
# Kenny always sends me mails with mmph mmph
if allof(address :is "from" "Kenny@northpark.example.com", header :contains "subject" "mmph mmph")
{
    fileinto "Kenny";
}


Bu betik, kenny@northpark.example.com adresinden gelen ve konu satırında mmph mmph içeren iletileri Kenny klasörüne yerleştirecektir.

Değil

Son olarak, bazen bir şey eşleşmediğinde bir komut uygulamanız gerekir. İfadenin önüne not eklemek bunun gerçekleşmesini sağlayacaktır:

require ["fileinto", "imap4flags"];
# If a subject line does not contain real guitar put it into the young people folder
if not header :contains "subject" "real guitar"
{
    fileinto "Young people";
}

Şuna eşittir:

require ["fileinto", "imap4flags"];
# The else part will be evaluated if the condition is not true
if header :contains "subject" "real guitar"
{
    # do nothing
} else {
    fileinto "Young people";
}

Bu, konu satırında gerçek gitar içermeyen tüm e-postaları Young people klasörüne yerleştirir.

Elbette tüm bu testleri birleştirmek mümkündür. Örneğin, hem Kenny’den gelmeyen hem de konuda mmph mmph içermeyen bir e-postaya yıldız koymak isteyebilirsiniz:

require ["fileinto", "imap4flags"];
if not anyof (    header :contains "subject" "mmph mmph", 
    address :is "from" "Kyhel.Broski@northpark.example.com" ) { 
    addflag "\\Flagged";
}

Üst bilgilerde testler gerçekleştirme

address komutunu kullanarak, from, to ve sender gibi adres üst bilgileri üzerinde testler gerçekleştirebilirsiniz. Aşağıdaki bayraklardan birini kullanarak e-posta adresinin farklı bölümlerini ayıklayabilirsiniz:

  • :localpart — et (@) sembolünden önceki kısım
  • :domain — et (@) sembolünden sonraki kısım
  • :all — adresin tamamı

Aşağıdaki kod parçacığı bu komutun kullanımını açıklamaktadır:

require ["fileinto", "imap4flags"];
# Northpark people are made of paper, springfield are mostly yellow
if address :domain "from" "northpark.example.com"
{
    fileinto "PaperPeople";
} elsif address :domain "from" "springfield.example.com"{
    fileinto "YellowPeople";
}
if address :localpart "from" "chef"
{
    addflag "\\Flagged";
}

Özetle bu betik, northpark.example.com etki alanından gönderilen her şeyi PaperPeople ve springfield.example.com etki alanından gönderilenleri ise YellowPeople içine yerleştirecektir.

Dahası, bir e-postanın hangi etki alanından gönderildiğinden bağımsız olarak, @ işaretinden önceki kısım chef ifadesine eşitse (örneğin chef@example.com), ileti işaretlenecektir. Diğer bir ilginç kullanım alanı ise belirli bir adrese gönderilen her şeyin otomatik olarak bir klasörde depolanmasıdır:

require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :localpart "to" "support"
{
    fileinto "Support";
}

Gelişmiş

envelope komutu daha fazla test gerçekleştirmenize olanak tanır. Genel olarak, address testi yalnızca değeri üst bilgiden alır. Ancak, SMTP oturumunda üst bilgidekinden farklı bir from adresi belirtmek mümkündür.

Proton Mail üst bilgi arayüzünde, envelope-from değeri return-path üst bilgisine ve envelope-to değeri x-original-to üst bilgisine eşittir.

envelope komutunu kullanarak zarftan asıl to: ve from: adreslerini alabilirsiniz. Bu iki alandan başka bir alan bulunmadığını, dolayısıyla bu komutta sender alanının yer almadığını unutmayın. Lütfen envelope komutunun bir eklentide olduğunu ve bu nedenle öncelikle bu eklentiyi require etmeniz gerektiğini unutmayın.

require ["fileinto", "imap4flags", "envelope"];
# Northpark people are made of paper, springfield are mostly purple
if envelope :domain "from" "northpark.example.com"
{
    fileinto "PaperPeople";
} elsif envelope :domain "from" "springfield.example.com"{
    fileinto "PurplePeople";
}
if envelope :localpart "from" "chef"
{
    addflag "\\Flagged";
}

İki değeri değerlendirmek için karşılaştırıcıları kullanma

Bir test iki değeri değerlendirirken, comparators (karşılaştırıcılar) adı verilen farklı bayraklar kullanılarak bu karşılaştırmanın nasıl yapılacağını belirtmek mümkündür. Öncesinde, aşağıdaki testte olduğu gibi, belirtilen karakter dizisinin belirli bir değere tam olarak eşit olduğunu kontrol eden :is ve belirli bir değerin belirtilen karakter dizisini içerdiğini kontrol eden :contains olmak üzere iki karşılaştırıcıyı zaten kullanmıştık.

require ["fileinto", "imap4flags"];
if not anyof (
    header :contains "subject" "mmph mmph", # the subject contains mmph mmph 
    address :is "from" "Kyhel.Broski@northpark.example.com" # the recipient is exactly Kyhel.Broski@northpark.example.com
) { 
    addflag "\\Flagged";
}

Daha özel bir biçim tanımlamak için :matches karşılaştırıcısı da kullanılabilir. Tıpkı :is karşılaştırıcısı gibi her iki değeri de baştan sona karşılaştıracaktır. Ancak :matches durumunda, tanımladığınız değer ? ve * değerlerini içerebilir. Soru işareti tek bir karakterle eşleşirken, yıldız (genel arama karakteri olarak adlandırılır) sıfır veya daha fazla karakterle eşleşecektir.

Bu biçimle şu testi oluşturabilirsiniz:

require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph*" { 
    addflag "\\Flagged";
}

Bu örnekte, iletinin konusu mmph ile başlıyorsa ve ardından herhangi bir karakter veya karakterler geliyorsa test başarılı olacaktır. Diğer bir deyişle, konu ‘mmph’ ile başladığında e-posta işaretlenecektir. Hem ‘mmph mmph’ hem de ‘mmph mmph Hello’ eşleşecek; ancak ‘Hello mmph’ ve ‘Springfield sales’ eşleşmeyecektir.

Yıldız işareti, değerin ortasında ve aşağıda gösterildiği gibi birkaç kez de kullanılabilir:

require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph *mmph *mmph" { 
    addflag "\\Flagged";
}

Bu test, konu ‘mmph ’ (boşluklu) ile başlıyorsa, başka bir ‘mmph ’ (boşluklu) içeriyorsa ve ‘mmph’ (boşluksuz) ile bitiyorsa eşleşecektir. Eşleşen konular: ‘mmph mmph mmph’, ‘mmph mmph mmphmmph’ veya ‘mmph is mmph and mmph’.

Bu :matches karşılaştırıcısı, adres karşılaştırmalarında oldukça kullanışlı olabilir. Bildiğiniz gibi, Proton Mail’in birkaç etki alanı vardır: protonmail.com and proton.me. Bir iletinin Proton Mail kullanıcısından gelip gelmediğini kontrol etmek istiyorsanız, bu betiği kullanabilirsiniz:

require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :domain :matches "from" "protonmail.*"
{
    fileinto "Internal";
}

Herhangi bir nedenle tam olarak * veya ? karakterini eşleştirmeniz gerekirse, o zaman bunları kaçış karakteriyle belirtebilirsiniz; bunu yapmak için önlerine \\ eklemeniz gerekir: \\* bir yıldızla ve \\? bir soru işaretiyle eşleşecektir.

Aynı zamanda :regex karşılaştırıcısını da tanımlayan regex eklentisini desteklediğimizi unutmayın. Bu karşılaştırıcı, :matches karşılaştırıcısının daha kesin bir sürümüdür ancak oldukça karmaşıktır. Daha fazla bilgi için lütfen resmi belgeleri(yeni pencere) okuyun.

Bazı durumlarda (bu makalenin devamında göreceğiniz üzere), sayısal değerleri karşılaştırmak isteyebilirsiniz. relational paketi bu kullanım için tasarlanmıştır. Bu paket, ardından karşılaştırma türünün geldiği :value karşılaştırıcısını tanımlar.

Bir değerin; belirtilen değerden büyük (karşılaştırma türü “gt”), büyük veya eşit (“ge”), eşit (“eq”), küçük veya eşit (“le”) ya da küçük (“lt”) olup olmadığını kontrol etmenize olanak tanır.

Sayısal değerler karşılaştırılırken comparator-i;ascii-numeric paketi de oldukça kullanışlıdır. Betik yorumlayıcısına, dize içeriğinin normal bir dize değil, bir sayı olduğunu bildirir. Teste :comparator “i;ascii-numeric” eklenerek kullanılabilir.

Tüm bu bilgilerle aşağıdaki betiği oluşturabiliriz:

require ["fileinto", "relational", "comparator-i;ascii-numeric"];  
if header :value "ge" :comparator "i;ascii-numeric" "subject" "2"   
{    
 fileinto "Dummy example";
}

Konu 2’ye eşit veya 2’den büyükse bu test, iletiyi Dummy example klasörüne taşıyacaktır. Konu bir sayı değil de bir yazı ise test başarısız olacaktır. Bu haliyle bu örnek oldukça anlamsız görünmektedir ancak bu makalenin ilerleyen kısımlarında tanımlayacağımız date gibi diğer eklentilerle birlikte kullanılması amaçlanmıştır.

Sieve içinde bağlam kullanarak karşılaştırma

Eklentileri kullanarak genel olarak hesabınız ve Proton Mail bağlamıyla ilgili bilgilere de erişebilirsiniz. Örneğin, gönderici adresinin kişi listenizde olup olmadığını kontrol edebilirsiniz.

Kişi listenize erişim

extlists eklentisini kullanarak kişi listenize erişebilirsiniz. Üst bilgi testleriyle birleştirildiğinde, bir kişinin kişi listenizde olup olmadığını kontrol edebilirsiniz.

require ["fileinto", "extlists"];  
# Checks that the sender is in your personal address book
if header :list "from" ":addrbook:personal?label=Family"   
{    
 fileinto "Known"; 
}

Gönderici :addrbook:personal?label=Family listesinde yer alıyorsa bu test, iletiyi Known etiketiyle işaretleyecektir. Liste iki bölüme ayrılabilir. İlk olarak, :addrbook:personal adresin kişisel adres defterinizde olduğu anlamına gelir. İkinci olarak, label=Family listeyi daha da daraltarak, kişinin adres defterinizde olmasının yanı sıra Family kişi grubuna da ait olması gerektiğini belirtir. İhtiyaç duymanız halinde bu etiketi başka bir kişi grubuyla değiştirebilirsiniz. Dilerseniz :addrbook:personal?label=Work kullanabilirsiniz, bu durumda test yalnızca gönderici hem adres defterinizde hem de Work kişi grubunda olduğunda başarılı olacaktır.

Daha genel bir ifadeyle, bir liste Tag URI Şemasına(yeni pencere) uyar ve süzgeçlerinizi daraltmak için ek parametreler ekleyebilirsiniz. Ardından bu listeyi aşağıdaki gibi kullanabilirsiniz:

require ["fileinto", "extlists"];  
# replace :your:list:here by the list you want to use
if header :list "from" ":your:list:here"
{    
 # some actions... 
}

Dört farklı liste sağladık:

  • :addrbook:personal¹ bir adresin kişi listenizde olup olmadığını kontrol eder. Liste, label parametresini kabul eder; bu parametre belirli bir kişi grubu ile eşleşir. Bu parametre dört alt varyasyon şeklinde çekimlenebilir:
    • :addrbook:personal?label=something “something” kişi grubunda yer alan bir kişiyle eşleşecektir;
    • :addrbook:personal?label.starts-with=something adı “something” ile başlayan en az bir gruba ait olan bir kişiyle eşleşecektir;
    • :addrbook:personal?label.ends-with=something adı “something” ile biten en az bir gruba ait olan bir kişiyle eşleşecektir;
    • :addrbook:personal?label.contains=something adı “something” içeren en az bir gruba ait olan bir kişiyle eşleşecektir.

Eşleşen e-postayla ilgili kriptografik bilgilere de erişebilirsiniz:

  • :addrbook:personal?keypinning=true güvenilmiş anahtarı olan bir kişiyle eşleşecektir. Değeri true yerine false olarak değiştirmek, güvenilmiş anahtara sahip olmayan bir kişiyle eşleşmesini sağlayacaktır;
  • :addrbook:personal?encryption=true şifrelemesi etkinleştirilmiş bir kişiyle eşleşecektir. Değeri true yerine false olarak değiştirmek, şifrelemesi ayarlanmamış veya kapatılmış bir kişiyle eşleşmesini sağlayacaktır;
  • :addrbook:personal?signing=true, imzalamanın açık olduğu bir kişiyle eşleşir. “true” değerini “false” olarak değiştirmek, imzalamanın kapalı olduğu bir kişiyle eşleşmesini sağlar.
  • :addrbook:myself¹, kendinize ait olan her adresle eşleşir;
  • :addrbook:organization, üyesi olduğunuz kuruluştaki birine ait olan her adresle eşleşir;
  • :incomingdefaults:inbox, adresin izin verilenler listenizde olup olmadığını kontrol eder;
  • :incomingdefaults:spam, adresin engellenenler listenizde olup olmadığını kontrol eder.

Değişken eklentisiyle (bir sonraki paragrafta açıklanmıştır) birleştirildiğinde, eşleşen değişkenler değişecektir. Eşleşen ${0} değişkeni her zaman belirtilen listede yer alan son e-posta adresini içerecektir. Liste 1 numaralı notla işaretlenmişse, eşleşen ${1} değişkeni görüntülenecek adı içerecektir.

Örneğin, aşağıdaki listelerle aileniz veya beyaz listenizdeki biri dışındaki herkesten gelen e-postaları silecek bir süzgeç oluşturabilirsiniz:

require "extlists";  
# checks that the sender is not in the contact group Family, whilelisted or yourself
if not anyof(
    header :list "from" ":addrbook:personal?label=Family", 
    header :list "from" ":incomingdefaults:inbox",
    header :list "from" ":addrbook:myself"
) {    
  discard; # permanently delete the email
}

Bu koşul sağlanırsa, discard işlemi yürütülecektir. Bu işlem, e-postayı hemen ve kalıcı olarak siler. Ayrıca, discard yerine bir fileinto işlemi kullanarak e-postayı kolayca çöp kutusu klasörüne de taşıyabilirsiniz: fileinto “trash”;.

Değişken oluşturma

Bağlamı yönetirken kullanabileceğiniz başka bir yararlı araç da değişken tanımlamaktır. Değişken, içine yazı yerleştirebileceğiniz ve bir adla etiketleyebileceğiniz geçici bir depolama konumudur. Daha sonra, bu içeriği adıyla çağırarak yeniden kullanabilirsiniz. Örneğin, aşağıdaki gibi bir betiğiniz olabilir:

require ["reject", "variables"];
# First check who is the sender
if allof(
    address :is "from" "Kenny@northpark.example.com", 
    header :contains "subject" "mmph mmph"
) {
    # It's from Kenny!
    # Create the variable message containing 'mmph mmph'
    set "message" "mmph mmph";
} else {
    # Create the variable message containing 'Sorry, I don't want emails today!'
    set "message" "Sorry, I don't want emails today!";
}
# Then, reject the message
reject "${message}";

Bu betiğin amacı, gelen bir e-postayı özelleştirilmiş bir iletiyle reddetmektir. Orijinal e-posta kenny göndericisinden geliyorsa ve konusu ‘mmph mmph‘ ise, mmph mmph içeriğini barındıran ‘message‘ değişkeni oluşturulur. Diğer durumda ise ileti, ‘Sorry, I don’t want emails today!‘ şeklinde doldurulur. Ardından, son adımda bu değişkeni reject komutunda yeniden kullanırız.

Sieve değişkenleri yerleşik olarak tanımlamaz; bu nedenle değişkenler, betiğinizin başında dahil edilmesi gereken variables eklentisinde tanımlanır. Bir değişkeni tanımlamanın iki yolu vardır.

  • Bir değişkenin açıkça oluşturulması:

Bir değişken oluşturmak için set işlemi sağlanır.

require "variables";
# Create a variable called "labelname" and containing the string "Work".
set "labelname" "Work";

İlk dize değişkeninizin adı, ikincisi ise değişkeninizin değeridir. Dolayısıyla önceki örnek, labelname adında ve Work değerini içeren bir değişken oluşturur.

Bir değişken tanımlandıktan sonra, bir dize içine şu biçimi ekleyerek değişkeni çağırabilirsiniz: ${name} (burada name değişkeninizin adıdır). Yürütüldüğünde, bu ifade değişken değeriyle değiştirilir. (Değişkeni tanımlamadıysanız boş bir dizeyle değiştirilecektir.) Dolayısıyla, aşağıdaki betikte:

require "variables";
require "fileinto";
# Create a variable called "labelname" and containing the string "Work".
set "labelname" "Work";
# Move the email in "${foldername}/${labelname}" which becomes after variable resolution "/Work";
fileinto "${foldername}/${labelname}";

E-postanız /Work etiketiyle etiketlenecektir. labelname değişkenini daha önce tanımladığımız için bu değer Work ile değiştirilir. Ancak foldername tanımlanmadığından doğrudan kaldırılır.

  • Bir değişkenin örtük olarak atanması:

Değişkenlerin en ilginç kullanım örneği, :matches testinin kullanıldığı durumdur. E-posta göndericisinin test@proton.me olduğu aşağıdaki örneği ele alalım:

require "variables";
require "fileinto";
# do a matches test 
if header :matches "from" "*@*" {
    # The first * matches "test", the second "protonmail".  
    # Thus, the first matching variable contains "test"
    fileinto "${1}";
}

Değişkenler eklentisiyle birlikte kullanıldığında, bir match işleminin sonucu değişkenlerde depolanır. Sayısal adlara sahip birkaç değişken ayarlanacaktır. İlk olarak, 0 değişkeni tam eşleşmeyi içerecektir (örneğimizde bu, tam adres olan test@proton.me olacaktır). Ardından, ilk eşleşen grup 1 değişkenine atanacak (örneğimizde bu test olacaktır), ikinci eşleşen grup ikinci değişkene (proton.me) atanacak ve son eşleşen gruba kadar bu şekilde devam edecektir.

Örneğimizde, fileinto komutu yürütülür. Konum, bir değişken olarak tanınan ve bu nedenle yukarıda hesaplandığı üzere değeriyle değiştirilen ${1} olarak tanımlanır: test.

Düzenli ifade eşleşme gruplarını kullanarak bir :regex testinde de değişken atamanın mümkün olduğunu unutmayın.

Değişkenleri dönüştürme

Kullanışlı seçeneklerden biri de değişkenlerin dönüştürülmesidir. Bunun için set anahtar sözcüğü, değeri değişkene atamadan önce değiştirmek üzere kullanılabilecek bayrak kombinasyonlarıyla birlikte kullanılabilir.

  • :lower, bir değişken değerini küçük harfe dönüştürür;
  • :upper, bir değişken değerini büyük harfe dönüştürür;
  • :lowerfirst, değişken değerinin ilk harfini küçük harfe dönüştürür;
  • :upperfirst, değişken değerinin ilk harfini büyük harfe dönüştürür;
  • :quotewildcard, dizede yer alan tüm genel arama karakterlerini tırnak içine alır; böylece bunlar bir match (eşleşme) ifadesinde harfi harfine kullanılabilir;
  • :length, değerin uzunluğunu döndürür.

Tanımlanmış bir değişkeni başka bir set işleminde de yeniden kullanabileceğinizi unutmayın. Önceki örneklerimizi geliştirelim:

require "variables";
require "fileinto";
# Set labelname to WORK, and modify it to lowercase with the first letter in upper case 
set :lower :upperfirst "labelname" "WORK";
set :lower :upperfirst "foldername" "geneva";
# Create a variable that is a combination of foldername and labelname
set "location" "${foldername}/${labelname}";
fileinto "${location}";

Süzgeç, adım adım üç değişken oluşturacaktır. İlk set komutu labelname değişkenini oluşturur. Değişkenin içeriği Work şeklindedir. Nitekim orijinal WORK değeri, hem :lower hem de :upperfirst bayrakları kullanılarak dönüştürülür; harf büyüklüğü önce work, ardından da Work olarak değiştirilir.

İkinci set komutu, foldername adında ve Geneva dizesini içeren ikinci bir değişken oluşturacaktır. Nitekim :lower ve :upperfirst bayrakları kullanılmıştır.

Son olarak, location değişkeni oluşturulur. “${foldername}/${labelname}” değeri iki değişken içerir: foldername ve labelname. Böylece Sieve yorumlayıcısı bu değişkenleri değerleriyle değiştirecektir: Work and Geneva.

Son olarak, location değişkeni fileinto komutu için argüman olarak kullanılır. Böylece e-posta, adı location değişkeninin değeri olan klasöre taşınır: Work/Geneva.

Karşılaştırıcılar, eşleşen değişkenlere de uygulanabilir:

require "variables";
require "fileinto";
if address :all :matches "from" "*@*" {
    set :lower :upperfirst "fileintovar" "${1}";
    fileinto "${fileintovar}";
}

Burada, e-postanın göndericisi test@proton.me ise, e-posta Test etiketiyle işaretlenir.

Bir değişkenin değerini değiştirmenin başka bir yolu da vnd.proton.eval eklentisini kullanmaktır. Bu eklenti, bazı basit hesaplamalar yapmanıza olanak tanıyacak yeni :eval bayrağını tanımlar:

require "variables";
require "fileinto";
require "vnd.proton.eval";
# do a match test on the sender address
if header :matches "from" "*" {
    # create a variable called length, containing the length of the first     
    # matching variable
    set :length "length" "${1}"; 
    # Create a variable called fileintovar containing the result of the expression written below
    set :eval "fileintovar" "${length} * 25 - 1 / 8+3";
    fileinto "${fileintovar}";
}

Bu örnekte, e-postanın yine test@proton.me adresinden geldiği varsayıldığında, e-posta 478 değeriyle işaretlenir. Nitekim eşleşen ilk değişkenin uzunluğu 19’dur ve 19 * 25 – 1 / 8 + 3 işleminin sonucu yukarı yuvarlanarak 478 olur.

Bu ilk başta yararsız görünebilir, ancak bu eklenti diğer işlemlerle birleştirildiğinde daha anlamlı hale gelir.

Sieve dilinde diğer alanlarla karşılaştırma

Belirli üst bilgilerle eşleştirme yapmak da mümkündür. Örneğin listelere gönderilen tüm iletileri (bunlar genellikle pazarlama iletileri veya duyurulardır) yerleştirmek için şunu yapabilirsiniz:

require "fileinto";
# Filter all lists into the same folder
if exists "list-unsubscribe"
{
    fileinto "advertisements";
}

Sosyal medya e-postalarını kendi klasörlerine ayırmak için şöyle yazabilirsiniz:

require "fileinto";
# Filter all lists into the same folder
if anyof(exists "x-facebook", exists "x-linkedin-id") {
    fileinto "social";
} elsif exists "list-unsubscribe"
{
    fileinto "advertisements";
}

Şunu kullandığımızı unutmayın:

anyof(exists "x-facebook", exists "x-linkedin-id")

şunun yerine:

exists ["x-facebook", "x-linkedin-id"]

Çünkü ikincisi, hem x-facebook hem de x-linkedin-id ögelerinin ayarlanıp ayarlanmadığını kontrol eder.

Bir üst bilginin gerçekte hangi değeri içerdiğini görmek için header testini kullanabilirsiniz:

require "fileinto";
# Put all mails that have been sent without TLS/SSL into the same folder
if header :is "x-pm-transfer-encryption" "none" {
    fileinto "unencrypted";
}

Tam bir eşleşme gerçekleştiren :is işleminin yanı sıra header komutu; genel arama karakterlerini kullanarak eşleşen :matches işlemini (örneğin “*@*.com“, sonu .com ile biten tüm e-posta adresleriyle eşleşecektir) ve üst bilginin belirli bir dizeyi içerip içerermediğini kontrol eden :contains komutunu da destekler.

Sieve süzgeçleri tasarlamak için bir e-postanın üst bilgilerini edinmek yararlı olabilir. Bunu Proton Mail web arayüzünde yapmak için Diğer () → Üst bilgileri görüntüle adımlarına gidin. E-postanın tüm üst bilgilerini içeren yeni bir pencere açılacaktır.

Sieve içinde ileti boyutu kullanarak süzme

Büyük e-postaları küçük e-postalardan farklı şekilde ele almak mümkündür. Örneğin, e-posta kutusunda yer kazanmak amacıyla silmek üzere büyük e-postaları işaretlemek isteyebilirsiniz. Bu işlem aşağıdaki şekilde gerçekleştirilebilir:

require ["imap4flags"];
# Flag emails that probably have large attachments (> 2 MiB)
if size :over 2M # you can also use 2097152 if you want, they are synonymous
{
    addflag "\\Flagged";
}
# Automatically mark as read really small messages. They can't have much content anyway...
if size :under 1000
{
    addflag "\\Seen";
}

Gördüğünüz gibi, büyük boyutlar belirtmek isterseniz, sayının hemen ardına ilgili birimin harfini ekleyerek birimleri kullanabilirsiniz. Üç birim mevcuttur: K, bir kibioctet (veya 1024 bayt) için; M, bir mebioctet (veya 1 048 576 bayt) için ve G, bir gibioctet (veya 1 073 741 824 bayt) için.

Lütfen bu durumda “over” (üzerinde) ifadesinin daha büyük, “under” (altında) ifadesinin ise daha küçük anlamına geldiğini unutmayın. Bu durum, bir iletinin boyutu tam olarak 1000 baytsa, her ikisinin de

size :under 1000

ne de

size :over 1000

eşleşmeyecektir.

Sieve süzgeçlerinin asıl içeriğe erişimi olmadığını ve yalnızca şifrelenmiş boyutu gösterdiğini unutmayın.

İletiler üzerinde gelişmiş işlemler gerçekleştirme

Sieve içinde bir iletiye karşı farklı tepkiler yürütebilirsiniz. Önceki bölümlerde fileinto, addflag, discard ve reject işlemlerini zaten sunmuştuk. Burada daha gelişmiş işlemleri sunacağız.

Tatil iletileri ve tarih testleri

Sieve içindeki otomatik yanıt özelliğini, vacation komutunu kullanarak yineleyebilirsiniz. Aslında Ayarlarınızdaki otomatik yanıt özelliği işini yapmak için Sieve süzgecine dayanır. Ancak bir betik içindeki tatil seçeneklerini kullanarak otomatik yanıtlarınızı özelleştirmek için çok daha fazla seçeneğe sahip olursunuz. Örneğin, koşullara bağlı olarak özel iletiler hazırlayabilirsiniz. Not: Ayarlar’daki otomatik yanıt özelliğinde olduğu gibi, vacation işlemi yalnızca ücretli tarifelerde kullanılabilir.

vacation komutu, sizinle iletişime geçmeye çalışan herkese bir tatil yanıtı gönderir. Belirli bir zaman aralığında yanıt göndermek için genellikle currentdate veya date testleriyle birlikte kullanılır.

Colorado saatine göre 14 Temmuz 2017’den 14 Ağustos 2017’ye kadar tatile gideceğimi varsayalım. Bir otomatik yanıtlayıcı ayarlamak için aşağıdaki Sieve kodunu kullanabilirim:

require ["date", "vacation", "relational"];
if allof(currentdate :zone "US/Mountain" :value "ge" "date" "2017-07-14",
 currentdate :zone "US/Mountain" :value "le" "date" "2017-08-14")
{
    vacation "Queue you guys, I'm going on vacation.";
}

Bir vacation komutunun isteğe bağlı bağımsız değişkenlerinden bazıları :handle ve :days bağımsız değişkenleridir. Varsayılan olarak Sieve, zaman aşımı adı verilen belirli bir gün sayısı içinde aynı göndericiye birden fazla kez yanıt vermez. Bu durum, yanlışlıkla çok sayıda otomatik e-posta göndermenizi önler.

Zaman aşımını kontrol etmek için :days parametresini kullanabilirsiniz. :days bağımsız değişkeni, adreslerin tutulduğu ve yanıt verilmediği süreyi belirtmek için kullanılır ve her zaman gün cinsinden belirtilir. Bazen Sieve betiğinizde birden fazla vacation komutu bulunur ve her birinin en az bir kez yanıt gönderdiğinden (kural eşleşirse) emin olmanız gerekir. Bu durumda :handle seçeneği kullanılabilir. :handle bağımsız değişkeni, gönderilen yanıtın türünü tanımlayan bir dizedir.

Bunun nasıl çalıştığını görmek için bir öğretmen olduğunuzu varsayalım. Öğretmenler genellikle ödevleri e-posta ile alırlar. Bunları kendi klasörlerinde düzenlemek yararlıdır. Ayrıca, son teslim tarihinden sonra gelen teslimleri reddedebilirsiniz.

Böyle bir durumda, gerektiğinde yanıtların gönderildiğinden emin olmak için handle kullanmak isteyebilirsiniz:

require ["date", "vacation", "reject", "fileinto", "relational"];
if header :contains "subject" "Homework assignment 1"
{
    # remind people not to forget the attachments
    if size :under 5000
    {
        vacation :handle "Homework assignment 1 - missing attachment" "Your message size is really low. Please make sure you didn't forget to add the homework as an attachment.";
    }
   
    # check if the student made the deadline
    if  currentdate :zone "US/Mountain" :value "le" "date" "2017-06-12"
    {
        fileinto "Homework Assignment 1";
    } else {
        reject "Too late, you missed the deadline.";
    }
}
if header :contains "subject" "Homework assignment 2"
{
    # remind people not to forget the attachments
    if size :under 5000
    {
        vacation :handle "Homework assignment 2 - missing attachment" "Your message size is really low. Please make sure you didn't forget to add the homework as an attachment.";
    }
   
    # check if the student made the deadline
    if  currentdate :zone "US/Mountain" :value "le" "date" "2017-06-12"
    {
        fileinto "Homework Assignment 2";
    } else {
        reject "Too late, you missed the deadline.";
    }
}

Tatil yanıtı için izin verilen tüm bağımsız değişkenler, geçirilmesi gereken sırayla aşağıda listelenmiştir:

  • :days, otomatik yanıtlayıcının bir tatil iletisi gönderdikten sonra aynı göndericiye yanıt göndermekten kaçınması gereken gün sayısıdır
  • :subject, otomatik yanıtlayıcının göndericiye yanıt vermek için kullanması gereken bir ön ektir (varsayılan olarak oto). Örneğin, “Homework Assignment 2” konusu, “late: Homework Assignment 2” içeren bir yanıtı ancak :subject “late” geçirilirse alacaktır.
  • :mime, yanıtın ilk satırının belirli bir biçim kullandığını belirtir. Bu, göndericinin html iletileriyle yanıt vermesini sağlar. Örneğin, bir html yanıtı yazmak için :mime bağımsız değişkenini geçirin ve yanıtın ilk satırına Content-Type : text/html yazın.
  • :handle, gönderilen yanıtın türünü tanımlayan bir dizedir.

Lütfen :zone parametresinin (currentdate içindeki) isteğe bağlı bir parametre olduğunu ve ayarlanmaması durumunda sunucunun yerel saatini (Proton Mail durumunda Cenevre, İsviçre) kullanacağını unutmayın.

Bölge parametresi, UTC+1 anlamına gelen “+0100” biçimindeki dize olan saat dilimi farklarını ve ICANN veritabanındaki gerçek saat dilimlerini kabul eder (bkz. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones(yeni pencere)). Son seçenek, her saat diliminin yaz saati uygulamasını da kodladığından (standart olmayan bir Sieve yöntemi olsa da) genellikle daha kullanışlıdır.

Normal :is/ :contains/ :matches parametresini kullanarak tarihleri karşılaştırabilirsiniz. Örneğin, aşağıdaki Sieve komutu Temmuz 2017’deki herhangi bir tarihle eşleşir:

currentdate :zone "US/Mountain" :matches "date" "2017-07-??"

Ancak çoğu durumda :value parametresi çok daha kullanışlıdır.

Geçirmeniz gereken son parametre biçimdir. Biçim ayrıca tarihin hangi bölümünü karşılaştırmak istediğinizi de kodlar. Verilen örnekte date (tarih) biçimini kullandık. Desteklenen tüm biçimler şunlardır:

  • year, “0000” ile “9999” biçiminde kodlanmış yıl
  • month, “01” ile “12” olarak kodlanmış ay
  • day, “01” ile “31” olarak kodlanmış gün
  • date, yyyy-mm-dd olarak kodlanmış tarih
  • hour, “00” ile “23” olarak kodlanmış saat
  • minute, “00” ile “59” olarak kodlanmış dakika
  • second, “00” ile “60” olarak kodlanmış saniye (60 bir artık saniyedir(yeni pencere), bilim insanları ne zaman gerekli görürse yalnızca 23:59:60’ta gerçekleşir)
  • time, hh:mm:ss olarak zaman
  • iso8601, ISO8601 standardına göre tarih ve saat, örneğin: 2005-08-15T15:52:01+00:00
  • std11, RFC2822 standardına göre tarih ve saat, örneğin: Mon, 15 Aug 2005 15:52:01 +0000
  • zone, +/-zzzz biçiminde saat dilimi farkı, örneğin +0000 veya -1200
  • julian, 17 Kasım 1858 UTC tarihinden bu yana geçen gün sayısı
  • weekday, Pazar 0’dan başlayıp Cumartesi 6’ya kadar olan haftanın günü

Son olarak, currentdate kullanmak yerine tarihi bir üst bilgiden almak da mümkündür. Bu tarih komutu, biçim dizesinden önce ek bir dize (üst bilgi adı) gerektirmesi dışında currentdate ile aynı şekilde çalışır. Örneğin:

date :zone "US/Mountain" :matches "received" "date" "2017-07-??"

Üst bilgilerin her zaman doğru olmayabileceğini lütfen unutmayın: Bir gönderici bunları istediği gibi değiştirebilir ve bu nedenle güvenilir değildirler.

Dikkate Alınması Gerekenler:

  1. Otomatik yanıtlayıcı; e-posta listeleri, başka bir otomatik yanıtlayıcı tarafından gönderilen e-postalar veya noreply adresinden gönderilen iletiler gibi otomatik olarak oluşturulan iletilere yanıt vermez.
  2. Tatil komutu farklı bir :handle parametresine sahip olmadıkça otomatik yanıtlayıcı, aynı e-posta adresine birden çok kez ileti göndermez.

Geçerlilik süresini yönetme

Proton Mail uygulamasının benzersiz bir özelliği, gönderilen iletilere bir geçerlilik süresi ayarlayabilme özelliğidir; bu süre sonunda ileti, alıcının e-posta kutusundan silinir.

Bir geçerlilik süresi ekleyerek gelen iletilerinizi yönetmek için de bu özelliği kullanabilirsiniz:

require "vnd.proton.expire"; 
# permanently delete all incoming and outgoing emails after 10 days
expire "day" "10";

Yukarıdaki betik, alınan tüm e-postaları 10 gün sonra silecektir. Tüm e-postalara uygulandığı için bu biraz aşırı bir durumdur. Bunun yerine, betiği yalnızca belirli bir e-posta kümesine uygulamak için muhtemelen bir koşul kullanmalısınız. Örneğin, kişilerinizde olmayan birinden gelen iletilerin geçerlilik süresini doldurabilirsiniz:

require ["extlists", "vnd.proton.expire"];
# permanently delete after 10 days any email not from me or from someone in my address book.
if not anyof(
    header :list "from" ":addrbook:personal",
    header :list "from" ":addrbook:myself"
) {
 expire "day" "10";
}

Not: Belirtilen geçerlilik süresi 730 günü aşarsa, otomatik olarak 730 günle sınırlandırılacaktır.

Sieve kısıtlamaları

Not etmeniz gereken birkaç Sieve kısıtlaması bulunmaktadır.

  • Gönderilen iletiler el ile veya süzgeçle Gelen Kutusu/Taslak klasörüne taşınamaz. Bu iletiler her zaman Gönderilmiş klasöründe ve kullanıcı ya da süzgeç tarafından uygulanan klasörlerde/etiketlerde kalır.
  • Alınan iletiler el ile veya süzgeçle Taslak/Gönderilmiş klasörüne taşınamaz.
  • Taslaklar el ile veya süzgeçle Gelen Kutusu/Gönderilmiş klasörüne taşınamaz.
  • İstenmeyen e-postadaki iletiler veya işlem sırasında istenmeyen e-posta olarak sınıflandırılan iletiler için otomatik yanıt/tatil iletileri göndermiyoruz. Bu tür bir özelliğe ihtiyaç duyuyorsanız, örneğin mySpam gibi özel bir klasör eklemeyi ve bunun bildirimlerini kapatmayı düşünebilirsiniz.
  • Otomatik yanıtlayıcı/tatil iletileri kısıtlamaları

Düzenli İfade Desteği Hakkında Not

Proton’un Sieve uygulaması, yalnızca minimum düzeyde düzenli ifade desteği sunan Sieve e-posta süzme standardını izler. \b (sözcük sınırı), \w (sözcük karakteri), \W (sözcük olmayan karakter) ve \d (rakam) gibi bazı yaygın düzenli ifade kısaltma söz dizimleri Sieve’de desteklenmez. Sonuç olarak, süzgeçlerde bu kısaltma karakterlerinin kullanılması, süzgeçlerin sessizce başarısız olmasına yol açabilir. Bu kısıtlama, platformlar arasında basitliği ve uyumluluğu önceliklendiren Sieve standardının kendisinden kaynaklanır. Tüm ayrıntılar için Sieve Düzenli İfadeler Taslak RFC belgesine bakabilirsiniz.

Desteklenen işlem ve testlerin listesi

Paketler

Sieve aşağıdaki eklentileri destekler. Daha fazla bilgi için resmi belgelere başvurabilirsiniz.

Tarih

  • Kullanım: date
  • Açıklama: (yeni pencere)Tarih bilgilerini kontrol etmenin bir yolunu sunar.
  • Belgeler: https://tools.ietf.org/html/rfc5260(yeni pencere)
  • Uygulama: Varsayılan karşılaştırıcı i;ascii-casemap değil, i;ascii-numeric’tir. Nitekim tarih, casemap karşılaştırıcısı ile kullanışlı değildir.
  • Ayrıca bakınız: Tatil iletileri ve Tarih testleri

Zarf

FileInto

  • Kullanım: fileinto
  • Açıklama: Bir iletiye etiket uygular veya iletiyi bir klasöre taşır.
  • Belgeler: https://tools.ietf.org/html/rfc5228#section-4.1(yeni pencere)
  • Uygulama: Eğik çizgiler klasörlerin tam yolunu belirtir ve etiket adı eğik çizgi içeriyorsa kaçış karakteriyle kullanılmalıdır. Aşağıdaki seçenekler desteklenmektedir:
    • Work“: Bu, ‘Work’ adındaki etiket veya klasördür
    • Work/Project1“: Bu, ‘Work’ klasörünün içindeki ‘Project1’ alt klasörüdür
    • Work/Project1/Docs“: Bu, ‘Work’ klasörünün içindeki ‘Project1’ alt klasörünün içinde yer alan ‘Docs’ alt klasörüdür
    • Work/Misc\/Others“: Bu, ‘Work’ klasörünün içindeki ‘Misc/Others’ alt klasörüdür
  • Ayrıca bakınız: Başlarken

Imap4flags

Reject

Vacation

Variables

İlişkisel

  • Kullanım: relational
  • Açıklama: İlişkisel eşleştirme işleçleri sağlar.
  • Dokümantasyon: https://tools.ietf.org/html/rfc5231

Regex

  • Kullanım: regex
  • Açıklama: Düzenli ifade (regex) eşleştirme işleçlerini sağlar.
  • Dokümantasyon: https://tools.ietf.org/id/draft-ietf-sieve-regex-01.html

ASCII sayısal karşılaştırıcı

Dışarıda Depolanan Listeler

  • Kullanım: extlists
  • Açıklama: Kişi listelerine erişim sağlar.
  • Dokümantasyon: https://tools.ietf.org/html/rfc6134(yeni pencere)
  • Uygulama: Aşağıdaki listeler desteklenir
    • addrbook:personal : Kişisel kişi listesi. Aşağıdaki sorgular desteklenir:
      • label[.starts-with / .ends-with / .contains]=<group: string>: bir kişi grubuna yönelik işlem;
      • keypinning=<value: true / false> kişinin herkese açık anahtar tanımı;
      • encryption=<value: true / false> kişinin varsayılan şifrelemesi;
      • signing=<value: true / false>  kişinin varsayılan imzası.
    • :addrbook:myself Geçerli kullanıcıya ait adresler;
    • :addrbook:organization Geçerli kuruluşun üyelerine ait adresler;
    • :incomingdefaults:inbox İzin verilenler listesi
    • :incomingdefaults:spam Engellenenler listesi
  • Ayrıca bakınız: Kişi listenize erişme

Eval

  • Kullanım: vnd.proton.eval
  • Açıklama: Bir dize içinde verilen basit bir aritmetik fonksiyonu değerlendirir.
  • Dokümantasyon: Değişkenleri dönüştürme

Dahil Et (Include)

Geçerlilik Süresi

Testler

Currentdate

  • Kullanım:
currentdate [":zone" <time-zone: string>] [COMPARATOR] [MATCH-TYPE] <date-part: string> <key-list: string-list>

Tarih

  • Kullanım:
date [":zone" <time-zone: string> / ":originalzone"] [MATCH-TYPE] <header-name: string> <date-part: string> <key-list: string-list

HasFlag

  • Kullanım:
hasflag [MATCH-TYPE] [COMPARATOR] <list-of-flags: string-list>
  • Açıklama: Belirli bir iletinin belirli bir işarete sahip olup olmadığını sınar.
  • Paket: imap4flags
  • Ayrıca bakınız: Başlarken

Zarf

  • Kullanım:
envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <envelope-part: string-list> <key-list: string-list>

Adres·

  • Kullanım:
address [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <header-list: string-list> <key-list: string-list>

Üst Bilgi

  • Kullanım:
header [COMPARATOR] [MATCH-TYPE] <header-names: string-list> <key-list: string-list>

HasExpiration

  • Kullanım:
hasexpiration
  • Açıklama: Bir iletinin geçerlilik süresinin ayarlanıp ayarlanmadığını sınar.
  • Paket: vnd.proton.expire

Exists

  • Kullanım:
exists <header-names: string-list>

Geçerlilik Süresi

  • Kullanım:
expiration :comparator "i;ascii-numeric" [MATCH-TYPE] <unit: "day" / "minute" / "second"> <key-list: string-list>
  • Açıklama: İleti geçerlilik süresini verilen anahtarlarla karşılaştırır. Sınama, geçerlilik süresi dolmayan bir iletiye karşı çalıştırılırsa başarısız olur.
  • Paket: vnd.proton.expire

Size

  • Kullanım:
size <":over" / ":under"> <limit: number>

String

  • Kullanım:
string [MATCH-TYPE] [COMPARATOR] <source: string-list> <key-list: string-list>
  • Açıklama: Kaynak dizelerden herhangi birinin herhangi bir anahtarla eşleşip eşleşmediğini değerlendirir.
  • Paket: variables

Anyof

  • Kullanım:
anyof <tests: test-list>
  • Açıklama: Kendisine sağlanan sınamalar üzerinde mantıksal VEYA işlemi gerçekleştirir.
  • Paket: <varsayılan>
  • Ayrıca bakınız: Başlarken

Allof

  • Kullanım:
allof <tests: test-list>
  • Açıklama: Kendisine sağlanan sınamalar üzerinde mantıksal VE işlemi gerçekleştirir.
  • Paket: <varsayılan>
  • Ayrıca bakınız: Başlarken

Not

  • Kullanım:
not <test: test>
  • Açıklama: Verilen sınamanın sonucunu tersine çevirir.
  • Paket: <varsayılan>
  • Ayrıca bakınız: Başlarken

True

  • Kullanım:
true
  • Açıklama: Her zaman eşleşir.
  • Paket: <varsayılan>

False

  • Kullanım:
false
  • Açıklama: Asla eşleşmez.
  • Paket: <varsayılan>

İşlemler

Require

  • Kullanım:
require <packages: string-list>
  • Açıklama: Yöntemlerinin veya değişikliklerinin kullanılabilmesi için belirtilen bir eklentiyi yükler.
  • Paket: <varsayılan>
  • Ayrıca bakınız: Başlarken

FileInto

  • Kullanım:
fileinto <folder: string>
  • Açıklama: İşlenmekte olan iletiyi belirli bir klasöre taşır.
  • Paket: fileinto
  • Ayrıca bakınız: Başlarken

Addflag

  • Kullanım:
addflag <list-of-flags: string-list>
  • Açıklama: Belirtilen işareti işlenmekte olan iletiye ekler.
  • Paket: imap4flags
  • Ayrıca bakınız: Başlarken

Removeflag

  • Kullanım:
removeflag <list-of-flags: string-list>
  • Açıklama: Belirtilen işaretleri işlenmekte olan iletiden kaldırır.
  • Paket: imap4flags

Setflag

  • Kullanım:
setflag <list-of-flags: string-list>
  • Açıklama: İşlenmekte olan ileti üzerindeki tüm bayrakları kaldırır ve belirtilen bayrakları ayarlar.
  • Paket: imap4flags

Stop

  • Kullanım:
stop
  • Açıklama: Tüm Sieve süzgeçlerinin işlenmesini durdurur. Sonraki Sieve süzgeçleri çalıştırılmaz.
  • Paket: <varsayılan>

Return

  • Kullanım:
return
  • Açıklama: Mevcut Sieve süzgecinin işlenmesini durdurur. Sonraki Sieve süzgeçleri yine de çalıştırılır.
  • Paket: include

Set

  • Kullanım:
set [MODIFIER] <name: string> <value: string>
  • Açıklama: Belirtilen ad ile belirtilen değeri ilişkilendiren yeni değişkenler oluşturur.
  • Paket: variables
  • Ayrıca bakınız: Değişken oluşturma

Discard

  • Kullanım:
discard
  • Açıklama: Bu Sieve süzgecinin sonunda iletiyi yok sayar. Yok sayıldıktan sonra başka hiçbir Sieve süzgeci çalıştırılmaz.
  • Paket: <varsayılan>

Keep

  • Kullanım:
keep
  • Açıklama: Son yok sayma komutunu geri alır. Yalnızca aynı Sieve süzgecinde yer alıyorsa etkili olur. Herhangi bir yok sayma işlemi gerçekleştirilmemişse hiçbir şey yapmaz.
  • Paket: <varsayılan>

Reject

  • Kullanım:
reject <reason: string>
  • Açıklama: Göndericinin SMTP adresine nedeni belirten bir e-posta gönderir ve bu iletiyi anında yok sayar. keep komutu bu işlemi iptal etmeyecektir.
  • Paket: <varsayılan>
  • Bkz. Başlangıç, Tatil iletileri ve Tarih testleri

Expire

  • Kullanım:
expire <unit: "day" / "minute" / "second"> <value: string>

Unexpire

  • Kullanım:
unexpire
  • Açıklama: Bir iletinin geçerlilik süresini kaldırır.
  • Paket: vnd.proton.expire

Vacation

  • Kullanım:
vacation [":days" number] [":subject" string] [":mime"] [":handle" string] <reason: string>
  • Açıklama: Göndericinin SMTP adresine, belirtilen nedeni e-posta gövdesi olarak içeren bir otomatik yanıt gönderir.
  • Paket: vacation (ücretli hesap gerektirir)
  • Bkz. Tatil iletileri ve Tarih testleri

Geçerli Dış Liste

  • Kullanım:
valid_ext_list <ext-list-names: string-list>
  • Açıklama: Belirtilen tüm dış listelerin desteklenip desteklenmediğini ve geçerli olup olmadığını test eder.
  • Paket: extlists