Exchange Server’da İlk Posta Kutusu Nasıl Oluşturulur

Exchange Server kurulumunu tamamladınız, servisler ayakta, DNS kayıtları yerinde. Şimdi sıra geldi o tatmin edici ana: ilk posta kutusunu oluşturmaya. Kulağa basit gelir, ama bu adımda yapılan hatalar sonradan ciddi sorunlara dönüşebiliyor. Özellikle production ortamında, yanlış bir izin yapısı veya eksik bir attribute ayarı, kullanıcıların günlerce mail alamamasına ya da Outlook’un sürekli parola sormasına yol açabiliyor. Bu yazıda sizi bu tuzaklardan koruyacak şekilde, hem GUI hem PowerShell yoluyla ilk mailbox oluşturma sürecini ele alacağız.

Başlamadan Önce: Ön Koşullar

Exchange’de mailbox oluşturmak aslında Active Directory üzerinde işlem yapmak demektir. Bu yüzden birkaç şeyin hazır olduğundan emin olmanız gerekiyor.

Active Directory hazırlığı:

  • Exchange kurulumu sırasında AD schema extend edilmiş olmalı
  • Kullanıcı hesaplarının oluşturulacağı OU (Organizational Unit) yapısı belirlenmiş olmalı
  • Exchange Trusted Subsystem grubunun ilgili OU üzerinde gerekli izinleri olmalı

Exchange tarafında:

  • Mailbox Database en az bir tane oluşturulmuş ve mount edilmiş olmalı
  • Accepted Domain listesine şirket domain’iniz eklenmiş olmalı
  • En temel email address policy tanımlanmış olmalı

Bu kontrolleri hızlıca yapmak için Exchange Management Shell’i açıp şu komutları çalıştırabilirsiniz:

# Mailbox Database durumunu kontrol et
Get-MailboxDatabase -Status | Select-Object Name, Mounted, DatabaseSize

# Accepted Domain listesini görüntüle
Get-AcceptedDomain | Select-Object Name, DomainName, DomainType

# Email Address Policy kontrolü
Get-EmailAddressPolicy | Select-Object Name, EnabledEmailAddressTemplates

Eğer Mounted: False çıktısı görüyorsanız, veritabanı mount edilmemiş demektir. Mount-Database -Identity "Mailbox Database" komutuyla bu sorunu çözebilirsiniz. Accepted Domain boş geliyorsa, kullanıcılara mail adresi atanamaz, bu kritik bir eksiklik.

GUI ile Mailbox Oluşturma: Exchange Admin Center

Exchange Admin Center (EAC) üzerinden mailbox oluşturmak, yeni başlayanlar için daha anlaşılır olsa da her adımda ne yaptığınızı bilmeniz önemli. Tarayıcınızdan https://mailserver/ecp adresine gidin ve Exchange yönetici hesabınızla oturum açın.

Sol menüden Recipients > Mailboxes yolunu izleyin. Sağ üstteki + butonuna tıklayın ve User mailbox seçeneğini seçin.

Karşınıza gelen ekranda iki seçeneğiniz var:

Mevcut bir AD kullanıcısına mailbox bağlamak: Kullanıcı zaten AD’de var ama henüz Exchange mailbox’ı yok. “Existing user” seçeneğiyle bu kullanıcıyı mailbox-enable yapabilirsiniz.

Yeni kullanıcı ve mailbox birlikte oluşturmak: Hem AD hesabı hem mailbox aynı anda oluşturulur. “New user” seçeneği budur.

Production ortamında genellikle ikinci yol tercih edilir çünkü HR sistemleri veya helpdesk ticketları ile senkronize çalışırken tek adımda işi bitirmek daha verimli oluyor.

Formu doldururken dikkat etmeniz gereken birkaç nokta:

  • User logon name: Bu alan aynı zamanda mailbox’ın primary SMTP adresini belirleyecek. Email address policy aktifse otomatik atanır, ama policy yoksa manuel girmeniz gerekir.
  • Mailbox database: Production ortamında birden fazla database varsa, hangi kullanıcının hangi database’e gideceğini manuel seçmek yerine database assignment policy kullanmak daha sağlıklıdır. İlk kurulumda tek database olduğu için bu sorun olmaz.
  • Archive mailbox: Şu an için işaretlemeyin. Archive için ayrı bir planlama gerekiyor.

PowerShell ile Mailbox Oluşturma: Asıl Mesele Bu

Gerçekten konuşalım: Eğer tek bir mailbox oluşturacaksanız GUI yeterli. Ama 50 kişilik bir şirkete ilk kurulumu yapıyorsanız veya ileride onboarding süreçlerini otomatize etmek istiyorsanız, PowerShell’i öğrenmek zorundasınız.

Tek Mailbox Oluşturma

En temel komut şu şekilde:

New-Mailbox -Name "Ahmet Yilmaz" `
            -DisplayName "Ahmet Yılmaz" `
            -UserPrincipalName "[email protected]" `
            -SamAccountName "ahmet.yilmaz" `
            -Password (ConvertTo-SecureString -String "P@ssw0rd123!" -AsPlainText -Force) `
            -ResetPasswordOnNextLogon $true `
            -OrganizationalUnit "OU=Kullanicilar,OU=Sirket,DC=sirket,DC=com,DC=tr" `
            -Database "Mailbox Database"

Buradaki parametrelerin ne işe yaradığını açıklamak gerekiyor:

  • -Name: Active Directory’deki CN (Common Name) değeridir
  • -DisplayName: Global Address List’te ve Outlook’ta görünen isim
  • -UserPrincipalName: Kullanıcının oturum açma adı ve genellikle primary email adresi
  • -SamAccountName: Windows uyumlu kısa kullanıcı adı, 20 karakterden kısa olmalı
  • -Password: SecureString olarak verilmeli, düz metin kabul edilmez
  • -ResetPasswordOnNextLogon: İlk girişte parola değiştirme zorunluluğu
  • -OrganizationalUnit: Kullanıcının oluşturulacağı AD birimi
  • -Database: Hangi mailbox database’e atanacağı

Toplu Mailbox Oluşturma: CSV’den Import

Gerçek hayatta karşılaştığım en yaygın senaryo şu: Müşteri size 80 kişilik bir Excel listesi gönderir, pazartesi sabahı herkesin maili açık olması gerekir. Bu durumda CSV tabanlı toplu işlem hayat kurtarır.

Önce CSV dosyanızı hazırlayın (Excel’den CSV olarak kaydedin):

Ad,Soyad,UPN,SamAccountName,Departman,Database
Mehmet,Kaya,[email protected],mehmet.kaya,Muhasebe,DB-Muhasebe
Ayse,Demir,[email protected],ayse.demir,Satis,DB-Satis
Fatma,Celik,[email protected],fatma.celik,IT,DB-IT

Sonra bu CSV’yi işleyecek scripti yazın:

# CSV'yi oku
$kullanicilar = Import-Csv -Path "C:Tempyeni_kullanicilar.csv" -Encoding UTF8

# Varsayilan sifre belirle
$varsayilanSifre = ConvertTo-SecureString -String "Sirket2024!" -AsPlainText -Force

# Log dosyasi olustur
$logDosyasi = "C:Tempmailbox_olusturma_log_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"

foreach ($kullanici in $kullanicilar) {
    try {
        New-Mailbox -Name "$($kullanici.Ad) $($kullanici.Soyad)" `
                    -DisplayName "$($kullanici.Ad) $($kullanici.Soyad)" `
                    -UserPrincipalName $kullanici.UPN `
                    -SamAccountName $kullanici.SamAccountName `
                    -Password $varsayilanSifre `
                    -ResetPasswordOnNextLogon $true `
                    -OrganizationalUnit "OU=Kullanicilar,DC=sirket,DC=com,DC=tr" `
                    -Database $kullanici.Database `
                    -ErrorAction Stop
        
        $mesaj = "$(Get-Date) - BASARILI: $($kullanici.UPN) olusturuldu"
        Write-Host $mesaj -ForegroundColor Green
        Add-Content -Path $logDosyasi -Value $mesaj
    }
    catch {
        $mesaj = "$(Get-Date) - HATA: $($kullanici.UPN) - $($_.Exception.Message)"
        Write-Host $mesaj -ForegroundColor Red
        Add-Content -Path $logDosyasi -Value $mesaj
    }
}

Write-Host "`nIslem tamamlandi. Log dosyasi: $logDosyasi" -ForegroundColor Yellow

Bu scripti çalıştırmadan önce mutlaka test ortamında deneyin. Ayrıca CSV dosyasının UTF-8 ile kaydedildiğinden emin olun, özellikle Türkçe karakter içeren isimlerde bu kritik.

Mailbox Oluşturma Sonrası Yapılandırma

Mailbox oluşturuldu, ama iş bitmedi. Birkaç önemli ayar daha var.

Email Alias Ekleme

Birçok şirkette kullanıcıların birden fazla mail adresi olur. Örneğin [email protected] primary adres iken [email protected] veya [email protected] gibi alias’lar da yönlendirilmesi gerekebilir:

# Mevcut email adreslerini görüntüle
Get-Mailbox -Identity "ahmet.yilmaz" | Select-Object -ExpandProperty EmailAddresses

# Alias ekle
Set-Mailbox -Identity "ahmet.yilmaz" `
            -EmailAddresses @{Add="smtp:[email protected]","smtp:[email protected]"}

# Ekleme sonrasi kontrol
Get-Mailbox -Identity "ahmet.yilmaz" | Select-Object -ExpandProperty EmailAddresses

Önemli not: Büyük harfli SMTP: primary adresi belirtir, küçük harfli smtp: ise alias’tır. Birden fazla büyük harfli SMTP girmeyin, sistem karışır.

Mailbox Boyut Limitleri

Varsayılan olarak database seviyesinde tanımlı limitler geçerlidir, ama bazı kullanıcılar için özel limit belirlemeniz gerekebilir:

# Yonetici mailbox icin buyuk limit ver
Set-Mailbox -Identity "genel.mudur" `
            -IssueWarningQuota 9GB `
            -ProhibitSendQuota 10GB `
            -ProhibitSendReceiveQuota 11GB `
            -UseDatabaseQuotaDefaults $false

# Normal kullanici icin standart limit
Set-Mailbox -Identity "ahmet.yilmaz" `
            -IssueWarningQuota 4GB `
            -ProhibitSendQuota 4.5GB `
            -ProhibitSendReceiveQuota 5GB `
            -UseDatabaseQuotaDefaults $false

Out of Office ve Diğer Kullanıcı Ayarları

Yeni oluşturulan hesaplarda bazen OOF (Out of Office) ayarlarını sıfırlamak veya kontrol etmek gerekir:

# OOF durumunu kontrol et
Get-MailboxAutoReplyConfiguration -Identity "ahmet.yilmaz"

# OOF'u devre disi birak (yeni hesaplarda genelde kapalı gelir ama emin olmak icin)
Set-MailboxAutoReplyConfiguration -Identity "ahmet.yilmaz" -AutoReplyState Disabled

Sık Karşılaşılan Sorunlar ve Çözümleri

“The operation couldn’t be performed because object X couldn’t be found on domain controller Y”

Bu hatayı görüyorsanız AD replication henüz tamamlanmamış demektir. Exchange birden fazla DC’ye bakıyor ve henüz sync olmayan bir DC’ye denk geliyor. Çözüm:

# AD replication durumunu kontrol et
repadmin /replsummary

# Exchange'i belirli bir DC'ye yonlendir
Set-ADServerSettings -PreferredServer "dc01.sirket.com.tr"

# Islem sonrasi sifirla
Set-ADServerSettings -PreferredServer $null

Email Address Policy Uygulanmıyor

Mailbox oluşturdunuz ama email adresi atanmadı. Bu genellikle Email Address Policy’nin doğru configure edilmediğini gösterir:

# Mevcut policyyi goruntule
Get-EmailAddressPolicy | Format-List Name, EnabledEmailAddressTemplates, RecipientFilter

# Policy'yi manuel olarak uygula
Update-EmailAddressPolicy -Identity "Default Policy"

# Belirli bir mailbox icin manuel adres ata
Set-Mailbox -Identity "ahmet.yilmaz" -PrimarySmtpAddress "[email protected]"

Mailbox Oluşturduktan Sonra Outlook Bağlanamıyor

Bu genellikle Autodiscover’la ilgilidir, ama kontrol listesi şu şekilde olmalı:

# Autodiscover servisinin calistigini kontrol et
Test-OutlookWebServices -Identity "[email protected]"

# Mailbox'in tam olarak provision edilip edilmedigini kontrol et
Get-MailboxStatistics -Identity "ahmet.yilmaz" | Select-Object DisplayName, ItemCount, TotalItemSize, LastLogonTime

# Mailbox database mount durumunu kontrol et
Get-MailboxDatabase -Status | Select-Object Name, Mounted

Doğrulama: Mailbox Gerçekten Çalışıyor mu?

Mailbox oluşturduktan sonra “tamam” demek için test etmek şart. Bunu script haline getirip her yeni kullanıcı sonrası çalıştırabilirsiniz:

function Test-MailboxHealth {
    param(
        [Parameter(Mandatory=$true)]
        [string]$MailboxIdentity
    )
    
    Write-Host "`n=== Mailbox Saglik Kontrolu: $MailboxIdentity ===" -ForegroundColor Cyan
    
    # Mailbox var mi?
    $mailbox = Get-Mailbox -Identity $MailboxIdentity -ErrorAction SilentlyContinue
    if (-not $mailbox) {
        Write-Host "HATA: Mailbox bulunamadi!" -ForegroundColor Red
        return
    }
    Write-Host "OK: Mailbox mevcut" -ForegroundColor Green
    
    # Primary SMTP adresi var mi?
    $primarySmtp = $mailbox.PrimarySmtpAddress
    if ($primarySmtp) {
        Write-Host "OK: Primary SMTP - $primarySmtp" -ForegroundColor Green
    } else {
        Write-Host "UYARI: Primary SMTP adresi yok!" -ForegroundColor Yellow
    }
    
    # Database mount mu?
    $db = Get-MailboxDatabase -Identity $mailbox.Database -Status
    if ($db.Mounted) {
        Write-Host "OK: Database mount edilmis - $($db.Name)" -ForegroundColor Green
    } else {
        Write-Host "HATA: Database mount degil!" -ForegroundColor Red
    }
    
    # AD hesabi aktif mi?
    $adUser = Get-User -Identity $MailboxIdentity
    if ($adUser.UserAccountControl -notlike "*AccountDisabled*") {
        Write-Host "OK: AD hesabi aktif" -ForegroundColor Green
    } else {
        Write-Host "HATA: AD hesabi devre disi!" -ForegroundColor Red
    }
    
    Write-Host ""
}

# Kullanim
Test-MailboxHealth -MailboxIdentity "ahmet.yilmaz"

Güvenlik Tarafı: Unutulmayanlar

Mailbox oluştururken güvenlik açısından akılda tutulması gereken birkaç nokta:

Varsayılan parola politikası: İlk kurulumda oluşturduğunuz tüm kullanıcılara aynı varsayılan parolayı veriyorsanız, -ResetPasswordOnNextLogon $true parametresini kesinlikle kullanın. Bu parametre olmadan kullanıcılar sonsuza kadar o parolayı kullanabilir.

Devre dışı hesap – aktif mailbox: Bazen bir çalışan işten ayrılır ama maili birkaç ay daha aktif tutulur. Bu durumda AD hesabını devre dışı bırakırken mailbox’ı koruyabilirsiniz. Ancak bu hesapların düzenli audit edilmesi gerekir.

Protokol erişimi: Yeni oluşturulan her mailbox varsayılan olarak MAPI, OWA, ActiveSync, POP3 ve IMAP protokollerine açıktır. Güvenlik politikanıza göre gereksiz protokolleri kapatın:

# POP3 ve IMAP'i kapat, sadece MAPI ve OWA kullan
Set-CasMailbox -Identity "ahmet.yilmaz" `
               -PopEnabled $false `
               -ImapEnabled $false `
               -MAPIEnabled $true `
               -OWAEnabled $true `
               -ActiveSyncEnabled $false

ActiveSync’i de kapatmak organizasyonun mobil cihaz politikasına bağlı. BYOD politikası yoksa ve MDM yoksa ActiveSync’i kapalı tutmak makul bir seçenek.

Sonuç

Exchange’de ilk mailbox oluşturmak basit bir işlem gibi görünse de arkasında birçok bileşen birlikte çalışıyor: Active Directory, DNS, email address policy, mailbox database, Autodiscover servisleri. Bu bileşenlerin her birinin sağlıklı olduğunu doğrulamadan oluşturduğunuz mailbox kullanıcıya gerçek anlamda hizmet vermez.

PowerShell’e yatırım yapmanızı özellikle tavsiye ederim. Tek bir mailbox için bile oluşturma scriptini hazır tutmak, o akşam üzeri gelen “yarın sabah yeni müdürümüzün maili açık olsun” talebini beş dakikada karşılamanızı sağlar. CSV tabanlı toplu oluşturma ile büyük onboarding süreçlerini otomatize ettiğinizde zaman kazancı katlanarak artar.

Son olarak şunu söylemek isterim: Bu yazıda anlattıklarım Exchange Server 2016 ve 2019 için geçerli. Microsoft 365 hibrit senaryolarda bazı adımlar farklılaşıyor, ama temel mantık aynı kalıyor. Eğer hibrit yapıya geçiş planınız varsa, on-premises mailbox yönetimi bilgisi orada da işinize yarayacak.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir