Komut Satırından E-posta Gönderme: curl kullanımı

smtp curl send email cpynet

Günümüzde en eski elektronik iletişim araçlarından biri olmasına rağmen, e-posta (elektronik posta) çeşitli amaçlarla kullanılmaya devam etmektedir:

  • Kişisel iletişim
  • İdari bildirimler
  • Uyarılar
  • Kimlik doğrulama

Otomatik uygulamaları nedeniyle, komut satırından e-posta göndermek için pratik bir yol bulmak önemli hale gelmiştir. Bu makalede, curl aracını kullanarak shell’den e-posta gönderme yöntemlerini inceleyeceğiz. Öncelikle, curl aracını genel hatlarıyla tanıtacak, ardından komut satırından e-posta göndermenin neler içerdiğini keşfedeceğiz ve son olarak curl ile e-posta göndermenin farklı yollarını inceleyeceğiz.

Bu makalede sunulan kodları Debian 12 (Bookworm) üzerinde GNU Bash 5.1.4 ile test ettik. Belirtilmediği takdirde, çoğu POSIX uyumlu ortamda çalışması beklenmektedir.

1. curl

curl, veri aktarımı konusunda yaygın olarak kullanılan bir araçtır. Birçok protokol ve standartı destekler:

  • Dosya Transfer Protokolü (FTP), Güvenli Dosya Transfer Protokolü (FTPS), Güvenli Dosya Transfer Protokolü (SFTP), Basit Dosya Transfer Protokolü (TFTP)
  • Gopher, Gophers
  • Dict
  • Hiper Metin Transfer Protokolü (HTTP), HTTPS
  • Hafif Dizin Erişim Protokolü (LDAP), LDAPS
  • Posta Ofisi Protokolü sürüm 3 (POP3), POP3S
  • Güvenli Kopya Protokolü (SCP)
  • İnternet Mesaj Erişim Protokolü (IMAP)
  • Sunucu Mesaj Bloğu (SMB), Ortak İnternet Dosya Sistemi (CIFS), SAMBA
  • Basit Posta Transfer Protokolü (SMTP), SMTPS
  • Telnet
  • Güvenli Soket Katmanı (SSL)
  • SOCKS4, SOCKS5
  • UNIX soketleri

Örnek Kullanım

Bir HTTPS isteği yapmak için bir örnek görelim:

$ curl --data-urlencode "user=eminbuyuk" --data-urlencode "pass=PAROLA" https://cpynet.com/
{
  "user": "eminbuyuk",
  "pass": "PAROLA"
}

Bu örnekte, curl ile https://cpynet.com adresine basit bir HTTPS isteği göndermekteyiz. İki parametre (kullanıcı ve şifre) --data-urlencode seçeneği ile gönderilmektedir. Sunucu, geçen parametreleri ve değerlerini JSON formatında geri döndürmektedir.

2. Komut Satırından E-posta Gönderme

curl, birçok büyük posta protokolünü desteklediği için terminalden e-posta göndermek mümkündür. E-posta göndermenin temel bileşenlerini ve adımlarını inceleyelim.

2.1. E-posta Sunucusu

E-posta göndermek için, e-postamızı kabul edebilen ve uygun şekilde işleyebilen bir hizmete ihtiyacımız vardır. Bu hizmet genellikle bir posta sağlayıcısı veya posta sunucusu olarak adlandırılmakta ve aşağıdaki bileşenlerden oluşmaktadır:

  • MTA (Mail Transport Agent): SMTP aracılığıyla sunucular arası e-posta yönlendirmesi ve aktarımı yapar.
  • MDA (Mail Delivery Agent): POP3 veya IMAP üzerinden e-postaları depolar.
  • MUA (Mail User Agent): Kullanıcı olarak e-postaları alır.

Bu bağlamda, bir e-posta sunucusu genellikle SMTP sunucusu ile eş anlamlıdır.

2.2. SMTP Sunucusu Bulma

İlk olarak, uygun bir SMTP sunucusu bulmalıyız:

$ nc -v smtp.cpynet.com 587
Connection to smtp.cpynet.com (IP_ADRESİ) 587 port [tcp/submission] succeeded!
220 smtp.cpynet.com ESMTP Postfix

Bu örnekte, netcat (nc) aracını kullanarak smtp.cpynet.com mail sunucusuna bağlantı sağladık. Bu tür bir bağlantıyı smtp.gmail.com gibi diğer sunucularla ve 465 gibi varsayılan portlarla da gerçekleştirebiliriz. Elbette, kendi sunucumuzu yerel olarak da barındırabiliriz.

2.3. Hesap Oluşturma

Herhangi bir mail sunucusu ile bağlantı kurabilmek için bir kimlik doğrulama yöntemine ihtiyacımız vardır. Bu genellikle bir kullanıcı adı ve şifre ile sağlanır. Bu kimlik bilgilerini, kendi barındırdığımız mail sunucusunda bir hesap oluşturarak veya daha yaygın olarak, ProtonMail, Gmail gibi çevrimiçi bir e-posta hizmet sağlayıcısında hesap oluşturarak elde edebiliriz.

Hesap oluşturduktan sonra genellikle aşağıdaki gibi bir dizi kimlik bilgisi alırız:

3. curl ile E-posta Gönderme

Gerekli bilgilere sahip olduktan sonra, e-posta göndermek için curl komutları verelim. Tüm durumlarda, ilgili bilgileri saklamak için açıklayıcı isimlere sahip değişkenler kullanacağız.

3.1. Temel E-posta Gönderimi

Bir alıcıya basit bir e-posta göndermek için şu komutu kullanabiliriz:

$ curl --ssl-reqd --url "smtps://$SERVER:$PORT" 
    --user "$USER:$PASS" 
    --mail-from "$SENDER_ADDRESS" 
    --mail-rcpt "$RECIPIENT_ADDRESS" 
    --upload-file "$MAIL_CONTENT_FILE"

Burada bazı curl seçeneklerini kullanmaktayız:

  • --ssl-reqd: SSL/TLS kullanmak için
  • --url: isteğin gönderileceği URL
  • --user: kimlik doğrulama için kullanılacak kimlik bilgileri
  • --mail-from: e-postanın gönderenini belirtir
  • --mail-rcpt: e-postanın alıcısını belirtir
  • --upload-file: e-posta içeriğinin yükleneceği dosya

3.2. E-posta İçeriği

$MAIL_CONTENT_FILE dosyası ya da standart giriş, e-posta gövdesini temsil eden basit bir metin mesajı içerebilir:

$ cat mailfile
Bu, e-posta gövdesinin içeriğidir.

Ancak, ayrıca SMTP’ye uygun olarak farklı satırlarda iki nokta üst üste ile ayrılmış başlıklar da ekleyebiliriz:

HEADER_NAME: HEADER_VALUE

Başka standart başlıklar da bulunmaktadır:

  • From: Gönderenin adı ve adresi
  • To: Alıcının adı ve adresi
  • Subject: E-postanın konusu

Daha karmaşık bir e-posta örneği için:

$ cat mailfile
From: "Emin Buyuk" <eminbuyuk@cpynet.com>
To: "Müşteri" <musteri@cpynet.com>
Subject: Temel Mesaj
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<b>Kalın metin</b>

3.3. curl Başlıkları

Tüm başlıklar için, mailfile içinde belirttiğimiz başlıkları doğrudan --header seçeneği ile de kullanabiliriz.

3.4. Ekli E-posta Gönderme

E-posta ile birlikte veri ve meta veriler eklemenin yanı sıra, e-postalara ek dosyalar da ekleyebiliriz:

$ cat xsendmail.sh
#!/usr/bin/env bash

SERVER='smtp.cpynet.com'
PORT='587'
USER='eminbuyuk@cpynet.com'
PASS='PAROLA'
SENDER_ADDRESS="$USER"
SENDER_NAME='Emin'
RECIPIENT_NAME='Müşteri'
RECIPIENT_ADDRESS='musteri@cpynet.com'
SUBJECT='Eklili E-posta'
MESSAGE='İlk Satırnİkinci Satır'
ATTACHMENT_FILE='/home/user/ekli_dosya.txt'
ATTACHMENT_TYPE="$(file --mime-type '$ATTACHMENT_FILE' | sed 's/.*: //')"

curl --ssl-reqd --url "smtps://$SERVER:$PORT" 
    --user "$USER:$PASS" 
    --mail-from "$SENDER_ADDRESS" 
    --mail-rcpt "$RECIPIENT_ADDRESS" 
    --header "Subject: $SUBJECT" 
    --header "From: $SENDER_NAME <$SENDER_ADDRESS>" 
    --header "To: $RECIPIENT_NAME <$RECIPIENT_ADDRESS>" 
    --upload-file <(echo -e "$MESSAGEnn" 
    "Content-Type: $ATTACHMENT_TYPE; name="$(basename "$ATTACHMENT_FILE")"n" 
    "Content-Transfer-Encoding: base64n" 
    "Content-Disposition: attachment; filename="$(basename "$ATTACHMENT_FILE")"n" 
    "$(base64 "$ATTACHMENT_FILE")")

Bu örnekte, basit bir e-posta ile birlikte bir dosya ekleyerek gönderiyoruz. Yine de, ATTACHMENT_TYPE değişkeni ile dosyanın içeriği belirlenmekte ve başlıklar arasına yerleştirilmektedir.

4. Sonuç

Bu makalede, curl ile terminalden e-posta gönderme yöntemlerini ayrıntılı bir şekilde inceledik. curl, çok çeşitli uygulamalar için kullanılabilen güçlü bir araçtır. E-posta gönderme özellikleri sayesinde otomatik bildirimler ve uyarılar gibi işlevsellikleri kolayca gerçekleştirebiliriz. Bu örnekler ve yaklaşımlar, e-posta gönderiminde daha fazla deneyim kazanmak isteyen geliştiricilere ve sistem yöneticilerine yardımcı olacaktır.

E-posta göndermenin, sunucular arası iletişim için sağladığı kolaylıkları ve otomasyon yeteneklerini göz önünde bulundurarak, bu yöntemi uygulamalarımızda kullanabiliriz.

Önceki Konu

Linux'ta Çalışan Bir Uygulamanın Dinlediği Portları Tespit Etme

Sonraki Konu

Linux Mount Komutu ile USB ve Disk Bağlama

Bültenimize Abone Olun 📬

En son gönderilerimizin doğrudan e-posta kutunuza gelmesi için e-posta bültenimize abone olun.
Düşüncelerinizi özgür bırakın ✨