095 – IMAP Sunucusundan E-postaları İndirip Sıkıştırılmış TGZ Dosyaları Olarak Saklama
Bu makalede, IMAP sunucusundan belirli e-posta klasörlerini indirip, her klasörü sıkıştırılmış .tgz
dosyaları olarak saklamayı öğreneceksiniz. Python kullanarak, bu işlemi gerçekleştiren bir komut dosyası yazacağız. Bu senaryo, e-posta yedeklemeleri yapmak veya belirli klasörleri arşivlemek isteyenler için oldukça faydalı olabilir. E-postalarınızı güvenli bir şekilde saklamak ve gerektiğinde kolayca erişebilmek için bu yöntemi kullanabilirsiniz.
Gereksinimler
- Python 3.x
- IMAP sunucusu erişim bilgileri (kullanıcı adı, şifre, sunucu adresi, port)
Adım 1: Gerekli Kütüphaneleri Yükleme
Öncelikle, gerekli Python kütüphanelerini yükleyin. Bu örnekte, imaplib
, argparse
, email
, re
, os
ve tarfile
modüllerini kullanacağız. Bu kütüphaneler Python’un standart kütüphaneleri arasında yer alır, dolayısıyla ek bir yükleme yapmanıza gerek yoktur. Bu kütüphaneler, IMAP sunucusuna bağlanma, e-postaları indirme, dosya işlemleri ve sıkıştırma işlemleri için gereklidir.
Adım 2: Python Komut Dosyasını Oluşturma
Aşağıda, e-postaları IMAP sunucusundan indirip sıkıştırılmış .tgz
dosyalarına dönüştüren Python komut dosyasını bulabilirsiniz. Bu komut dosyası, IMAP sunucusuna bağlanarak belirli klasörlerdeki e-postaları indirir ve her klasörü sıkıştırılmış bir dosya olarak saklar.
#!/usr/bin/env python # -*- coding:utf-8 -*- import imaplib import argparse import email import re import os import tarfile def sanitize_filename(filename): return re.sub(r'[^a-zA-Z0-9_\-\.]+', '_', filename) def fetch_emails_from_folder(mailbox, folder, local_folder): typ, data = mailbox.select(f'"{folder}"') if typ != 'OK': print(f"Klasör {folder} seçilemedi") return typ, data = mailbox.search(None, 'ALL') if typ != 'OK' or not data[0]: print(f"Klasör {folder} içinde arama yapılamadı veya klasör boş") return if not os.path.exists(local_folder): os.makedirs(local_folder) for num in data[0].split(): typ, data = mailbox.fetch(num, '(RFC822)') if typ != 'OK': print(f"Klasör {folder} içinde e-posta {num} getirilemedi") continue for response_part in data: if isinstance(response_part, tuple): msg = email.message_from_bytes(response_part[1]) if msg['Message-Id']: filename = sanitize_filename(msg['Message-Id']) else: subject = msg['Subject'] or 'no_subject' filename = f'no_message_id_{sanitize_filename(subject)}' filename = filename.strip() file_path = os.path.join(local_folder, f'{filename}.eml') try: with open(file_path, 'wb') as f: f.write(response_part[1]) except OSError as e: print(f"Dosya {file_path} yazılamadı: {e}") def compress_folder_to_tgz(local_folder, output_file): with tarfile.open(output_file, "w:gz") as tar: for root, _, files in os.walk(local_folder): for file in files: if file.endswith('.eml'): tar.add(os.path.join(root, file), arcname=os.path.relpath(os.path.join(root, file), local_folder)) def main(): argparser = argparse.ArgumentParser(description="Belirtilen IMAP klasörlerini ayrı .eml dosyalarına dök ve bunları ayrı .tgz dosyalarına sıkıştır") argparser.add_argument('-s', dest='host', help="IMAP sunucusu, örn: imap.yourdomain.com", required=True) argparser.add_argument('-u', dest='username', help="IMAP kullanıcı adı", required=True) argparser.add_argument('-p', dest='password', help="IMAP şifresi", required=True) argparser.add_argument('-l', dest='local_folder', help=".eml dosyalarının kaydedileceği yerel klasör", default='.') argparser.add_argument('--port', dest='port', type=int, help="IMAP port numarası", required=True) argparser.add_argument('--use_ssl', dest='use_ssl', action='store_true', help="IMAP bağlantısı için SSL kullan") args = argparser.parse_args() try: if args.use_ssl: mailbox = imaplib.IMAP4_SSL(args.host, port=args.port) else: mailbox = imaplib.IMAP4(args.host, port=args.port) mailbox.login(args.username, args.password) işlenecek_klasörler = ['Inbox', 'Sent Items'] for folder in işlenecek_klasörler: folder_local_path = os.path.join(args.local_folder, sanitize_filename(folder)) fetch_emails_from_folder(mailbox, folder, folder_local_path) output_tgz = f"{folder_local_path}.tgz" compress_folder_to_tgz(folder_local_path, output_tgz) print(f"Klasör {folder}, başarıyla {output_tgz} dosyasına sıkıştırıldı") mailbox.logout() except Exception as e: print(f"Bir hata oluştu: {e}") if __name__ == "__main__": main()
Adım 3: Komut Dosyasını Çalıştırma
Bu komut dosyasını çalıştırmak için terminal veya komut istemcisine aşağıdaki komutu girin:
python test.py -s imap.domain.com -u kullanici@domain.com -p parola -l ./kullanici --port 993 --use_ssl Imap bağlantısında SSL kullanmadan giriş yapmak istiyorsanız aşağıdaki komutu girin: python test.py -s imap.domain.com -u kullanici@domain.com -p parola -l ./kullanici --port 143
Bu komut ile:
imap.domain.com
: IMAP sunucu adresi[email protected]
: IMAP kullanıcı adıparola
: IMAP şifresi./kullanici
: .eml dosyalarının kaydedileceği yerel klasör--port 993
: IMAP SSL portu--use_ssl
: IMAP bağlantısında SSL kullanımı
Bu komut dosyası, belirtilen IMAP sunucusuna bağlanarak “Inbox” ve “Sent Items” klasörlerini indirir ve her klasörü ayrı .tgz dosyalarına sıkıştırır. Bu sayede e-postalarınızı kolayca yedekleyebilir ve arşivleyebilirsiniz. E-postalarınızı sıkıştırılmış dosyalar halinde saklamak, hem depolama alanından tasarruf sağlar hem de e-postalarınıza daha hızlı erişim imkanı sunar.
Detaylı Açıklamalar ve Ek Bilgiler
IMAP Nedir?
IMAP (Internet Message Access Protocol), e-posta sunucularına erişim sağlamak için kullanılan bir protokoldür. IMAP, e-postalarınızı sunucuda saklar ve farklı cihazlardan erişim sağlar. Bu sayede, e-postalarınıza her yerden ve her cihazdan ulaşabilirsiniz. IMAP, e-postalarınızı organize etmenize ve klasörler halinde saklamanıza olanak tanır.
Python Kütüphaneleri
imaplib
: IMAP sunucusuna bağlanmak ve e-postaları indirmek için kullanılır.argparse
: Komut satırı argümanlarını işlemek için kullanılır.email
: E-posta mesajlarını işlemek ve analiz etmek için kullanılır.re
: Düzenli ifadelerle metin işlemek için kullanılır.os
: Dosya ve dizin işlemleri için kullanılır.tarfile
: Dosyaları sıkıştırmak ve arşivlemek için kullanılır.
Komut Dosyasının Çalışma Mantığı
- Bağlantı Kurma: IMAP sunucusuna bağlanmak için kullanıcı adı, şifre ve sunucu adresi gibi bilgileri kullanır.
- Klasör Seçimi: Belirtilen klasörleri seçer ve içindeki e-postaları arar.
- E-postaları İndirme: E-postaları indirir ve yerel klasörde
.eml
dosyaları olarak saklar. - Sıkıştırma: İndirilen e-postaları sıkıştırılmış
.tgz
dosyalarına dönüştürür. - Çıkış: İşlem tamamlandığında IMAP sunucusundan çıkış yapar.
Güvenlik ve Dikkat Edilmesi Gerekenler
- Şifre Güvenliği: IMAP şifrenizi güvenli bir şekilde saklayın ve paylaşmayın.
- SSL Kullanımı: IMAP bağlantısında SSL kullanarak verilerinizi şifreleyin ve güvenli bir bağlantı sağlayın.
- Yedekleme: E-postalarınızı düzenli olarak yedekleyin ve sıkıştırılmış dosyaları güvenli bir yerde saklayın.
Bu makalede, IMAP sunucusundan e-postaları indirip sıkıştırılmış .tgz
dosyaları olarak saklamayı öğrendiniz. Python kullanarak bu işlemi gerçekleştiren bir komut dosyası yazdık ve adım adım nasıl çalıştırılacağını açıkladık. Bu yöntemle e-postalarınızı güvenli bir şekilde yedekleyebilir ve arşivleyebilirsiniz.