Ruby ile POP3 ve SMTP

Merhabalar,

Önceki yazımızda Ruby ile FTP ve HTTP‘den bahsetmiş ve bu konuda birkaç Örnek yapmıştık. Bununla beraber Ruby’nin ağ yetenekleri içerisinde POP3, SMTP gibi elektronik posta ile ilgili yüksek seviyeli sınıfların varlığından da bahsetmiştik. Başlıktan da anlaşılacağı gibi, bu yazımızda sizlerle beraber POP3 ve SMTP konularına değineceğiz. Kendimize güzel ve popüler birkaç sorun bulup bu sorunları çÖzmeye çalışacağız.

Öncelikle POP3 protokolü ile herhangi bir elektronik mail sunucusu ile haberleşme konusunu inceleyelim, sonrasında SMTP protokolü ile ilgili Örneğimize geçiş yaparız.

POP3 protokolü ile ilgili popüler bir sorun olarak; WordPress‘i Örnek verebiliriz. Şimdi “ne alakası var kardeşim” diyeceksiniz, demeyin :) biraz sabredin.. :) WordPress’in güzel bir yeteneği var, belirli bir e-posta adresini kontrol edebiliyor, eğer bu e-posta adresine bir e-posta gelmiş ise, bu e-postanın içeriğini bir yazı olarak yayımlıyor… :) güzel bir Özellik değil mi, peki biz bunu Ruby’de nasıl yaparız ? İşte asıl soru bu.

Ve işte sorunun cevabı :)
[ruby]require ‘net/pop’

# Yeni bir POP3 nesnesi yaratılır.
pop = Net::POP3.new(‘pop3.sunucu.com’)
begin
# start method’u protokol oturumu başlatılır.
pop.start(‘kullanici.ismi@sunucu.com’, ‘password’)
puts “Başarı ile sunucuya bağlanıldı..”

# E-postaları sonucudan alınır.
pop.mails.each do |msg|
msgHeader = msg.header.split(“\r\n”)
puts msgHeader.grep(/^From: /)
puts msgHeader.grep(/^To: /)
puts msgHeader.grep(/^Subject: /)

# Mesajın Body bÖlümü diğer bÖlümlerden ayrılır.
lastHeaderRow = msg.header.to_a[-1]
foundEndOfHeader = false
body = “”
msg.all.each_line do |line|
if line == lastHeaderRow && foundEndOfHeader == false
foundEndOfHeader = true
elsif foundEndOfHeader
body << line << "\n" end end if body.size > 100
puts “Body : #{body[0,100]}…”
else
puts “Body : #{body}”
end
end
rescue Exception => err
puts err.message
puts err.backtrace.join(“\n”)
ensure
pop.finish if pop.started?
puts “Başarı ile sonlandı..” unless pop.started?
end[/ruby]
Şimdi Ruby ile mail gÖnderelim, herhangi bir ekstra kütüphane kullanmadan.
[ruby]require ‘net/smtp’

Net::SMTP.start(‘smtp.sunucu.com’, 25, ‘domain.sunucu.com’, ‘kullanici.ismi@sunucu.com’, ‘sifre’) do |smtp|
smtp.ready(‘kullanici.ismi@sunucu.com’, ‘uordek at esiyo.net’) do |mail|
mail.write “From: kullanici.ismi@sunucu.com\n”
mail.write “To: uordek at esiyo.net\n”
mail.write “Subject: Merhaba\n”
mail.write “\n”
mail.write “test mailini\n”
end
end[/ruby]

Kolay gelsin :)

Share