English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
Voici un script Ruby simple pour envoyer des emails :
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.
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.
Les exemples suivants sont utilisés pour envoyer des emails au format HTML :
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
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.
Les exemples suivants enverront la pièce jointe suivante /tmp/E-mail du fichier test.txt :
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
注意:你可以指定多个发送的地址,但需要使用逗号隔开。