Das Post-Office Protocol (POP3) dient zum Abholen von E-Mails, die in einem elektronischen Postfach gelagert worden sind. Im Beispiel holt Armin seine Mails von approximity.com und leert die Mailbox auf dem Server.
require 'net/pop'
# anmelden
Net::POP3.start('approximity.com', 110,
'armin', 'sagichnicht') { |pop|
# jede nachricht ...
pop.each_mail do |msg|
# ... anzeigen und vom Server löschen
msg.pop($stdout)
msg.delete
end
}
Zum Versenden von E-Mails wird das Simple Mail Transfer Protocol (SMTP) verwendet. Hier schickt Armin mit sendmail eine E-Mail an Stefan über den Server von approximity.com:
require 'net/smtp'
# Nachricht mit RFC 822-Headern
msg = <<END_OF_MESSAGE
From: armin <armin@approximity.com>
To: stefan <stefan@approximity.com>
Subject: ruby test mail
Date: #{Time.now.strftime("%a, %d %b %Y %H:%M:%S %z %Z")}
Message-Id: <#{"%.8f" % Time.now.to_f}@approximity.com>
Wie spät ist es?
END_OF_MESSAGE
# Nachricht verschicken
Net::SMTP.start('approximity.com', 25) { |smtp|
smtp.send_mail(msg, 'armin@approximity.com',
's@xss.de')
}
Wenn beim Ausprobieren des Beispiels (mit dem eigenen SMTP-Server!) der Versand nicht funktioniert, sollte man als Erstes sicherstellen, dass man mit den verwendeten Adressen den Server überhaupt als Relay-Server einsetzen darf. Um Spammer auszuschalten, leiten viele Mailserver die Post nur dann weiter, wenn entweder der Empfänger oder der Absender auf der verwalteten Domain bekannt ist.
Man kann eine Nachricht auch häppchenweise
mit write oder << auf einen Socket (Abschnitt 19.5)
schreiben. Hier antwortet Stefan über den Server xss.de:
require 'net/smtp'
Net::SMTP.start('xss.de') do |smtp|
smtp.ready('s@xss.de',
'armin@approximity.com') do |sock|
sock.write "Subject: Re: Testmail\r\n"
sock.write "\r\n"
sock.write "#{Time.now}"
end
end