Yazdığım yazıları daha çok kişiye ulaşsın diye bazı facebook gruplarında paylaşıyorum. Daha önce Exchange Kuralları İle Ramsomware Farkındalığı Nasil Sağlanır? isimli yazıyı yazdığımda facebook da birisi yeni açılan kullanıcılara otomatik benim belirleyeceğim mail gitsin istiyorum Nasil yapabilirim diye sormuştu. Umarım şu an bu yazıyı da okuyordur.
Bu yazıda Exchange üzerinde bir kullanıcıya posta kutusu oluşturulduğu anda hoşgeldiniz gibisinden bir mailin sistem tarafından otomatik gönderilmesini yapacağız. Ben test ortamımda Exchange 2016 ile yaptım ancak Exchange 2013 de de uygulayabilirsiniz.
Örneğin şirket hakkında bilgilendirmelerin, kuralların olduğu bir e-posta da olabilir.
Bunun için iki temel konu var.
- Otomatik gidecek e-postanın hazırlanması ve html olarak kaydedilmesi
- Exchange üzerinde gerekli ayarların yapılması.
E-Postanın Hazırlanması
Önce otomatik gidecek e-postamızı hazırlayalım. Bunun için eğer html bilginiz var ise kendiniz kodlayabilirsiniz, yok ise de Word yada Outlookda mesajı yazıp Farklı Kaydet seçeneği ile html olarak kaydedelim. Bu html dosyasında hitap kısmında Merhaba #UserFirstName# gibi bir selamlama ile başlayalım çünkü ilerleyen kısımda bahsedeceğim bir yöntem ile #UserFirstName# kısmına kullanıcının adının gelmesini sağlayacağız. Yani mail başlangıcımız “Merhaba Onur” gibi başlayacak.
Örneğin aşağıdaki gibi bir metni notepad de yazıp html olarak kaydedin.
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Hoşgeldiniz</title> </head> <body> Merhaba <b>#UserFirstName#,</b> <br>Fabrikam A.Ş. ye katıldığınız için çok mutluyuz. Size şirketimiz hakkında birkaç bilgi vermek istiyoruz. </br> <br>Mesai saatleri 08:00 – 17:00 arasındadır.</br> <br>Servisler arka bahçeden 17:15 de hareket etmektedir.</br> <br>Yemek menüsüne http://yemek.fabrikam.com adresinden erişebilirsiniz.</br> <br>Saygılarımızla</br> <br>Fabrikam A.Ş. İnsan Kaynakları Departmanı</br> </body> </html>
Bu hazırladığımız html dosyasını Exchange sunucularının hepsinde örneğin C:\HosgeldinMesaji\hosgeldin.htm olarak kaydedelim.
Buraya kadar ki kısımda birinci adımı hallettik. Şimdi ikinci adıma geçelim.
Exchange ayarlarının yapılması
Tüm Exchange sunucularında Exchange Management Shell de aşağıdaki komut ile “Scripting Agent” özelliğinin açılması gerekmektedir.
Enable-CmdletExtensionAgent "Scripting Agent"
Varsayılanda bu özellik devre dışı gelmektedir. Bu özelliği açarak exchange sunucunuzun aşağıdaki dizindeki “ScriptingAgentConfig.xml” dosyası içindeki fonksiyonlarını uygulanabilir yapıyoruz.
C:\Program Files\Microsoft\Exchange Server\V15\Bin\CmdletExtensionAgents
Bu dizine girdiğinizde ScriptingAgentConfig.xml.sample dosyasını göreceksiniz. Bu dosya olduğu gibi kalsın, onun içinde birkaç örnek var ama biz onları kullanmayacağız. Bizim ihtiyacımız olan ScriptingAgentConfig.xml dosyası içeriği aşağıdaki gibidir. Bu kodları C:\Program Files\Microsoft\Exchange Server\V15\Bin\CmdletExtensionAgents içine ScriptingAgentConfig.xml olarak kaydedin.
<?xml version="1.0" encoding="utf-8" ?> <Configuration version="1.0"> <Feature Name="WelcomeEmail" Cmdlets="New-Mailbox,Enable-Mailbox"> <ApiCall Name="OnComplete"> if($succeeded) { # Waiting for synchronization after mailbox has been created. Set-ADServerSettings -ViewEntireForest $true # Uncomment the next line to enable logging - this logs information helpful when debugging/modifying script and associated HTML message # $logFile = "c:\hosgeldinmesaji\log.txt" if ($logFile) { $provisioningHandler.UserSpecifiedParameters | fl | Out-File $logFile -Append } # Get the mailbox $attempts = 0 $mbx = $null # Just to be sure... do { try { if ($provisioningHandler.UserSpecifiedParameters.Contains("Alias")) { $UsrAlias = $provisioningHandler.UserSpecifiedParameters["Alias"].ToString() if ($logFile) { [string]::Format("Retrieving mailbox using alias: {0}", $UsrAlias) | Out-File $logFile -Append } $mbx = (Get-Mailbox -Filter {Alias -eq $UsrAlias} -ErrorAction SilentlyContinue) Remove-Variable UsrAlias } if (($mbx -eq $null) -and ($provisioningHandler.UserSpecifiedParameters.Contains("SamAccountName"))) { $UsrSamAccountName = $provisioningHandler.UserSpecifiedParameters["SamAccountName"].ToString() if ($logFile) { [string]::Format("Retrieving mailbox using SamAccountName: {0}", $UsrSamAccountName) | Out-File $logFile -Append } $mbx = (Get-Mailbox -Filter {SamAccountName -eq $UsrSamAccountName} -ErrorAction SilentlyContinue) Remove-Variable UsrSamAccountName } if (($mbx -eq $null) -and ($provisioningHandler.UserSpecifiedParameters.Contains("Identity"))) { $UsrIdentity = $provisioningHandler.UserSpecifiedParameters["Identity"].ToString() if ($logFile) { [string]::Format("Retrieving mailbox using identity: {0}", $UsrIdentity) | Out-File $logFile -Append } $mbx = (Get-Mailbox -Identity $UsrIdentity -ErrorAction SilentlyContinue) Remove-Variable UsrIdentity } } catch { $Error.Clear() } if ($mbx -eq $null) { Start-Sleep -s 10 $attempts++ } } while (($attempts -lt 3) -and ($mbx -eq $null)) # If we have the mailbox, we can send the introductory email if ($mbx) { # Mailbox does not have first name property, so we need to get the user account $usr = Get-User $mbx.Identity # Create the objects we need to create the message and send the mail $message = New-Object System.Net.Mail.MailMessage $smtpClient = New-Object System.Net.Mail.SmtpClient("exc01.fabrikam.com") # Change this to point to your SMTP server # Obtain the message text $messageText = [string](Get-Content ("c:\hosgeldinmesaji\hosgeldin.htm")) # Change to point to your HTML welcome message $messageText = $messageText.Replace("#UserFirstName#", $usr.FirstName) # This replaces #UserFirstName# with the user's first name - you can add further replacements as needed # Create the HTML view for this message $view = [System.Net.Mail.AlternateView]::CreateAlternateViewFromString($messageText, $null, "text/html") # Create the message $message.From = "[email protected]" # Update this to the address you want the welcome message to be sent from $message.To.Add($mbx.PrimarySmtpAddress.ToString()) $message.Subject = "Hoşgeldiniz..." # Update this to your email subject $message.AlternateViews.Add($view) $message.IsBodyHtml = $true # Send the message $smtpClient.Send($message) # Tidy up variables Remove-Variable view Remove-Variable messageText Remove-Variable message Remove-Variable smtpClient Remove-Variable usr Remove-Variable mbx } } </ApiCall> </Feature> </Configuration>
Burada sarı ile işaretli olan satırlardaki bilgileri kendinize göre düzenleyebilirsiniz. 64. satırda dikkat ederseniz html dosyamızın içeriğindeki “#UserFirstName#” ifadesini kullanıcının adı ile değiştiriyor.
Exchnage tarafındaki işlemlerde bu kadar. Artık sunucu yada servisleri restart etmeden deneme yapabiliriz. ECP den yeni bir kullanıcı açalım ve sonucu görelim. Resmi tıklayıp tam boyut görebilirsiniz.

Herhangi bir sorun olursa yada işlevi kullanmaktan vazgeçerseniz Scripting Agent” özelliğini kapatmak için tüm exchange sunucularınızda aşağıdaki komutu Exchange Management Shell de çalıştırın.
Disable-CmdletExtensionAgent "Scripting Agent"