IMAP/SMTP Ayarlarını Otomatik Algılayan PHP Aracı

IMAP/SMTP e-posta ayarlarını PHP ile otomatik algılayan bu araç, toplu kurulumlarda BT ekiplerine hızlı ve güvenilir otomasyon sağlar.

2024-10-15

E-posta Yapılandırması: BT Ekiplerinin Kabusları

Şirkete 50 yeni çalışan geldi. Her birinin e-posta istemcisi yapılandırılacak. Outlook mu, Apple Mail mi? IMAP mı, POP3 mü? SSL mi, STARTTLS mi? Sunucu adresi nedir? Port 993 mü, 143 mü? Bu soruların cevabını bulmak için belge taramak, destek hattını aramak ya da deneme-yanılma yapmak gerekiyor — ve bu süreç her çalışan için tekrarlanıyor.

Bir şirkete 50 yeni çalışan geldiğinde BT ekibinin başı belaya giriyor. Her çalışan için e-posta istemcisini elle yapılandırmak; sunucu adresini, port numarasını, SSL ayarını, kimlik doğrulama yöntemini tek tek bulmak ve girmek saatler alıyor. Üstelik her mail sağlayıcısının farklı kombinasyonlar kullandığını düşündüğünüzde iş iyice içinden çıkılmaz hale geliyor.

Gmail mi? imap.gmail.com:993 SSL. Yandex mi? imap.yandex.com:993. Şirket içi Exchange mi? Sunucu adı bile farklı olabiliyor. Bu bilgiye ulaşmak için belgeleri taramak, destek hatlarını aramak ya da deneme-yanılma yapmak gerekiyor.

Biz bu süreci tamamen otomatize eden bir PHP aracı geliştirdik.

PHP 8.0+ ile Otomatik Algılama Mantığı

Araç temel olarak şunu yapıyor: e-posta adresini alıyor, domain’i çıkarıyor, ardından o domain için bilinen yaygın sunucu konfigürasyonlarını deniyor. Bağlantı başarılı olana kadar farklı kombinasyonları test ediyor.

<?php

declare(strict_types=1);

class EmailConfigDetector
{
    private array $imapCandidates = [
        ['host' => 'imap.{domain}', 'port' => 993, 'ssl' => true],
        ['host' => 'imap.{domain}', 'port' => 143, 'ssl' => false],
        ['host' => 'mail.{domain}',  'port' => 993, 'ssl' => true],
        ['host' => 'mail.{domain}',  'port' => 143, 'ssl' => false],
    ];

    private array $smtpCandidates = [
        ['host' => 'smtp.{domain}', 'port' => 587, 'ssl' => 'tls'],
        ['host' => 'smtp.{domain}', 'port' => 465, 'ssl' => 'ssl'],
        ['host' => 'smtp.{domain}', 'port' => 25,  'ssl' => false],
        ['host' => 'mail.{domain}', 'port' => 587, 'ssl' => 'tls'],
    ];

    public function detect(string $email): array
    {
        $domain = substr(strrchr($email, '@'), 1);
        return $this->testCombinations($domain);
    }
}

8 Protokol Kombinasyonunu Paralel Test Etmek

Araç toplamda 8 farklı protokol kombinasyonunu test ediyor: 4 IMAP + 4 SMTP varyasyonu. Bunları sıralı test etmek çok yavaş olur — her bağlantı denemesi zaman aşımına kadar bekleyecektir. Çözüm paralel test.

PHP’nin pcntl_fork() veya fiber (PHP 8.1+) yapılarıyla eşzamanlı bağlantı testleri yapılabiliyor. Daha basit ve taşınabilir bir yaklaşım için curl_multi kullanıyoruz:

private function testCombinations(string $domain): array
{
    $results = [];
    $handles = [];

    foreach ($this->getAllCandidates($domain) as $key => $candidate) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $candidate['url']);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_TIMEOUT, 8);
        $handles[$key] = ['handle' => $ch, 'config' => $candidate];
    }

    $mh = curl_multi_init();
    foreach ($handles as $item) {
        curl_multi_add_handle($mh, $item['handle']);
    }

    // Tüm bağlantıları eşzamanlı çalıştır
    do {
        curl_multi_exec($mh, $running);
        curl_multi_select($mh);
    } while ($running > 0);

    return $this->collectResults($handles, $mh);
}

Gerçek Zamanlı İlerleme Takibi ve Loglama

Toplu hesap kurulumu yaparken ekran başında bekleyen BT personeli için anlık geri bildirim şart. Her test denemesini ve sonucunu anında ekrana yansıtıyoruz:

[2024-10-15 14:23:01] TEST: imap.example.com:993 (SSL) ... BAŞARILI ✓
[2024-10-15 14:23:01] TEST: smtp.example.com:587 (TLS) ... BAŞARILI ✓
[2024-10-15 14:23:02] TEST: pop3.example.com:995 (SSL) ... ZAMAN AŞIMI ✗
[2024-10-15 14:23:02] TEST: mail.example.com:143       ... BAĞLANTI REDDEDİLDİ ✗

SONUÇ:
  IMAP: imap.example.com:993 (SSL/TLS)
  SMTP: smtp.example.com:587 (STARTTLS)
  POP3: Desteklenmiyor

Loglar ayrıca bir dosyaya da yazılıyor. Audit Log için önemli — hangi hesapta ne zaman hangi ayarlar tespit edilmiş, hepsi kayıt altında.

Özel Sağlayıcı Veritabanı

Araç ayrıca popüler e-posta sağlayıcıları için önceden tanımlı konfigürasyonlar içeriyor. Gmail, Outlook, Yahoo, Yandex, Apple iCloud gibi sağlayıcılar için gerçek bağlantı testi yapmadan doğrudan bilinen ayarları döndürüyor. Bu sayede çok daha hızlı sonuç alınıyor.

private array $knownProviders = [
    'gmail.com' => [
        'imap' => ['host' => 'imap.gmail.com', 'port' => 993, 'ssl' => true],
        'smtp' => ['host' => 'smtp.gmail.com',  'port' => 587, 'tls' => true],
    ],
    'outlook.com' => [
        'imap' => ['host' => 'outlook.office365.com', 'port' => 993, 'ssl' => true],
        'smtp' => ['host' => 'smtp.office365.com',    'port' => 587, 'tls' => true],
    ],
    // ...
];

Toplu Hesap Kurulumunda Kazanılan Zaman

50 hesaplı bir kurulumu elle yapılandırmak ortalama 3-5 saat sürüyor. Bu araçla süreç şöyle işliyor:

  1. E-posta listesini CSV’den içe aktar
  2. Her adres için paralel algılama başlat
  3. Başarılı konfigürasyonları otomatik kaydet
  4. Başarısız olanlar için manuel inceleme raporu al

50 hesap için toplam süre: 8-12 dakika. İnsan müdahalesine gerek kalan oran genellikle %5’in altında — yalnızca çok alışılmadık kurumsal sunucu yapılandırmaları elle müdahale gerektiriyor.

Sonuç

E-posta sunucu yapılandırması gibi tekrarlayan ve hata yapmaya açık süreçleri otomatize etmek, BT ekiplerinin zamanını asıl önemli işlere ayırmasını sağlıyor. PHP 8.0+’ın modern özellikleri, bu tür ağ tabanlı otomasyon araçları için yeterince güçlü bir temel sunuyor.

50 hesap için 3-5 saati 8-12 dakikaya indirmek bu araçla mümkün — ve bu hesap sadece kurulum sırasında değil, her yeni personel dalgasında ve her sistem migrasyonunda tekrar kazanılır. Bu tür BT süreç otomasyonu, Barlas Dijital’in KOBİ ve kurumsal müşterilere sunduğu çözümlerin somut örneklerinden biridir: lisans maliyeti sıfır, şirkete özel, bakımı kolay.

Benzer komut satırı otomasyonu yaklaşımını BD Reparo projesindeki kurumsal Windows bakım akışlarında da kullandık. Benzer bir e-posta otomasyonu ihtiyacınız varsa veya mevcut BT süreçlerinizi hızlandırmak istiyorsanız bizimle konuşalım.