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
- SMTP client (e-posta gönderme)
- IMAP client (e-posta okuma)
- HTML ve plain text e-postalar
- File attachments (dosya ekleri)
- SSL/TLS ve STARTTLS desteği
- Multiple recipients (çoklu alıcı)
- CC ve BCC desteği
- MIME encoding
- Base64 attachment encoding
- Authentication (kimlik doğrulama)
🚀 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
- Gmail: 2FA aktifse "App Password" kullanın
- Rate Limiting: Toplu email için bekleme süresi ekleyin
- Attachments: Büyük dosyalar için boyut sınırına dikkat
- HTML Email: Inline CSS kullanın, external CSS desteklenmez
- SMTP Ports: 25 (plain), 465 (SSL), 587 (TLS)
- Error Handling: Ağ hatalarını yakalayın ve retry yapın
🔗 İlgili Modüller
http- HTTP clientnetwork- Socket operationscrypto- SSL/TLS encryptionencoding- Base64 encodingtemplate- Email template engine