Ruby E-Mail-Versand - SMTP

SMTP (Simple Mail Transfer Protocol) ist eine Reihe von Regeln für die Übertragung von E-Mails von einer Quelladresse an eine Zieladresse und regelt, wie Nachrichten weitergeleitet werden.

Ruby bietet Net::SMTP zum Senden von E-Mails und bietet zwei Methoden: new und start:

newDie Methode hat zwei Parameter:

  • ServernameStandardwert ist localhost
  • PortnummerStandardwert ist 25

startDie Methode hat die folgenden Parameter:

  • server- SMTP-Server-IP, standardmäßig localhost
  • port- Portnummer, standardmäßig 25
  • domain- Absenderdomain, standardmäßig ENV["HOSTNAME"]
  • account- Benutzername, standardmäßig nil
  • password- Benutzerpasswort, standardmäßig nil
  • authtype- Authentifizierungstyp, standardmäßigcram_md5

Die Instanzmethode des SMTP-Objekts ruft sendmail mit den folgenden Parametern auf:

  • source- Ein String, ein Array oder irgendetwas, das vom each-Iterator zu einem beliebigen Zeitpunkt zurückgegeben wird.
  • sender- Ein String, der im Formularfeld der E-Mail erscheint.
  • recipients- Ein String oder ein Array von Strings, die die Adresse des Empfängers darstellen.

Beispiel

Das Folgende bietet ein einfaches Ruby-Skript zum Versenden von E-Mails:

Beispiel

require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> Subject: SMTP e-mail test This is a test e-mail message. MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, '[email protected]', '[email protected]' end
Im obigen Beispiel haben Sie eine einfache E-Mail-Nachricht eingerichtet. Beachten Sie das korrekte Header-Format. Eine E-Mail benötigt From, To und Subject, und zwischen dem Textinhalt und den Header-Informationen muss eine Leerzeile stehen.

Verwenden Sie Net::SMTP, um eine Verbindung zum SMTP-Server auf dem lokalen Rechner herzustellen, und verwenden Sie die Methode send_message, um die E-Mail zu senden. Die Methodenparameter sind die E-Mail-Adresse des Absenders und die E-Mail-Adresse des Empfängers.

Wenn auf Ihrem lokalen Rechner kein SMTP-Server ausgeführt wird, können Sie Net::SMTP verwenden, um mit einem entfernten SMTP-Server zu kommunizieren. Wenn Sie Webmail-Dienste (wie Hotmail oder Yahoo Mail) verwenden, stellt Ihnen Ihr E-Mail-Anbieter die Details des Postausgangsservers zur Verfügung:

Net::SMTP.start('mail.your-domain.com')

Der obige Code verbindet sich mit dem Mailserver mit Host mail.your-domain.com und Port 25. Wenn Sie einen Benutzernamen und ein Passwort eingeben müssen, lautet der Code wie folgt:

Net::SMTP.start('mail.your-domain.com', 25, 'localhost', 'username', 'password', :plain)

Das obige Beispiel verwendet den angegebenen Benutzernamen und das angegebene Passwort, um sich mit dem Mailserver mit Host mail.your-domain.com und Port 25 zu verbinden.


HTML-E-Mails mit Ruby senden

Net::SMTP bietet auch Unterstützung für das Senden von E-Mails im HTML-Format.

Beim Senden einer E-Mail können Sie die MIME-Version, den Dokumenttyp und den Zeichensatz festlegen, um eine E-Mail im HTML-Format zu senden.

Beispiel

Das folgende Beispiel wird verwendet, um eine E-Mail im HTML-Format zu senden:

Beispiel

require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> MIME-Version: 1.0 Content-type: text/html Subject: SMTP-E-Mail-Test Dies ist eine E-Mail-Nachricht, die im HTML-Format gesendet werden soll <b>Dies ist eine HTML-Nachricht.</b> <h1>Dies ist die Überschrift.</h1> MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, '[email protected]', '[email protected]' end

E-Mails mit Anhängen senden

Wenn Sie eine E-Mail mit gemischtem Inhalt senden möchten, müssen Sie Content-type auf multipart/mixed setzen. Auf diese Weise können Sie Anhangsinhalt zur E-Mail hinzufügen.

Vor der Übertragung muss der Anhang diepack("m")Funktion verwenden, um seinen Inhalt in das base64-Format umzuwandeln.

Beispiel

Das folgende Beispiel sendet eine E-Mail mit Anhang /tmp/test.txt:

Beispiel

require 'net/smtp' filename = "/tmp/test.txt" #Die Datei lesen und im base64-Format kodieren filecontent = File.read(filename) encodedcontent = [filecontent].pack("m") # base64 marker = "AUNIQUEMARKER" body =<<EOF Dies ist a ein Test E-Mail zum Senden eines Anhangs. EOF #Definieren Sie die Hauptheader-Informationen part1 =<<EOF From: Private Person <me@fromdomain.net> To: A Test User <test@todmain.com> Subject: Senden Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=#{marker} --#{marker} EOF # Nachrichtenaktion definieren part2 =<<EOF Content-Type: text/plain Content-Transfer-Encoding:8bit #{body} --#{marker} EOF #Anhangsteil definieren part3 =<<EOF Content-Type: multipart/mixed; name=\"#{filename}\"Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename="#{filename}" #{encodedcontent} --#{marker}-- EOF mailtext = part1 + part2 + part3 # E-Mail senden begin Net::SMTP.start('localhost') do |smtp| smtp.sendmail(mailtext, '[email protected]', ['[email protected]']) end rescue Exception => e print "Exception occured: " + e end

Hinweis:Sie können mehrere Empfängeradressen angeben, aber sie müssen durch Kommas getrennt werden.

Andere Erweiterungen