SMTP sunucusu kurmak

Siz de başka SMTP servislerinin gereksiz kısıtlamalarına maruz kaldıysanız ve saçma sebeplerle hesabınız askıya alınıyorsa kendi SMTP sunucunuzu kurmanızı öneriyorum. Üstelik anlattığım adımlarla max 5 dakikada hazır.

Bugün sizinle Haraka isimli yazılımı kullanacağız. Kendisi Node.js ile yazılmış. Testlere göre Postfix'ten daha performanslı olduğu söyleniyor. Ben de Postfix'ten daha avantajlı buluyorum çünkü Node.js yüklü olan tüm platformlarda çalışacaktır (Postfix gibi paket halinde kurulmuyor).

Kuruluma başlayalım. Her zamanki gibi Debian tabanlı sunucu kullanıyorum.

Debian'ın ana repo'sundaki node.js sürümü çok eski olduğundan repoyu kendimiz ekleyip kuralım.

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs

Npm ile Haraka'yı ve daemon modülünü kuralım.

sudo npm install -g Haraka
sudo npm install -g daemon

* Daemon modülünü Haraka'yı arkaplanda çalıştırmak için kullanıyoruz.

Şimdi ilk adım olarak Haraka servisi oluşturmak için şu komutu giriyoruz:

mkdir my_smtp
sudo haraka -i my_smtp/

"my_smtp/" isimli klasöre bakarsak şu dosyalarla karşılaşıyoruz:

[email protected]_vps:~/my_smtp# ls
config  docs package.json  plugins  queue  README

Şimdi SMTP kullanıcılarını oluşturalım. config/auth_flat_file.ini dosyasını açalım ve aşağıdaki örneğe göre düzenleyelim:

[core]
methods=PLAIN,LOGIN,CRAM-MD5
[users]
[email protected]=password123
[email protected]=password432

config/host_list dosyasını şu şekilde:

bar.net
bar.org

config/plugins dosyasını şu şekilde:

tls
auth/flat_file

config/smtp.ini dosyasını şu şekilde:

# listen'daki ; işaretini kaldırıyoruz ve portu 587 yapıyoruz
listen=[::0]:587
# daemon'daki ; işaretini kaldırıyoruz ve true yapıyoruz
daemonize=true

config/tls.ini dosyasını şu şekilde:

key=tls_key.pem
cert=tls_cert.pem

TLS için private ve public keyler oluşturuyoruz.

openssl req -x509 -nodes -days 2190 -newkey rsa:2048 -keyout config/tls_key.pem -out config/tls_cert.pem

Hepsini ayarladıktan sonra Haraka'yı başlatıyoruz.

sudo haraka -c my_smtp/

Eğer hiç bir sorun ekranda görünmüyorsa SMTP sunucumuz başarıyla başlatıldı demektir.

Aşağıda da SMTP sunucumuzu PHPMailer kütüphanesi ile kullanabileceğimiz örnek kodlar mevcut:

<?php
date_default_timezone_set('Etc/UTC');

require 'PHPMailer-5.2.19/PHPMailerAutoload.php';

$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';
$mail->Host = 'bar.net';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = [email protected]';
$mail->Password = 'password1';
$mail->setFrom([email protected]');
$mail->addAddress([email protected]');
$mail->Subject = 'Merhaba dunya!';
$mail->Body = 'Bu bir ornek mesajdir.';
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

if (!$mail->send()) {
    echo "HATA: " . $mail->ErrorInfo;
} else {
    echo "Mesaj gonderildi!";
}

Notlar:
* SMTP kullanıcı adı ile gönderen e-posta adresi aynı olmalıdır.
* Host adınızın DNS'inin A kaydını ayarlamayı unutmayın.
* Self-signed sertifikamız olduğundan TLS doğrulamasını es geçmeliyiz (PHPMailer örneğindeki gibi SMTPOptions ile yapabiliyoruz) ya da ilgili self-signed sertifikasının public key'ini işletim sistemine eklemeliyiz. Eğer Let's Encrypt ya da tüm platformlarda geçerli bir sertifika kullanıyorsanız bir şey yapmanıza gerek kalmıyor.
* DKIM ayarlarını öğrenmek için yorum yazınız.

İyi çalışmalar.