English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby-Senden von E-Mails SMTP

SMTP (Simple Mail Transfer Protocol) ist das einfache Mail-Übertragungsprotokoll. Es ist eine Reihe von Regeln, die das Senden von E-Mails von der Quelle zur Zieladresse regeln. Es kontrolliert die Übertragungsmethode der E-Mails.

Ruby bietet Net::SMTP an, um E-Mails zu senden, und bietet zwei Methoden new und start an:

Neu Die Methode hat zwei Parameter:

  • Servername Standardmäßig localhost

  • Portnummer Standardmäßig  25

Start Die Methode hat die folgenden Parameter:

  • Server  - IP-Adresse des SMTP-Servers, Standard ist localhost

  • port  - Portnummer, Standard ist 25

  • domain - Domain des Absenders der E-Mail, Standard ist ENV["HOSTNAME"]

  • account - Benutzername, Standard ist nil

  • password - Benutzerpasswort, Standard ist nil

  • authtype - Überprüfungsart, Standard ist cram_md5

Der Beispielaufruf der Methoden des SMTP-Objekts ist sendmail, die Parameter sind wie folgt:

  • Quelle  - Eine Zeichenkette oder ein Array oder etwas, das jeder Iterator zu jeder Zeit zurückgibt.

  • Absender -Eine Zeichenkette, die im E-Mail-Formularfeld appears.

  • Empfänger - Eine Zeichenkette oder Zeichenfolgen-Array, das die Empfängeradresse darstellt.

Online-Beispiel

Nachfolgend finden Sie ein einfaches Ruby-Skript zum Senden von E-Mails:

Online-Beispiel

require 'net/smtp'
 
message = <<MESSAGE_END
Von: Private Person <[email protected]>
An: Ein Testbenutzer <[email protected]>
Betreff: SMTP E-E-Mail-Test
 
Dies ist ein Test e-mail message.
MESSAGE_END
 
Net::SMTP.start('localhost') do |smtp|
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
end

In diesem Beispiel haben Sie eine grundlegende E-Mail-Nachricht eingerichtet, beachten Sie die korrekte Formatierung des Titels. Eine E-Mail muss von 'From', 'To' und 'Subject' bestehen, und zwischen dem Textinhalt und den Header-Informationen muss eine Leerzeile sein.

Verwenden Sie Net::SMTP, um sich mit dem lokalen SMTP-Server auf Ihrem Computer zu verbinden, und verwenden Sie die send_message-Methode, um E-Mails zu senden, wobei die Methodenparameter der Absender- und Empfänger-E-Mail sind.

Wenn Sie keinen lokalen SMTP-Server auf Ihrem Computer haben, können Sie Net::SMTP verwenden, um mit einem Remote-SMTP-Server zu kommunizieren. Wenn Sie ein Netzwerk-E-Mail-Dienst (wie Hotmail oder Yahoo Mail) verwenden, stellt Ihr E-Mail-Anbieter Ihnen die Details des Senderservers zur Verfügung:

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

Dieser Code stellt eine Verbindung zum Host mail.your her-domain.com, Portnummer 25E-Mail-Server, falls Benutzername und Passwort erforderlich sind, lautet der Code wie folgt:

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

Der obige Beispiel verwendet die spezifischen Benutzername und Passwort, um eine Verbindung zum Host mail.your herzustellen-domain.com, Portnummer 25E-Mail-Server.

HTML-E-Mails mit Ruby senden

Net::SMTP bietet ebenfalls Unterstützung für den Versand von E-Mails im HTML-Format.

Beim Senden von E-Mails können Sie die MIME-Version, den Dokumenttyp und den Zeichensatz einstellen, um E-Mails im HTML-Format zu senden.

Online-Beispiel

Nachfolgender Beispiel wird verwendet, um E-Mails im HTML-Format zu senden:

Online-Beispiel

require 'net/smtp'
 
message = <<MESSAGE_END
Von: Private Person <[email protected]>
An: Ein Testbenutzer <[email protected]>
MIME-Version: 1.0
Content-Typ: text/html
Betreff: SMTP E-E-Mail-Test
 
Dies ist eine E-E-Mail-Nachricht, die im HTML-Format gesendet werden soll
 
<b>This is HTML message.</b>
<h1>This is headline.</h1>
MESSAGE_END
 
Net::SMTP.start('localhost') do |smtp|
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
end

Senden einer E-Mail mit Anhang

Für die Sendung von E-Mails mit gemischtem Inhalt muss Content-Typ multipart/gemischt. Auf diese Weise können Anhangsinhalte in die E-Mail eingefügt werden.

Der Anhang muss vor dem Übertragen mit pack("m") Die Funktion wandelt den Inhalt in base um64 Format.

Online-Beispiel

Nachfolgender Beispiel wird den Anhang senden: /tmp/E-Mail mit test.txt:

Online-Beispiel

require 'net/smtp'
 
filename = "/tmp/test.txt"
# Lesen des Dateis und Kodieren als base64Format
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m") # base64
 
marker = "AUNIQUEMARKER"
 
body =<<EOF
Dies ist eine Test-E-Mail, um einen Anhang zu senden.
EOF
 
# Definition der Hauptkopfinformationen
part1 =<<EOF
Von: Private Person <[email protected]>
An: Ein Testbenutzer <[email protected]>
Betreff: Sending Attachement
MIME-Version: 1.0
Content-Typ: mehrteilig/gemischt; boundary="#{marker}"
--#{marker}
EOF
 
# Definition der Nachrichtenaktion
part2 =<<EOF
Content-Typ: text/plain
Content-Transfer-Kodierung:8bit
 
#{body}
--#{marker}
EOF
 
# Definition des Anhangs
part3 =<<EOF
Content-Typ: mehrteilig/gemischt; 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 aufgetreten: " + e  
end

Hinweis:Sie können mehrere zu sendende Adressen angeben, aber Sie müssen Kommas trennen.