SMTP/IMAP Email Client - E-posta Gönderme and Alma
~450 lines
~30 function
SMTP/IMAP
📖 Overview
Email modülü, SMTP and IMAP protokolleri ile e-posta gönderme and alma işlevleri sağlar. HTML içerik, dosya ekleri, SSL/TLS güvenliği and çoklu alıcı desteği sunar.
🔑 Key Features
- SMTP client (e-posta gönderme)
- IMAP client (e-posta okuma)
- HTML and plain text e-postalar
- File attachments (dosya ekleri)
- SSL/TLS and STARTTLS desteği
- Multiple recipients (çoklu alıcı)
- CC and BCC desteği
- MIME encoding
- Base64 attachment encoding
- Authentication (kimlik doğrulama)
🚀 Quick Start
import 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 createma
// Email objesi create
let 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")?
💡 Example 1: HTML Email Gönderme
import email
function send_welcome_email(user_email: str, user_name: str) -> Result[None, Error] do
// HTML içerik
let 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 for teşekkürler.</p>
<p>Hesabınızı aktive etmek for 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
let smtp = email.smtp_new(do
server: "smtp.gmail.com",
port: 587,
username: "noreply@example.com",
password: "app-password",
use_tls: true
end)
// Email create
let 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 for: https://example.com/activate")
// Gönder
smtp.send(mail)?
smtp.disconnect()
return Ok(None)
end
function main() do
send_welcome_email("user@example.com", "Ahmet Yılmaz")?
io.println("Hoş geldin e-postası gönderildi!")
end
💡 Example 2: Toplu Email Gönderme (Newsletter)
import email, fs, csv
function send_newsletter(subscribers_file: str, template_file: str) -> Result[int, Error] do
// Email template oku
let template = fs.read_to_string(template_file)?
// SMTP bağlantısı
let smtp = email.smtp_new(do
server: "smtp.mailgun.org",
port: 587,
username: "postmaster@example.com",
password: "mailgun-api-key",
use_tls: true
end)
smtp.connect()?
// Abone listesi oku
let subscribers = csv.read_file(subscribers_file)?
let sent_count = 0
each subscriber in subscribers for do
let email_addr = subscriber["email"]
let name = subscriber["name"]
// Template'i kişiselleştir
let body = template
.replace("{name}", name)
.replace("{email}", email_addr)
// Email gönder
let 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 do
smtp.send(mail)?
sent_count += 1
io.println("✓ Gönderildi: {}", email_addr)
yakala e do
io.eprintln("✗ Başarısız: {} - {}", email_addr, e)
end
// Rate limiting (saniyede 5 email)
thread.sleep_ms(200)
end
smtp.disconnect()
return Ok(sent_count)
end
function main() do
match send_newsletter("subscribers.csv", "newsletter_template.html") do
Ok(count) => io.println("Newsletter gönderildi: {} abone", count),
Error(e) => io.eprintln("Error: {}", e)
end
end
💡 Example 3: IMAP Email Okuma
import email
function check_new_orders() -> Result[Vector[Order], Error] do
// IMAP bağlantısı
let imap = email.imap_new(do
server: "imap.gmail.com",
port: 993,
username: "orders@example.com",
password: "app-password",
use_ssl: true
end)
imap.connect()?
// INBOX seç
imap.select_folder("INBOX")?
// Okunmamış mesajları getir
let messages = imap.search("UNSEEN")?
let orders = []
each msg_id in messages for do
let msg = imap.fetch_message(msg_id)?
// Subject'te "Order #" var mı kontrol et
if msg.subject.contains("Order #") do
// Email body'den sipariş detaylarını parse et
let 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)
end
end
imap.disconnect()
return Ok(orders)
end
struct Order do
order_id: str,
customer_email: str,
total_amount: float,
items: Vector[str]
end
function parse_order_email(msg: email.Message) -> Result[Order, Error] do
// Email body'den sipariş bilgilerini parse et
let body = msg.text_body
// Basitleştirilmiş parsing örneği
let order_id = regex.find(body, r"Order #(\d+)")?.group(1)
let amount_str = regex.find(body, r"Total: \$([0-9.]+)")?.group(1)
return Ok(Order do
order_id: order_id,
customer_email: msg.from,
total_amount: amount_str.parse_float()?,
items: []
end)
end
function main() do
// each 5 dakikada yeni siparişleri kontrol et
loop do
match check_new_orders() do
Ok(orders) => do
if orders.uzunluk() > 0 do
io.println("✓ {} yeni sipariş bulundu", orders.uzunluk())
// Process orders...
end
end,
Error(e) => io.eprintln("Email kontrolü başarısız: {}", e)
end
thread.sleep(300_000) // 5 dakika
end
end
💡 Example 4: Otomatik Rapor Emaili (Attachment ile)
import email, time, fs
function generate_daily_report() -> Result[str, Error] do
// Rapor create
let report = "
Günlük Sistem Raporu - {}
========================
Sistem Durumu: ✓ Normal
İşlem Sayısı: 1,234
useıcı Sayısı: 567
Error Sayısı: 3
Detaylar for ek dosyaya bakınız.
".formatla(time.now().format("%Y-%m-%d"))
// Raporu dosyaya kaydet
let filename = "report_{}.txt".formatla(time.now().format("%Y%m%d"))
fs.write(filename, report)?
return Ok(filename)
end
function send_daily_report() -> Result[None, Error] do
// Rapor create
let report_file = generate_daily_report()?
// Email hazırla
let 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"))
let body = "
Merhaba,
Günlük sistem raporunu ekte bulabilirsiniz.
Herhangi bir sorun for 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")
return Ok(None)
end
function main() do
// each gün saat 09:00'da rapor gönder
loop do
let now = time.now()
if now.hour() == 9 and now.minute() == 0 do
send_daily_report()?
thread.sleep(60_000) // 1 dakika bekle (tekrar gönderme)
end
thread.sleep(30_000) // 30 saniye
end
end
⚙️ 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: true
// 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
⚠️ Important Notes
- Gmail: 2FA aktifse "App Password" useın
- Rate Limiting: Toplu email for bekleme süresi ekleyin
- Attachments: Büyük dosyalar for boyut sınırına dikkat
- HTML Email: Inline CSS useın, external CSS desteklenmez
- SMTP Ports: 25 (plain), 465 (SSL), 587 (TLS)
- Error Handling: Ağ Errorlarını yakalayın and retry yapın
🔗 Related Modules
http- HTTP clientnetwork- Socket operationscrypto- SSL/TLS encryptionencoding- Base64 encodingtemplate- Email template engine