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

发送邮件 SMTP Ruby

SMTP (Simple Mail Transfer Protocol) est un protocole de transfert de courrier simple, il s'agit d'un ensemble de règles utilisées pour transférer des emails d'une adresse source à une adresse de destination, et il contrôle la manière de transférer les lettres.

Ruby fournit Net::SMTP pour envoyer des emails et fournit deux méthodes nouveau et démarrer :

nouveau La méthode a deux paramètres :

  • nom de serveur par défaut localhost

  • numéro de port par défaut  25

démarrer La méthode a les paramètres suivants :

  • serveur  - IP du serveur SMTP, par défaut localhost

  • port  - Port, par défaut 25

  • domaine - Domaine de l'expéditeur de l'email, par défaut ENV["HOSTNAME"]

  • compte - Nom d'utilisateur, par défaut nil

  • mot_de_passe - Mot de passe de l'utilisateur, par défaut nil

  • authtype - Type de validation, par défaut cram_md5

La méthode d'exemple d'objectif SMTP appelle sendmail, les paramètres sont les suivants :

  • source  - Une chaîne ou un tableau ou quelque chose que renvoie chaque itérateur à tout moment.

  • expéditeur -Une chaîne, apparaissant dans le champ de forme de l'email.

  • destinataires - Une chaîne ou un tableau de chaînes, représentant les adresses des destinataires.

Exemple en ligne

Voici un script Ruby simple pour envoyer des emails :

Exemple en ligne

require 'net/smtp'
 
message = <<MESSAGE_END
From: Person Privé <[email protected]>
À: Un utilisateur de test <[email protected]>
Subject: SMTP e-mail test
 
Ceci est un test e-message mail.
MESSAGE_END
 
Net::SMTP.start('localhost') do |smtp|
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
end

Dans les exemples ci-dessus, vous avez configuré un message d'email de base, veuillez noter le format de titre correct. Un email doit inclure From, To et Subject, et un espace vide doit séparer le contenu du texte du header.

Connectez-vous au serveur SMTP local avec Net::SMTP, utilisez la méthode send_message pour envoyer un email, les paramètres de la méthode sont l'email de l'expéditeur et l'email du destinataire.

Si vous n'exécutez pas un serveur SMTP sur votre machine locale, vous pouvez utiliser Net::SMTP pour communiquer avec un serveur SMTP distant. Si vous utilisez un service de messagerie en ligne (comme Hotmail ou Yahoo Mail), votre fournisseur de services d'email vous fournira les détails du serveur d'envoi :

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

Le code ci-dessus se connecte à l'hôte mail.your-domain.com, le port est 25du serveur de messagerie, si vous devez saisir un nom d'utilisateur et un mot de passe, le code suivant s'applique :

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

Les exemples ci-dessus utilisent des noms d'utilisateur et des mots de passe spécifiés pour se connecter à l'hôte mail.your-domain.com, le port est 25du serveur de messagerie.

Envoi d'emails HTML avec Ruby

Net::SMTP offre également le support pour l'envoi d'emails au format HTML.

Lors de l'envoi d'un email, vous pouvez configurer la version MIME, le type de document et le jeu de caractères pour envoyer des emails au format HTML.

Exemple en ligne

Les exemples suivants sont utilisés pour envoyer des emails au format HTML :

Exemple en ligne

require 'net/smtp'
 
message = <<MESSAGE_END
From: Person Privé <[email protected]>
À: Un utilisateur de test <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP e-mail test
 
This is an e-message e-mail à envoyer en format HTML
 
<b>This is an 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

Envoyer un e-mail avec pièce jointe

Pour envoyer un e-mail avec contenu mixte, il est nécessaire de configurer le Content-type multipart/mixed. De cette manière, vous pouvez ajouter du contenu à la pièce jointe dans l'e-mail.

La pièce jointe doit être codée avant le transfert pack("m") La fonction transforme son contenu en base64 Format.

Exemple en ligne

Les exemples suivants enverront la pièce jointe suivante /tmp/E-mail du fichier test.txt :

Exemple en ligne

require 'net/smtp'
 
filename = "/tmp/test.txt"
# Lire le fichier et le coder en base64Format
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m") # base64
 
marker = "AUNIQUEMARKER"
 
body =<<EOF
Ceci est un e-mail de test pour envoyer une pièce jointe.
EOF
 
# Définition des informations de tête principales
part1 =<<EOF
De: Personne privée <[email protected]>
À: Un utilisateur de test <[email protected]>
Subject: Envoyage d'une pièce jointe
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="#{marker}"
--#{marker}
EOF
 
# Définition de l'action du message
part2 =<<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit
 
#{body}
--#{marker}
EOF
 
# Définition de la partie pièce jointe
part3 =<<EOF
Content-Type: multipart/mixed; name="#{filename}"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="#{filename}"
 
#{encodedcontent}
--#{marker}--
EOF
 
mailtext = part1 + part2 + part3
 
# 发送邮件
begin 
  Net::SMTP.start('localhost') do |smtp|
     smtp.sendmail(mailtext, '[email protected]',
                          ['[email protected]'])
  end
rescue Exception => e  
  print "Exception occurred: " + e  
end

注意:你可以指定多个发送的地址,但需要使用逗号隔开。