📧 email

SMTP/IMAP Email Client - E-posta Gönderme ve Alma

~450 satır ~30 fonksiyon SMTP/IMAP

📖 Genel Bakış

Email modülü, SMTP ve IMAP protokolleri ile e-posta gönderme ve alma işlevleri sağlar. HTML içerik, dosya ekleri, SSL/TLS güvenliği ve çoklu alıcı desteği sunar.

🔑 Temel Özellikler

🚀 Hızlı Başlangıç

içe_aktar email

// Basit e-posta gönder
email.quick_send(
    smtp_server: "smtp.gmail.com",
    port: 587,
    username: "your-email@gmail.com",
    password: "your-password",
    from: "sender@example.com",
    to: "recipient@example.com",
    subject: "Test Email",
    body: "Hello, this is a test email!"
)?

io.println("E-posta gönderildi!")

📦 Email Oluşturma

// Email objesi oluştur
değişken mail = email.new()

// Başlık bilgileri
mail.set_from("sender@example.com")
mail.add_to("recipient1@example.com")
mail.add_to("recipient2@example.com")
mail.add_cc("cc@example.com")
mail.add_bcc("bcc@example.com")
mail.set_subject("İş Toplantısı")

// İçerik
mail.set_text_body("Merhaba,\n\nToplantı 14:00'te başlayacak.")

// Dosya eki
mail.add_attachment("document.pdf", "path/to/document.pdf")?

💡 Örnek 1: HTML Email Gönderme

içe_aktar email

fonksiyon send_welcome_email(user_email: yazı, user_name: yazı) -> Sonuç[Hiçbir, Hata] yap
    // HTML içerik
    değişken html_body = "
        <html>
        <head>
            <style>
                body { font-family: Arial, sans-serif; }
                .header { background: #4CAF50; color: white; padding: 20px; }
                .content { padding: 20px; }
                .button { background: #008CBA; color: white; padding: 10px 20px;
                         text-decoration: none; border-radius: 5px; }
            </style>
        </head>
        <body>
            <div class='header'>
                <h1>Hoş Geldiniz, {}!</h1>
            </div>
            <div class='content'>
                <p>BERK platformuna katıldığınız için teşekkürler.</p>
                <p>Hesabınızı aktive etmek için aşağıdaki butona tıklayın:</p>
                <p>
                    <a href='https://example.com/activate' class='button'>
                        Hesabı Aktive Et
                    </a>
                </p>
            </div>
        </body>
        </html>
    ".formatla(user_name)
    
    // SMTP setup
    değişken smtp = email.smtp_new(yap
        server: "smtp.gmail.com",
        port: 587,
        username: "noreply@example.com",
        password: "app-password",
        use_tls: doğru
    son)
    
    // Email oluştur
    değişken mail = email.new()
    mail.set_from("noreply@example.com")
    mail.add_to(user_email)
    mail.set_subject("Hoş Geldiniz - Hesabınızı Aktive Edin")
    mail.set_html_body(html_body)
    
    // Alternative plain text
    mail.set_text_body("Hoş geldiniz! Hesabınızı aktive etmek için: https://example.com/activate")
    
    // Gönder
    smtp.send(mail)?
    smtp.disconnect()
    
    dön Tamam(Hiçbir)
son

fonksiyon ana() yap
    send_welcome_email("user@example.com", "Ahmet Yılmaz")?
    io.println("Hoş geldin e-postası gönderildi!")
son

💡 Örnek 2: Toplu Email Gönderme (Newsletter)

içe_aktar email, fs, csv

fonksiyon send_newsletter(subscribers_file: yazı, template_file: yazı) -> Sonuç[sayı, Hata] yap
    // Email template oku
    değişken template = fs.read_to_string(template_file)?
    
    // SMTP bağlantısı
    değişken smtp = email.smtp_new(yap
        server: "smtp.mailgun.org",
        port: 587,
        username: "postmaster@example.com",
        password: "mailgun-api-key",
        use_tls: doğru
    son)
    
    smtp.connect()?
    
    // Abone listesi oku
    değişken subscribers = csv.read_file(subscribers_file)?
    değişken sent_count = 0
    
    her subscriber içinde subscribers için yap
        değişken email_addr = subscriber["email"]
        değişken name = subscriber["name"]
        
        // Template'i kişiselleştir
        değişken body = template
            .replace("{name}", name)
            .replace("{email}", email_addr)
        
        // Email gönder
        değişken mail = email.new()
        mail.set_from("newsletter@example.com")
        mail.add_to(email_addr)
        mail.set_subject("BERK v1.0.0 Yayınlandı! 🎉")
        mail.set_html_body(body)
        
        dene yap
            smtp.send(mail)?
            sent_count += 1
            io.println("✓ Gönderildi: {}", email_addr)
        yakala e yap
            io.eprintln("✗ Başarısız: {} - {}", email_addr, e)
        son
        
        // Rate limiting (saniyede 5 email)
        thread.sleep_ms(200)
    son
    
    smtp.disconnect()
    dön Tamam(sent_count)
son

fonksiyon ana() yap
    eşle send_newsletter("subscribers.csv", "newsletter_template.html") yap
        Tamam(count) => io.println("Newsletter gönderildi: {} abone", count),
        Hata(e) => io.eprintln("Hata: {}", e)
    son
son

💡 Örnek 3: IMAP Email Okuma

içe_aktar email

fonksiyon check_new_orders() -> Sonuç[Vektör[Order], Hata] yap
    // IMAP bağlantısı
    değişken imap = email.imap_new(yap
        server: "imap.gmail.com",
        port: 993,
        username: "orders@example.com",
        password: "app-password",
        use_ssl: doğru
    son)
    
    imap.connect()?
    
    // INBOX seç
    imap.select_folder("INBOX")?
    
    // Okunmamış mesajları getir
    değişken messages = imap.search("UNSEEN")?
    
    değişken orders = []
    
    her msg_id içinde messages için yap
        değişken msg = imap.fetch_message(msg_id)?
        
        // Subject'te "Order #" var mı kontrol et
        eğer msg.subject.contains("Order #") ise yap
            // Email body'den sipariş detaylarını parse et
            değişken order = parse_order_email(msg)?
            orders.ekle(order)
            
            // Mesajı okundu işaretle
            imap.mark_read(msg_id)?
            
            // Siparişler klasörüne taşı
            imap.move_message(msg_id, "Orders")?
            
            io.println("Yeni sipariş: #{}", order.order_id)
        son
    son
    
    imap.disconnect()
    dön Tamam(orders)
son

yapı Order yap
    order_id: yazı,
    customer_email: yazı,
    total_amount: kesir,
    items: Vektör[yazı]
son

fonksiyon parse_order_email(msg: email.Message) -> Sonuç[Order, Hata] yap
    // Email body'den sipariş bilgilerini parse et
    değişken body = msg.text_body
    
    // Basitleştirilmiş parsing örneği
    değişken order_id = regex.find(body, r"Order #(\d+)")?.group(1)
    değişken amount_str = regex.find(body, r"Total: \$([0-9.]+)")?.group(1)
    
    dön Tamam(Order yap
        order_id: order_id,
        customer_email: msg.from,
        total_amount: amount_str.parse_float()?,
        items: []
    son)
son

fonksiyon ana() yap
    // Her 5 dakikada yeni siparişleri kontrol et
    döngü yap
        eşle check_new_orders() yap
            Tamam(orders) => yap
                eğer orders.uzunluk() > 0 ise yap
                    io.println("✓ {} yeni sipariş bulundu", orders.uzunluk())
                    // Process orders...
                son
            son,
            Hata(e) => io.eprintln("Email kontrolü başarısız: {}", e)
        son
        
        thread.sleep(300_000)  // 5 dakika
    son
son

💡 Örnek 4: Otomatik Rapor Emaili (Attachment ile)

içe_aktar email, time, fs

fonksiyon generate_daily_report() -> Sonuç[yazı, Hata] yap
    // Rapor oluştur
    değişken report = "
        Günlük Sistem Raporu - {}
        ========================
        
        Sistem Durumu: ✓ Normal
        İşlem Sayısı: 1,234
        Kullanıcı Sayısı: 567
        Hata Sayısı: 3
        
        Detaylar için ek dosyaya bakınız.
    ".formatla(time.now().format("%Y-%m-%d"))
    
    // Raporu dosyaya kaydet
    değişken filename = "report_{}.txt".formatla(time.now().format("%Y%m%d"))
    fs.write(filename, report)?
    
    dön Tamam(filename)
son

fonksiyon send_daily_report() -> Sonuç[Hiçbir, Hata] yap
    // Rapor oluştur
    değişken report_file = generate_daily_report()?
    
    // Email hazırla
    değişken mail = email.new()
    mail.set_from("system@example.com")
    mail.add_to("admin@example.com")
    mail.add_to("manager@example.com")
    mail.set_subject("Günlük Sistem Raporu - {}", time.now().format("%Y-%m-%d"))
    
    değişken body = "
        Merhaba,
        
        Günlük sistem raporunu ekte bulabilirsiniz.
        
        Herhangi bir sorun için lütfen sistem ekibiyle iletişime geçiniz.
        
        İyi çalışmalar,
        Otomatik Rapor Sistemi
    "
    mail.set_text_body(body)
    
    // Raporu ek olarak ekle
    mail.add_attachment("daily_report.txt", report_file)?
    
    // CSV formatında detaylı log ekle
    mail.add_attachment("transaction_log.csv", "logs/transactions.csv")?
    
    // SMTP ile gönder
    email.quick_send_with_attachments(
        smtp_server: "smtp.office365.com",
        port: 587,
        username: "system@example.com",
        password: "system-password",
        mail: mail
    )?
    
    io.println("Günlük rapor emaili gönderildi")
    dön Tamam(Hiçbir)
son

fonksiyon ana() yap
    // Her gün saat 09:00'da rapor gönder
    döngü yap
        değişken now = time.now()
        
        eğer now.hour() == 9 ve now.minute() == 0 ise yap
            send_daily_report()?
            thread.sleep(60_000)  // 1 dakika bekle (tekrar gönderme)
        son
        
        thread.sleep(30_000)  // 30 saniye
    son
son

⚙️ SMTP Konfigürasyonu

// Gmail
smtp_server: "smtp.gmail.com"
port: 587  // TLS
username: "your-email@gmail.com"
password: "app-specific-password"  // 2FA enabled accounts

// Outlook/Office365
smtp_server: "smtp.office365.com"
port: 587

// Yahoo
smtp_server: "smtp.mail.yahoo.com"
port: 587

// Custom SMTP
smtp_server: "mail.example.com"
port: 25   // Plain
port: 465  // SSL
port: 587  // TLS/STARTTLS

📬 IMAP Konfigürasyonu

// Gmail IMAP
imap_server: "imap.gmail.com"
port: 993  // SSL
use_ssl: doğru

// Outlook IMAP
imap_server: "outlook.office365.com"
port: 993

// Common IMAP Folders
"INBOX"      // Gelen kutusu
"Sent"       // Gönderilmiş
"Drafts"     // Taslaklar
"Trash"      // Çöp kutusu
"Spam"       // Spam

⚠️ Önemli Notlar

🔗 İlgili Modüller

← Tüm Modüller | Ana Sayfa