Filter Sieve (filter khusus lanjutan)
- Membaca
- 33 mnt
- Kategori
- Menerima dan membaca email
Proton Mail menawarkan berbagai cara bagi pengguna untuk memfilter email secara otomatis dengan menyematkan tag atau menyortirnya ke dalam folder. Secara umum, ada tiga metode:
- Menambahkan pengirim ke Daftar Blokir dan Daftar Izin sehingga mereka selalu atau tidak pernah dimasukkan ke dalam folder spam;
- Membuat filter khusus menggunakan antarmuka interaktif Proton Mail;
- [Paling lanjutan] Membuat filter khusus di Sieve.
Dari metode-metode ini, membuat filter khusus di Sieve menawarkan keserbagunaan terbesar, tetapi juga lebih rumit untuk digunakan. Oleh karena itu, Sieve dianggap sebagai fitur lanjutan untuk pengguna dengan pengalaman teknis. Bagi sebagian besar pengguna, antarmuka interaktif sudah sesuai untuk membuat filter khusus yang dibutuhkan.
Daftar isi
Apa itu Sieve?
Sieve adalah bahasa pemrograman yang digunakan untuk memfilter email. Filter di Sieve dapat dibuat dengan menulis aturan sederhana. Misalnya, “Beri semua pesan dari Kyle label hijau”. Menggabungkan aturan-aturan ini dapat menciptakan sistem pemfilteran yang canggih.
Aturan Sieve dapat ditulis dari awal, diambil dari contoh seperti dalam artikel ini, atau menggunakan perangkat lunak yang mempermudahnya.
Bahkan, kini tersedia cara untuk membuat filter Sieve menggunakan antarmuka interaktif, yang menggunakan input untuk menghasilkan filter Sieve. Cara baik lainnya untuk mempelajari Sieve adalah dengan membuat filter menggunakan antarmuka interaktif dan menyunting filter tersebut di Sieve, karena antarmuka interaktif itu sendiri menggunakan bagian dari Sieve.
Sebagai contoh, bandingkan filter berikut yang dibuat menggunakan antarmuka interaktif…
… dengan kode untuk filter yang sama yang dilihat di Penyunting Sieve:
Artikel ini akan memperkenalkan Sieve dan menjelaskan cara menulis filter Sieve sendiri. Jika memerlukan informasi lebih lanjut tentang penggunaan Sieve, ada banyak tutorial lain secara daring yang dapat membantu. Jika memiliki pertanyaan tentang Sieve di Proton Mail yang tidak terjawab di halaman ini, hubungi tim Dukungan di sini.
Memulai
Untuk mulai membuat filter Sieve, masuk ke mail.proton.me(jendela baru), buka Pengaturan → Semua pengaturan → Proton Mail → Filter → Tambah filter Sieve.
Skrip Sieve terdiri dari daftar perintah. Pada sebagian besar skrip, ini dimulai dengan perintah require. Perintah require memuat ekstensi yang menyediakan fungsionalitas tertentu. Misalnya, untuk menetapkan label atau memasukkan pesan ke dalam folder, diperlukan perintah fileinto.
Untuk memuat perintah ini, cukup tulis:
require "fileinto";
Untuk memuat beberapa ekstensi, gunakan sebuah daftar:
require ["fileinto", "imap4flags"];
Dalam hal ini, imap4flags memuat ekstensi yang memungkinkan untuk menandai email sebagai sudah dibaca. Setelah perintah require, pengujian pada pesan masuk sering kali dilakukan. Hal ini dilakukan dengan menggabungkan if dan perintah lain seperti address atau header.
Terakhir, jika pengujian berhasil, tindakan dapat diterapkan pada pesan. Sebagai contoh, misalkan ingin memasukkan semua email dari pengirim tertentu ke dalam folder yang sama dan menandai email masuk tersebut sebagai sudah dibaca. Ini dapat ditulis sebagai:
require ["fileinto", "imap4flags"];
# I don't really like Spott
if address :is "from" "Spott.Tenerman@northpark.example.com"
{
addflag "\\Seen";
fileinto "enemies";
}Perhatikan bahwa tanda # menunjukkan komentar dan tidak ditafsirkan sebagai bagian dari skrip Sieve. Selain itu, folder atau label yang diatur (di sini enemies ) harus sudah ada: cara membuat folder dan label dapat dipelajari di sini. Setelah memasukkan filter ini, tekan tombol SIMPAN. Filter kini akan berjalan untuk setiap email masuk.
Tentu saja, memasukkan email dari beberapa pengirim ke dalam folder yang sama dapat dilakukan. Dalam hal ini, daftar string dapat diteruskan ke perintah address (string(jendela baru) adalah rangkaian karakter, dalam hal ini alamat email):
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";
}Perhatikan bahwa setiap kali string dapat diteruskan ke kondisi pengujian, biasanya daftar juga dapat diteruskan. Sistem kemudian akan mencoba menemukan kecocokan dengan mencoba salah satu string dalam daftar. Ini tidak berlaku untuk perintah seperti fileinto, addflag, dll.
Namun, Sieve lebih andal daripada sekadar menyusun ulang kotak surat. Sieve juga memungkinkan penolakan email dengan pesan tanggapan:
require "reject";
# Reject mails that spell my name wrong
if header :contains "subject" "Kyhel"
{
reject "My name is not Kyhel";
}Menggunakan pengujian
Menggabungkan pengujian di Sieve
Seperti yang ditunjukkan di bagian Memulai, pengujian dapat dilakukan menggunakan perintah if pada pesan masuk untuk menentukan apakah email harus dipengaruhi oleh perintah require.
Selain perintah if, ada perintah pengujian lain yang memungkinkan penyusunan skrip dengan cara yang sederhana.
Else
Perintah else memungkinkan untuk melakukan sesuatu ketika perintah if tidak menjalankan tindakannya. Contohnya adalah:
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";
}Di sini, email akan dipindahkan ke folder Kenny jika subjeknya persis mmph mmph. Dalam hal lain (yaitu ketika subjeknya tidak persis mmph mmph), email akan dipindahkan ke folder Understandable.
Elsif
Perintah elsif adalah singkatan dari else if. Seperti perintah else, perintah ini akan dijalankan jika kondisi if salah, tetapi hanya jika kondisi elsif benar. Jika elsif tidak benar, maka blok elsif atau else berikutnya yang akan dijalankan.
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";
}Perhatikan bahwa hanya salah satu blok dari if, elsif, atau else yang akan dijalankan dalam satu eksekusi.
Anyof
Terkadang, perlu menjalankan perintah ketika salah satu dari beberapa pengujian berhasil. Untuk itu, dapat menggunakan perintah anyof. Ini dilakukan dengan menulis anyof yang diikuti dengan tanda kurung buka ‘(’, pernyataan yang ingin diuji yang dipisahkan dengan koma, dan tanda kurung tutup ‘)’.
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";
}Skrip ini akan memasukkan pesan yang berasal dari kenny@northpark.example.com atau mengandung mmph mmph di baris subjek ke dalam folder Kenny.
Allof
Lawan dari anyof juga tersedia: allof. Perintah ini memungkinkan untuk menjalankan perintah hanya ketika semua syarat yang diberikan terpenuhi:
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";
}
Skrip ini akan memasukkan pesan yang berasal dari kenny@northpark.example.com dan mengandung mmph mmph di baris subjek ke dalam folder Kenny.
Not
Terakhir, terkadang perlu menerapkan perintah jika ada sesuatu yang tidak cocok. Menambahkan not di depan pernyataan akan memastikan hal tersebut terjadi:
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";
}Yang setara dengan:
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";
}Ini akan memasukkan semua email yang tidak mengandung real guitar di baris subjek ke dalam folder Young people.
Tentu saja semua pengujian ini dapat digabungkan. Misalnya, email dapat diberi bintang jika email tersebut tidak berasal dari Kenny dan tidak mengandung mmph mmph di subjek:
require ["fileinto", "imap4flags"];
if not anyof ( header :contains "subject" "mmph mmph",
address :is "from" "Kyhel.Broski@northpark.example.com" ) {
addflag "\\Flagged";
}Melakukan pengujian pada header
Dengan menggunakan perintah address, pengujian pada header alamat dapat dilakukan, seperti header from, to, dan sender. Berbagai bagian dari alamat email dapat diekstrak dengan menggunakan salah satu flag berikut:
- :localpart — bagian sebelum simbol at (@)
- :domain — bagian setelah simbol at (@)
- :all — seluruh alamat
Cuplikan berikut menjelaskan penggunaan perintah ini:
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";
}Singkatnya, skrip ini akan memasukkan semua yang dikirim dari domain northpark.example.com ke dalam PaperPeople dan springfield.example.com ke dalam YellowPeople.
Selain itu, dari domain mana pun email dikirim, jika bagian sebelum @ sama dengan chef (misalnya chef@example.com), pesan tersebut akan ditandai. Penggunaan menarik lainnya adalah menyimpan secara otomatis semua yang dikirim ke satu alamat ke dalam folder:
require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :localpart "to" "support"
{
fileinto "Support";
}Lanjutan
Perintah envelope memungkinkan untuk melakukan lebih banyak pengujian. Secara umum, pengujian address hanya mengambil nilai dari header. Namun, dalam sesi SMTP, alamat from yang berbeda dari yang ada di header dapat ditentukan.
Dalam antarmuka header Proton Mail, envelope-from setara dengan header return-path dan envelope-to setara dengan header x-original-to.
Dengan menggunakan perintah envelope, alamat to: dan from: yang sebenarnya dapat diambil dari envelope. Harap dicatat bahwa tidak ada kolom lain selain kedua kolom tersebut, sehingga sender tidak ada dalam perintah ini. Harap dicatat bahwa envelope berada dalam ekstensi dan oleh karena itu harus meminta (require) ekstensi ini terlebih dahulu.
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";
}Menggunakan komparator untuk mengevaluasi dua nilai
Ketika pengujian mengevaluasi dua nilai, penentuan cara perbandingan ini dilakukan dapat diatur menggunakan berbagai flag yang disebut comparators. Sebelumnya, dua komparator telah digunakan: :is dan :contains, yang memeriksa apakah string yang diberikan sama persis dengan nilai tertentu, dan apakah nilai tertentu mengandung string yang diberikan, seperti pada pengujian berikut.
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";
}Komparator :matches juga dapat digunakan untuk menentukan format yang lebih spesifik. Komparator ini akan membandingkan kedua nilai dari awal hingga akhir, sama seperti komparator :is. Namun, dalam kasus :matches, nilai yang ditentukan dapat mengandung nilai ? dan *. Tanda tanya akan mencocokkan satu karakter, dan bintang (disebut wildcard) akan mencocokkan nol atau lebih karakter.
Dengan format ini, pengujian ini dapat dibuat:
require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph*" {
addflag "\\Flagged";
}Dalam contoh ini, pengujian akan berhasil jika subjek pesan dimulai dengan mmph dan kemudian mengandung karakter apa pun setelahnya. Dengan kata lain, email akan ditandai ketika subjek dimulai dengan ‘mmph’. ‘mmph mmph’ dan ‘mmph mmph Hello’ keduanya akan cocok; ‘Hello mmph’ dan ‘Springfield sales’ tidak.
Bintang juga dapat digunakan di tengah nilai dan beberapa kali, sebagai berikut:
require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph *mmph *mmph" {
addflag "\\Flagged";
}Pengujian ini akan cocok jika subjek dimulai dengan ‘mmph ’ (dengan spasi), mengandung ‘mmph ’ lainnya (dengan spasi), dan diakhiri dengan ‘mmph’ (tanpa spasi). Subjek yang cocok adalah ‘mmph mmph mmph’, ‘mmph mmph mmphmmph’ atau ‘mmph is mmph and mmph’.
Komparator :matches ini dapat sangat berguna untuk perbandingan alamat. Seperti yang diketahui, Proton Mail memiliki beberapa domain: protonmail.com dan proton.me. Jika ingin memeriksa apakah suatu pesan berasal dari pengguna Proton Mail, skrip ini dapat digunakan:
require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :domain :matches "from" "protonmail.*"
{
fileinto "Internal";
}Jika karena alasan tertentu perlu mencocokkan karakter * atau ? secara persis, karakter tersebut dapat dikutip dengan menambahkan \\ sebelumnya: \\* akan mencocokkan bintang dan \\? akan mencocokkan tanda tanya.
Perlu dicatat bahwa ekstensi regex juga didukung, yang juga menentukan komparator :regex. Komparator ini adalah versi yang lebih presisi dari :matches, tetapi sangat kompleks. Untuk informasi lebih lanjut, silakan baca dokumentasi resmi(jendela baru).
Dalam beberapa kasus (seperti yang akan dijelaskan selanjutnya dalam artikel ini), nilai numerik mungkin perlu dibandingkan. Paket relational dibuat untuk penggunaan ini. Paket ini mendefinisikan komparator :value yang diikuti oleh tipe perbandingan.
Ini memungkinkan pemeriksaan apakah suatu nilai lebih besar dari (tipe perbandingan berupa “gt”), lebih besar dari atau sama dengan (“ge”), sama dengan (“eq”), kurang dari atau sama dengan (“le”), atau kurang dari (“lt”) nilai yang diberikan.
Saat membandingkan nilai numerik, paket comparator-i;ascii-numeric juga sangat berguna. Paket tersebut memberi tahu interpreter skrip bahwa konten string adalah angka, dan bukan string biasa. Ini dapat digunakan dengan menambahkan :comparator “i;ascii-numeric” pada pengujian.
Dengan semua informasi ini, skrip berikut dapat dibuat:
require ["fileinto", "relational", "comparator-i;ascii-numeric"];
if header :value "ge" :comparator "i;ascii-numeric" "subject" "2"
{
fileinto "Dummy example";
}Pengujian ini akan memindahkan pesan ke folder Dummy example jika subjek lebih besar atau sama dengan 2. Jika subjek bukan angka melainkan teks, pengujian akan gagal. Oleh karena itu, contoh ini terlihat sangat konyol, tetapi dimaksudkan untuk digunakan dalam kombinasi dengan ekstensi lain seperti date, yang akan dijelaskan kemudian dalam artikel ini.
Perbandingan menggunakan konteks di Sieve
Informasi terkait akun dan konteks Proton Mail secara umum juga dapat diakses menggunakan ekstensi. Misalnya, pemeriksaan dapat dilakukan untuk melihat apakah alamat pengirim ada di dalam daftar kontak.
Mengakses daftar kontak
Daftar kontak dapat diakses menggunakan ekstensi extlists. Jika digabungkan dengan pengujian header, pemeriksaan apakah suatu kontak ada di dalam daftar kontak kemudian dapat dilakukan.
require ["fileinto", "extlists"];
# Checks that the sender is in your personal address book
if header :list "from" ":addrbook:personal?label=Family"
{
fileinto "Known";
}Pengujian ini akan menandai pesan dengan label Known jika pengirim terdapat dalam daftar :addrbook:personal?label=Family. Daftar tersebut dapat dibagi menjadi dua bagian. Pertama, :addrbook:personal berarti alamat tersebut ada di buku alamat pribadi. Kedua, label=Family mempersempit daftar lebih lanjut, yang menentukan bahwa selain berada di buku alamat, kontak tersebut juga harus termasuk dalam grup kontak Family. Jika diperlukan, label ini dapat diubah ke grup kontak lain. Penggunaan :addrbook:personal?label=Work dapat dilakukan jika diinginkan, dan dalam hal ini pengujian hanya akan berhasil jika pengirim ada di buku alamat dan di grup kontak Work.
Secara lebih umum, suatu daftar mematuhi Tag URI Scheme(jendela baru), dan parameter tambahan dapat ditambahkan untuk mempersempit filter. Daftar ini kemudian dapat digunakan sebagai berikut:
require ["fileinto", "extlists"];
# replace :your:list:here by the list you want to use
if header :list "from" ":your:list:here"
{
# some actions...
}Tersedia empat daftar yang berbeda:
- :addrbook:personal¹ memeriksa apakah alamat ada di daftar kontak. Daftar tersebut menerima parameter label yang cocok dengan grup kontak tertentu. Parameter ini dapat diturunkan dalam empat subversi:
- :addrbook:personal?label=something akan mencocokkan kontak yang berada dalam grup kontak “something”;
- :addrbook:personal?label.starts-with=something akan mencocokkan kontak yang termasuk dalam setidaknya satu grup yang dimulai dengan “something”;
- :addrbook:personal?label.ends-with=something akan mencocokkan kontak yang termasuk dalam setidaknya satu grup yang diakhiri dengan “something”;
- :addrbook:personal?label.contains=something akan mencocokkan kontak yang termasuk dalam setidaknya satu grup yang mengandung “something”.
Informasi kriptografi mengenai email yang cocok juga dapat diakses:
- :addrbook:personal?keypinning=true akan mencocokkan kontak yang memiliki kunci tepercaya. Mengubah true menjadi false akan mencocokkan kontak yang tidak memiliki kunci tepercaya;
- :addrbook:personal?encryption=true akan mencocokkan kontak yang enkripsinya diaktifkan. Mengubah true menjadi false akan mencocokkan kontak yang enkripsinya belum dikonfigurasi atau dinonaktifkan;
- :addrbook:personal?signing=true akan cocok dengan kontak yang penandatanganannya diaktifkan. Mengubah true menjadi false akan cocok dengan kontak yang penandatanganannya dinonaktifkan.
- :addrbook:myself¹ cocok dengan setiap alamat yang dimiliki sendiri;
- :addrbook:organization cocok dengan setiap alamat yang dimiliki oleh seseorang di organisasi tempat menjadi anggota;
- :incomingdefaults:inbox memeriksa apakah alamat tersebut ada di Daftar Izin;
- :incomingdefaults:spam memeriksa apakah alamat tersebut ada di Daftar Blokir.
Dipadukan dengan ekstensi variabel (dijelaskan dalam paragraf berikutnya), variabel yang cocok akan diubah. Variabel pencocokan ${0} akan selalu berisi alamat email terakhir yang ada di dalam daftar yang ditentukan. Jika daftar ditandai dengan catatan 1, variabel pencocokan ${1} akan berisi nama tampilan.
Sebagai contoh, dengan daftar di bawah ini, filter dapat dibuat untuk menghapus email yang diterima dari siapa pun selain keluarga atau seseorang di dalam daftar izin:
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
}Jika kondisi tersebut terpenuhi, tindakan discard akan dijalankan. Tindakan ini menghapus email segera dan secara permanen. Pemindahan ke folder sampah juga dapat dilakukan menggunakan tindakan fileinto alih-alih discard: fileinto “trash”;.
Membuat variabel
Alat berguna lainnya saat mengelola konteks adalah definisi variabel. Variabel adalah lokasi penyimpanan sementara untuk menaruh teks dan menandainya dengan nama. Nantinya, konten ini dapat digunakan kembali dengan memanggil namanya. Sebagai contoh, skrip berikut dapat digunakan:
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}";Tujuan dari skrip ini adalah untuk menolak email dengan pesan yang disesuaikan. Jika email asli berasal dari kenny dan subjeknya adalah ‘mmph mmph’, variabel ‘message’ akan dibuat, berisi mmph mmph. Pada kasus lain, pesan akan diisi dengan ‘Sorry, I don’t want emails today!’. Kemudian, pada langkah terakhir, variabel ini digunakan kembali dalam perintah reject.
Sieve tidak mendefinisikan variabel secara bawaan, sehingga variabel didefinisikan dalam ekstensi variables, yang harus dicantumkan di awal skrip. Ada dua cara untuk mendefinisikan variabel.
- Pembuatan variabel secara eksplisit:
Tindakan set disediakan untuk membuat variabel.
require "variables"; # Create a variable called "labelname" and containing the string "Work". set "labelname" "Work";
String pertama adalah nama variabel dan string kedua adalah nilai variabel. Jadi, contoh sebelumnya membuat variabel bernama labelname yang berisi Work.
Setelah variabel didefinisikan, variabel tersebut dapat dipanggil dengan menambahkan format berikut dalam string: ${name}, dengan name adalah nama variabel. Saat dijalankan, variabel ini akan diganti dengan nilai variabel. (Jika variabel belum didefinisikan, variabel tersebut akan diganti dengan string kosong.) Dengan demikian, dalam skrip berikut:
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}";Email akan ditandai dengan label /Work. Karena variabel labelname sudah didefinisikan, variabel tersebut diganti dengan Work. Namun, karena foldername belum didefinisikan, bagian tersebut akan dihapus.
- Penetapan variabel secara implisit:
Kasus penggunaan variabel yang paling menarik adalah saat menggunakan pengujian :matches. Mari simak contoh berikut, dengan pengirim email adalah test@proton.me:
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}";
}Saat digunakan dengan ekstensi variabel, hasil operasi match akan disimpan dalam variabel. Beberapa variabel akan diatur dengan nama numerik. Pertama, variabel 0 akan berisi kecocokan penuh (dalam contoh ini adalah alamat lengkap: test@proton.me). Kemudian, grup pencocokan pertama akan ditetapkan ke variabel 1 (dalam contoh ini adalah test), grup pencocokan kedua akan ditetapkan ke variabel kedua (proton.me), dan seterusnya hingga grup pencocokan terakhir.
Dalam contoh ini, perintah fileinto dijalankan. Lokasi didefinisikan sebagai ${1} yang dikenali sebagai variabel dan digantikan oleh nilainya, seperti yang dihitung di atas: test.
Perhatikan bahwa penetapan variabel juga dapat dilakukan dalam pengujian :regex, menggunakan grup pencocokan ekspresi reguler.
Mengubah variabel
Salah satu kemungkinan yang menarik adalah transformasi variabel. Untuk itu, kata kunci set dapat digunakan dengan kombinasi bendera (flag) yang dapat digunakan untuk mengubah nilai sebelum menetapkannya ke variabel.
- :lower akan mengubah nilai variabel menjadi huruf kecil;
- :upper akan mengubah nilai variabel menjadi huruf besar;
- :lowerfirst akan mengubah huruf pertama dari nilai variabel menjadi huruf kecil;
- :upperfirst akan mengubah huruf pertama dari nilai variabel menjadi huruf besar;
- :quotewildcard akan mengutip wildcard apa pun yang ada dalam string, sehingga dapat digunakan secara harfiah dalam pernyataan pencocokan;
- :length akan mengembalikan panjang nilai tersebut.
Perhatikan bahwa variabel yang telah didefinisikan juga dapat digunakan kembali dalam tindakan set lainnya. Mari kita tingkatkan contoh sebelumnya:
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}";Langkah demi langkah, filter akan membuat tiga variabel. Perintah set pertama akan membuat variabel labelname. Konten variabel tersebut adalah Work. Bahkan, nilai asli WORK diubah menggunakan bendera :lower dan :upperfirst, mengubah hurufnya menjadi work kemudian Work.
Perintah set kedua akan membuat variabel kedua bernama foldername yang berisi string Geneva. Dalam hal ini, bendera :lower dan :upperfirst digunakan.
Terakhir, variabel lokasi dibuat. Nilai “${foldername}/${labelname}” berisi dua variabel: foldername dan labelname. Jadi, penerjemah sieve akan mengganti variabel-variabel ini dengan nilainya: Work dan Geneva.
Terakhir, variabel lokasi digunakan sebagai argumen untuk perintah fileinto. Dengan demikian, email akan dipindahkan ke folder dengan nama yang merupakan nilai dari variabel lokasi: Work/Geneva.
Pembanding juga dapat diterapkan pada variabel pencocokan:
require "variables";
require "fileinto";
if address :all :matches "from" "*@*" {
set :lower :upperfirst "fileintovar" "${1}";
fileinto "${fileintovar}";
}Di sini, jika pengirim email adalah test@proton.me, email tersebut akan ditandai dengan label Test.
Cara lain untuk mengubah nilai variabel adalah dengan menggunakan ekstensi vnd.proton.eval. Ekstensi ini mendefinisikan bendera baru :eval, yang memungkinkan dilakukannya beberapa perhitungan sederhana:
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}";
}Dalam contoh ini, dan dengan tetap mengasumsikan email datang dari test@proton.me, email akan ditandai dengan nilai 478. Panjang variabel pencocokan pertama adalah 19, dan hasil dari 19 * 25 – 1 / 8 + 3 dibulatkan ke atas menjadi 478.
Hal ini mungkin tampak tidak berguna pada awalnya, tetapi ekstensi ini akan lebih terasa manfaatnya jika dikombinasikan dengan operasi lainnya.
Perbandingan terhadap kolom lain di Sieve
Pencocokan pada header tertentu juga dapat dilakukan. Misalnya, untuk menaruh semua pesan yang dikirim ke daftar (sering kali merupakan pesan pemasaran atau buletin), dapat dilakukan langkah berikut:
require "fileinto";
# Filter all lists into the same folder
if exists "list-unsubscribe"
{
fileinto "advertisements";
}Untuk menyortir email media sosial ke foldernya sendiri, dapat ditulis:
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";
}Perhatikan bahwa langkah yang digunakan adalah:
anyof(exists "x-facebook", exists "x-linkedin-id")
alih-alih:
exists ["x-facebook", "x-linkedin-id"]
Karena opsi yang terakhir memeriksa apakah x-facebook dan x-linkedin-id telah diatur.
Untuk melihat nilai sebenarnya yang terkandung dalam header, pengujian header dapat digunakan:
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";
}Selain operasi :is, yang melakukan pencocokan persis, perintah header juga mendukung :matches, yang mencocokkan menggunakan wildcard (mis. “*@*.com” akan cocok dengan alamat email apa pun yang berakhiran dot com), dan perintah :contains, yang memeriksa apakah header berisi string tertentu.
Untuk merancang filter Sieve, mengambil header email dapat sangat berguna. Untuk melakukan ini di antarmuka web Proton Mail, buka Lainnya (∨) → Lihat header. Jendela baru yang berisi semua header email akan terbuka.
Memfilter menggunakan ukuran pesan di Sieve
Email berukuran besar dapat diperlakukan secara berbeda dari email berukuran kecil. Misalnya, email berukuran besar mungkin ingin ditandai, agar dapat dihapus untuk menghemat ruang kotak surat. Hal ini dapat dilakukan dengan cara berikut:
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";
}Seperti yang terlihat, unit tersedia jika ingin menentukan ukuran besar, dengan menambahkan huruf yang sesuai dengan unit yang diharapkan tepat setelah angka. Tiga unit tersedia: K untuk kibioctet (atau 1.024 byte), M untuk mebioctet (atau 1.048.576 byte) dan G untuk gibioctet (atau 1.073.741.824 byte).
Harap dicatat bahwa “over” dalam hal ini berarti lebih besar dari, dan “under” berarti kurang dari. Ini berarti jika suatu pesan memiliki ukuran tepat 1.000 byte, maka baik
size :under 1000
maupun
size :over 1000
tidak akan cocok.
Perhatikan bahwa filter Sieve tidak memiliki akses ke konten sebenarnya dan hanya menampilkan ukuran yang terenkripsi.
Melakukan tindakan lanjutan pada pesan
Berbagai reaksi terhadap pesan dapat dijalankan di Sieve. Tindakan fileinto, addflag, discard, dan reject sudah diperkenalkan di bagian sebelumnya. Di sini akan disajikan tindakan yang lebih lanjutan.
Pesan liburan dan pengujian tanggal
Fitur balasan otomatis dapat direplikasi di Sieve menggunakan perintah vacation. Sebenarnya, fitur balasan otomatis di Pengaturan mengandalkan Sieve untuk menjalankan fungsinya. Namun dengan menggunakan opsi vacation di dalam skrip, ada lebih banyak kemungkinan untuk menyesuaikan balasan otomatis. Misalnya, pesan tertentu dapat disesuaikan tergantung pada syarat yang dipenuhi. Catatan: Sama seperti fitur balasan otomatis di Pengaturan, tindakan vacation hanya tersedia dalam paket berbayar.
Perintah vacation mengirimkan respons liburan kepada siapa pun yang mencoba menghubungi. Perintah ini sering kali dipadukan dengan pengujian currentdate atau date untuk mengirimkan respons dalam rentang waktu tertentu.
Misalkan sedang berlibur dari tanggal 14 Juli 2017 hingga 14 Agustus 2017 waktu Colorado. Kode Sieve berikut dapat digunakan untuk mengatur penjawab otomatis:
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.";
}Salah satu argumen opsional untuk perintah vacation adalah argumen :handle dan :days. Secara bawaan, Sieve tidak akan membalas beberapa kali ke pengirim yang sama dalam jumlah hari tertentu yang disebut timeout. Hal ini mencegah pengiriman email otomatis dalam jumlah banyak secara tidak sengaja.
Untuk mengontrol timeout, parameter :days dapat digunakan. Argumen :days digunakan untuk menentukan periode penyimpanan alamat dan tidak ditanggapi, serta selalu ditentukan dalam hitungan hari. Terkadang, terdapat beberapa perintah vacation di dalam skrip Sieve, dan perlu dipastikan bahwa masing-masing perintah tersebut mengirimkan balasan setidaknya sekali (jika aturan tersebut cocok). Dalam kasus tersebut, opsi :handle dapat digunakan. Argumen untuk :handle adalah string yang mengidentifikasi tipe respons yang dikirimkan.
Untuk melihat cara kerjanya, misalkan sebagai seorang guru. Guru sering menerima pengiriman tugas melalui email. Sangat berguna untuk menyortirnya ke dalam folder tersendiri. Selain itu, pengumpulan tugas yang melewati tenggat waktu dapat ditolak.
Dalam kasus seperti ini, handle dapat digunakan untuk memastikan balasan dikirim saat dibutuhkan:
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.";
}
}Berikut adalah semua argumen yang diizinkan untuk respons vacation, yang dicantumkan berdasarkan urutan pengiriman argumen:
- :days adalah jumlah hari bagi penjawab otomatis untuk menahan diri dari mengirimkan respons ke pengirim yang sama setelah mengirimkan pesan liburan
- :subject adalah awalan (secara bawaan adalah auto) yang harus digunakan oleh penjawab otomatis untuk membalas pengirim. Misalnya, “Homework Assignment 2” akan menerima balasan berupa “late: Homework Assignment 2” jika :subject “late” dikirimkan.
- :mime menunjukkan bahwa baris pertama respons menggunakan format tertentu. Hal ini memungkinkan pengirim untuk membalas dengan pesan HTML. Misalnya, untuk menulis respons HTML, kirimkan argumen :mime dan tulis Content-Type : text/html di baris pertama respons.
- :handle adalah string yang mengidentifikasi tipe respons yang dikirimkan.
Harap dicatat bahwa parameter :zone di currentdate adalah parameter opsional dan akan menggunakan waktu lokal server (Jenewa, Swiss, dalam hal Proton Mail) jika tidak diatur.
Parameter zone menerima perbedaan zona waktu, yaitu string dalam bentuk “+0100” yang berarti UTC+1, dan zona waktu sebenarnya dalam database ICANN (lihat https://en.wikipedia.org/wiki/List_of_tz_database_time_zones(jendela baru)). Opsi terakhir sering kali lebih berguna (meskipun bukan standar Sieve) karena opsi tersebut juga menyandikan waktu musim panas (daylight saving time) dari setiap zona waktu.
Perbandingan tanggal dapat dilakukan menggunakan parameter :is/ :contains/ :matches normal. Jadi misalnya, perintah Sieve berikut cocok dengan tanggal apa pun di bulan Juli 2017:
currentdate :zone "US/Mountain" :matches "date" "2017-07-??"
Namun dalam kebanyakan kasus, parameter :value jauh lebih berguna.
Parameter terakhir yang harus dikirimkan adalah formatnya. Format tersebut juga menyandikan bagian tanggal mana yang ingin dibandingkan. Dalam contoh yang diberikan, format tanggal telah digunakan. Semua format yang didukung adalah:
- year, tahun yang disandikan dalam format “0000” hingga “9999”
- month, bulan yang disandikan sebagai “01” hingga “12”
- day, hari yang disandikan sebagai “01” hingga “31”
- date, disandikan sebagai yyyy-mm-dd
- hour, jam yang disandikan sebagai “00” hingga “23”
- minute, menit yang disandikan sebagai “00” hingga “59”
- second, detik yang disandikan sebagai “00” hingga “60” (60 adalah detik kabisat(jendela baru), hanya terjadi pada pukul 23:59:60 saat ilmuwan menganggapnya perlu)
- time, waktu sebagai hh:mm:ss
- iso8601, tanggal dan waktu sesuai standar ISO8601, misalnya: 2005-08-15T15:52:01+00:00
- std11, tanggal dan waktu sesuai standar RFC2822, misalnya: Mon, 15 Aug 2005 15:52:01 +0000
- zone, perbedaan zona waktu dalam format +/-zzzz, misalnya +0000 atau -1200
- julian, Jumlah hari sejak 17 November 1858 UTC
- weekday, hari dalam sepekan mulai dari hari Minggu sebagai 0 hingga hari Sabtu sebagai 6
Terakhir, tanggal juga dapat diambil dari header alih-alih menggunakan currentdate. Perintah tanggal ini berfungsi dengan cara yang sama seperti currentdate, hanya saja memerlukan string tambahan sebelum string format: nama header. Misalnya:
date :zone "US/Mountain" :matches "received" "date" "2017-07-??"
Harap dicatat bahwa header tidak selalu akurat: pengirim dapat mengubahnya sesuka hati sehingga tidak dapat diandalkan.
Pertimbangan:
- Penjawab otomatis tidak merespons pesan yang dibuat secara otomatis seperti milis, email yang dikirim oleh penjawab otomatis lain, atau pesan yang dikirim oleh alamat noreply.
- Penjawab otomatis tidak akan mengirimkan pesan beberapa kali ke alamat email yang sama, kecuali jika perintah vacation memiliki :handle yang berbeda.
Mengelola kedaluwarsa
Salah satu fitur unik Proton Mail adalah kemampuan untuk mengatur waktu kedaluwarsa pada pesan terkirim, di mana pesan tersebut akan dihapus dari kotak surat penerima.
Fitur ini juga dapat digunakan untuk mengelola pesan masuk dengan menambahkan waktu kedaluwarsa:
require "vnd.proton.expire"; # permanently delete all incoming and outgoing emails after 10 days expire "day" "10";
Skrip di atas akan menghapus semua email yang diterima setelah 10 hari. Hal ini agak ekstrem karena berlaku untuk semua email. Sebaiknya gunakan syarat untuk menerapkan skrip hanya pada rangkaian email tertentu. Misalnya, dapat menerapkan kedaluwarsa pada pesan dari seseorang yang tidak ada di kontak:
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";
}Catatan: Jika waktu kedaluwarsa yang ditentukan melebihi 730 hari, waktu tersebut akan otomatis dibatasi hingga 730 hari.
Batasan Sieve
Ada beberapa batasan Sieve yang perlu diperhatikan.
- Pesan terkirim tidak dapat dipindahkan secara manual atau oleh filter ke Kotak Masuk/Draf. Pesan tersebut akan selalu berada di folder Terkirim dan folder/label yang diterapkan oleh pengguna atau filter.
- Pesan yang diterima tidak dapat dipindahkan secara manual atau oleh filter ke Draf/Terkirim.
- Draf tidak dapat dipindahkan secara manual atau oleh filter ke Kotak Masuk/Terkirim.
- Untuk pesan di Spam — atau pesan yang dimasukkan ke spam saat pemrosesan — pesan penjawab otomatis/liburan tidak akan dikirimkan. Jika memerlukan fitur seperti ini, pertimbangkan untuk menambahkan folder khusus — misalnya, mySpam — dan nonaktifkan notifikasi untuk folder tersebut.
- Batasan autoresponder/pesan liburan
Catatan tentang Dukungan Regular Expression
Implementasi Sieve Proton mengikuti standar pemfilteran email Sieve, yang hanya mencakup dukungan regular expression minimal. Beberapa sintaks singkat regular expression yang umum, seperti \b (batas kata), \w (karakter kata), \W (karakter non-kata), dan \d (digit), tidak didukung di Sieve. Akibatnya, penggunaan karakter singkat ini dalam filter dapat menyebabkan kegagalan tanpa peringatan. Batasan ini disebabkan oleh standar Sieve itu sendiri, yang mengutamakan kesederhanaan dan kompatibilitas di berbagai platform. Untuk rincian selengkapnya, lihat Draf RFC Regular Expression Sieve.
Daftar tindakan dan pengujian yang didukung
Paket
Sieve mendukung ekstensi berikut. Silakan merujuk ke dokumentasi resmi untuk informasi lebih lanjut.
Tanggal
- Penggunaan: date
- Deskripsi: (jendela baru)Menyediakan cara untuk memeriksa informasi tanggal.
- Dokumentasi: https://tools.ietf.org/html/rfc5260(jendela baru)
- Implementasi: Komparator bawaan adalah i;ascii-numeric dan bukan i;ascii-casemap. Memang, date tidak berguna dengan komparator casemap.
- Lihat: Pesan liburan dan pengujian Tanggal
Envelope
- Penggunaan: envelope
- Deskripsi: (jendela baru)Menentukan pengujian seputar envelope SMTP pesan.
- Dokumentasi: https://tools.ietf.org/html/rfc5228#section-5.4(jendela baru)
- Lihat: Perbandingan terhadap alamat di Sieve
FileInto
- Penggunaan: fileinto
- Deskripsi: Menerapkan label ke pesan atau memindahkannya ke folder.
- Dokumentasi: https://tools.ietf.org/html/rfc5228#section-4.1(jendela baru)
- Implementasi: Garis miring menunjukkan jalur lengkap folder dan harus diberi karakter escape jika nama label mengandung garis miring. Opsi berikut didukung:
- “Work“: ini adalah label atau folder yang disebut ‘Work’
- “Work/Project1“: ini adalah subfolder ‘Project1’ yang ada di dalam folder ‘Work’
- “Work/Project1/Docs“: ini adalah subfolder ‘Docs’ yang ada di dalam subfolder ‘Project1’ yang ada di dalam folder ‘Work’
- “Work/Misc\\/Others“: ini adalah subfolder ‘Misc/Others’ yang ada di dalam folder ‘Work’
- Lihat: Memulai
Imap4flags
- Penggunaan: imap4flags
- Deskripsi: Menerapkan tanda ke pesan.
- Dokumentasi: https://tools.ietf.org/html/rfc5232(jendela baru)
- Implementasi: Parameter daftar variabel tidak didukung. Gunakan ekstensi variables sebagai gantinya.
- Lihat: Memulai
Reject
- Penggunaan: reject
- Deskripsi: Menolak pesan dengan pesan tertentu.
- Dokumentasi: https://tools.ietf.org/html/rfc5429(jendela baru)
- Lihat: Memulai
Vacation
- Penggunaan: vacation
- Deskripsi: Mengirimkan pesan penjawab otomatis.
- Dokumentasi: https://tools.ietf.org/html/rfc5230(jendela baru)
- Lihat: Pesan liburan dan pengujian Tanggal
Variables
- Penggunaan: variables
- Deskripsi: Membuat dan menggunakan variabel.
- Dokumentasi: https://tools.ietf.org/html/rfc5229(jendela baru)
- Lihat: Membuat variabel
Relasional
- Penggunaan: relasional
- Deskripsi: Menyediakan operator pencocokan relasional.
- Dokumentasi: https://tools.ietf.org/html/rfc5231
Regex
- Penggunaan: regex
- Deskripsi: Menyediakan operator pencocokan regex.
- Dokumentasi: https://tools.ietf.org/id/draft-ietf-sieve-regex-01.html
Komparator numerik ASCII
- Penggunaan: comparator-i;ascii-numeric
- Deskripsi: Menyediakan perbandingan angka.
- Dokumentasi: https://tools.ietf.org/html/rfc5231(jendela baru)
Daftar yang Disimpan Secara Eksternal
- Penggunaan: extlists
- Deskripsi: Menyediakan akses ke daftar kontak.
- Dokumentasi: https://tools.ietf.org/html/rfc6134(jendela baru)
- Implementasi: Daftar berikut didukung
- addrbook:personal : Daftar kontak pribadi. Kueri berikut didukung:
- label[.starts-with / .ends-with / .contains]=<group: string>: operasi terhadap grup kontak;
- keypinning=<nilai: true / false> definisi kunci publik kontak;
- encryption=<nilai: true / false> enkripsi bawaan kontak;
- signing=<nilai: true / false> tanda tangan bawaan kontak.
- :addrbook:myself Alamat milik pengguna saat ini;
- :addrbook:organization Alamat milik anggota organisasi saat ini;
- :incomingdefaults:inbox Daftar Izin
- :incomingdefaults:spam Daftar Blokir
- addrbook:personal : Daftar kontak pribadi. Kueri berikut didukung:
- Lihat: Mengakses daftar kontak
Eval
- Penggunaan: vnd.proton.eval
- Deskripsi: Mengevaluasi fungsi aritmetika sederhana yang diberikan dalam string.
- Dokumentasi: Mengubah variabel
Include
- Penggunaan: include
- Deskripsi: Mengelola alur kerja Sieve.
- Dokumentasi: https://tools.ietf.org/html/rfc6609(jendela baru)
- Implementasi: Hanya node return yang didukung.
Kedaluwarsa
- Penggunaan: vnd.proton.expire
- Deskripsi: Mengelola masa kedaluwarsa pesan.
- Dokumentasi: Mengelola kedaluwarsa
Tes
Currentdate
- Penggunaan:
currentdate [":zone" <time-zone: string>] [COMPARATOR] [MATCH-TYPE] <date-part: string> <key-list: string-list>
- Deskripsi: Melakukan pengujian menggunakan tanggal saat ini pada server Proton Mail
- Paket: date
- Lihat: Daftar tindakan dan pengujian yang didukung
Tanggal
- Penggunaan:
date [":zone" <time-zone: string> / ":originalzone"] [MATCH-TYPE] <header-name: string> <date-part: string> <key-list: string-list
- Deskripsi: Melakukan pengujian menggunakan tanggal yang dijelaskan oleh header.
- Paket: date
- Lihat: Daftar tindakan dan pengujian yang didukung
HasFlag
- Penggunaan:
hasflag [MATCH-TYPE] [COMPARATOR] <list-of-flags: string-list>
- Deskripsi: Menguji apakah pesan tertentu memiliki flag tertentu.
- Paket: imap4flags
- Lihat: Mulai
Envelope
- Penggunaan:
envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <envelope-part: string-list> <key-list: string-list>
- Deskripsi: Menguji apakah bagian amplop SMTP yang ditentukan cocok dengan kunci yang ditentukan.
- Paket: envelope
- Lihat: Perbandingan terhadap alamat di Sieve – Lanjutan
Alamat·
- Penggunaan:
address [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <header-list: string-list> <key-list: string-list>
- Deskripsi: Menguji apakah header yang ditentukan yang diurai sebagai alamat cocok dengan kunci yang ditentukan.
- Paket: <bawaan>
- Lihat: Perbandingan terhadap alamat di Sieve
Header
- Penggunaan:
header [COMPARATOR] [MATCH-TYPE] <header-names: string-list> <key-list: string-list>
- Deskripsi: Menguji apakah header yang ditentukan cocok dengan kunci yang ditentukan.
- Paket: <bawaan>
- Lihat: Perbandingan terhadap kolom lainnya di Sieve
HasExpiration
- Penggunaan:
hasexpiration
- Deskripsi: Menguji apakah pesan memiliki waktu kedaluwarsa yang diatur.
- Paket: vnd.proton.expire
Exists
- Penggunaan:
exists <header-names: string-list>
- Deskripsi: Menguji apakah (semua) header yang ditentukan ada.
- Paket: <bawaan>
- Lihat: Perbandingan terhadap kolom lainnya di Sieve
Kedaluwarsa
- Penggunaan:
expiration :comparator "i;ascii-numeric" [MATCH-TYPE] <unit: "day" / "minute" / "second"> <key-list: string-list>
- Deskripsi: Membandingkan waktu kedaluwarsa pesan dengan kunci yang diberikan. Pengujian akan gagal jika dijalankan terhadap pesan yang tidak kedaluwarsa.
- Paket: vnd.proton.expire
Size
- Penggunaan:
size <":over" / ":under"> <limit: number>
- Deskripsi: Menguji apakah ukuran total pesan (termasuk lampiran) berada di atas atau di bawah batas tertentu.
- Paket: <bawaan>
- Lihat: Filter menggunakan ukuran pesan di Sieve
String
- Penggunaan:
string [MATCH-TYPE] [COMPARATOR] <source: string-list> <key-list: string-list>
- Deskripsi: Mengevaluasi apakah salah satu string sumber cocok dengan kunci apa pun.
- Paket: variables
Anyof
- Penggunaan:
anyof <tests: test-list>
- Deskripsi: Melakukan operasi logika OR pada pengujian yang diberikan padanya.
- Paket: <bawaan>
- Lihat: Memulai
Allof
- Penggunaan:
allof <tests: test-list>
- Deskripsi: Melakukan operasi logika AND pada pengujian yang diberikan padanya.
- Paket: <bawaan>
- Lihat: Mulai
Not
- Penggunaan:
not <test: test>
- Deskripsi: Membalikkan hasil dari pengujian yang diberikan.
- Paket: <bawaan>
- Lihat: Mulai
True
- Penggunaan:
true
- Deskripsi: Selalu cocok.
- Paket: <bawaan>
False
- Penggunaan:
false
- Deskripsi: Tidak pernah cocok.
- Paket: <bawaan>
Tindakan
Require
- Penggunaan:
require <packages: string-list>
- Deskripsi: Memuat ekstensi yang ditentukan sehingga metode atau modifikasinya dapat digunakan.
- Paket: <bawaan>
- Lihat: Memulai
FileInto
- Penggunaan:
fileinto <folder: string>
- Deskripsi: Memindahkan pesan yang sedang diproses ke folder tertentu.
- Paket: fileinto
- Lihat: Mulai
Addflag
- Penggunaan:
addflag <list-of-flags: string-list>
- Deskripsi: Menambahkan flag yang ditentukan ke pesan yang sedang diproses.
- Paket: imap4flags
- Lihat: Mulai
Removeflag
- Penggunaan:
removeflag <list-of-flags: string-list>
- Deskripsi: Menghapus flag yang ditentukan dari pesan yang sedang diproses.
- Paket: imap4flags
Setflag
- Penggunaan:
setflag <list-of-flags: string-list>
- Deskripsi: Menghapus semua bendera dan mengatur bendera yang ditentukan pada pesan yang sedang diproses.
- Paket: imap4flags
Stop
- Penggunaan:
stop
- Deskripsi: Menghentikan pemrosesan semua filter Sieve. Filter Sieve berikutnya tidak akan berjalan.
- Paket: <bawaan>
Return
- Penggunaan:
return
- Deskripsi: Menghentikan pemrosesan filter Sieve saat ini. Filter Sieve berikutnya akan tetap berjalan.
- Paket: include
Set
- Penggunaan:
set [MODIFIER] <name: string> <value: string>
- Deskripsi: Membuat variabel baru yang mengaitkan nama yang diberikan dan nilai yang diberikan.
- Paket: variables
- Lihat: Membuat variabel
Discard
- Penggunaan:
discard
- Deskripsi: Menghapus pesan di akhir filter Sieve ini. Setelah dihapus, tidak ada filter sieve lainnya yang akan dijalankan.
- Paket: <bawaan>
Keep
- Penggunaan:
keep
- Deskripsi: Membatalkan perintah hapus terakhir. Hanya akan berpengaruh jika berada di filter Sieve yang sama. Jika tidak ada perintah hapus yang dijalankan, maka ini tidak akan melakukan apa pun.
- Paket: <bawaan>
Reject
- Penggunaan:
reject <reason: string>
- Deskripsi: Mengirimkan email ke alamat SMTP pengirim dengan alasan tertentu dan langsung menghapus pesan ini. Perintah keep tidak akan membatalkan tindakan ini.
- Paket: <bawaan>
- Lihat: Memulai, Pesan liburan dan pengujian Tanggal
Expire
- Penggunaan:
expire <unit: "day" / "minute" / "second"> <value: string>
- Deskripsi: Membuat pesan kedaluwarsa setelah waktu yang ditentukan.
- Paket: vnd.proton.expire
- Lihat: Mengelola masa kedaluwarsa
Unexpire
- Penggunaan:
unexpire
- Deskripsi: Menghapus waktu kedaluwarsa suatu pesan.
- Paket: vnd.proton.expire
Vacation
- Penggunaan:
vacation [":days" number] [":subject" string] [":mime"] [":handle" string] <reason: string>
- Deskripsi: Mengirimkan balasan otomatis ke alamat SMTP pengirim dengan alasan yang ditentukan sebagai isi pesan.
- Paket: vacation (memerlukan akun berbayar)
- Lihat: Pesan liburan dan pengujian Tanggal
Valid External List
- Penggunaan:
valid_ext_list <ext-list-names: string-list>
- Deskripsi: Menguji apakah semua daftar eksternal yang diberikan didukung dan valid.
- Paket: extlists



