Latest web development tutorials

Ruby envoi de courrier - SMTP

SMTP (protocole de transfert de courrier simple) qui est protocole Simple Mail Transfer, qui est un ensemble de règles pour transmettre des messages de la source à la destination, qu'il doit contrôler la façon dont les lettres de transit.

Ruby fournit un Net :: SMTP pour envoyer du courrier, et propose deux méthodes et nouveau départ:

nouvelle méthode a deux paramètres:

  • Lenom du serveurpar défaut est localhost
  • Lenuméro de portpar défaut est 25

méthodede démarrage a les paramètres suivants:

  • serveur -serveurSMTPIP, la valeur par défaut est localhost
  • leport -le numéro de port, la valeur par défaut est 25
  • domaine -le domaine électronique de l' expéditeur, ENV par défaut [ "HOSTNAME"]
  • compte -le nom d'utilisateur, la valeur par défaut est nul
  • motdepasse -mot de passe de l'utilisateur, la valeur par défaut est nul
  • authtype -le type d'authentification, la valeur par défaut estcram_md5

SMTP méthode objet instanciation appelle sendmail, les paramètres suivants:

  • lasource -Une chaîne ou un tableau de chaque itération ou quoi que ce soit à tout moment dans une déclaration.
  • expéditeur -une chaîne qui apparaît sous la forme de champ email.
  • bénéficiaires -une chaîne ou un tableau de chaînes représentant l'adresse du destinataire.

Exemples

Ce qui suit fournit un script Ruby simple pour envoyer du courrier:

require 'net/smtp'

message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
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

Dans l'exemple ci-dessus, vous avez mis en place un message e-mail de base, faites attention au format de titre correct. Un e-mail pour être From, To, et le sujet, entre le texte et les informations d'en-tête nécessite une ligne vide.

Utilisez Net :: SMTP pour se connecter au serveur SMTP sur la machine locale pour envoyer des messages à l'aide de processus send_message, les paramètres du procédé pour l'expéditeur du message avec l'e-mail du destinataire.

Si vous n'êtes pas en cours d'exécution sur le serveur SMTP de la machine, vous pouvez utiliser la communication Net :: SMTP avec le serveur SMTP distant. Si vous utilisez les services de messagerie Web (comme Hotmail ou Yahoo Mail), votre fournisseur d'email fournira des détails sur le serveur de messagerie d'envoi pour vous:

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

Le code ci-dessus va se connecter hôte mail.your-domain.com, numéro de port 25 du serveur de messagerie, si vous avez besoin de remplir le nom d'utilisateur et mot de passe, le code est le suivant:

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

Les exemples ci-dessus utilisent un nom d'utilisateur et mot de passe pour se connecter à l'hôte spécifié mail.your-domain.com, numéro de port 25 du serveur de messagerie.


Envoyer des mails HTML avec Ruby

Net :: SMTP fournit également un soutien pour l'envoi de messages au format HTML.

Lorsque l'envoi d'e-mail, vous pouvez définir la version MIME, type de document, le jeu de caractères pour envoyer des messages au format HTML.

Exemples

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

require 'net/smtp'

message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP e-mail test

This is an e-mail message to be sent in HTML format

<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

Envoyez un mail avec pièces jointes

Si vous avez besoin d'envoyer un contenu mixte de l'e-mail, vous devez définir le type de contenu est multipart / mixed. Ainsi, vous pouvez ajouter une pièce jointe dans le contenu du message.

Accessoire avant le transfert nécessite le pack d'utilisation ( "m") convertit son contenu en format base64.

Exemples

L'exemple suivant va envoyer des pièces jointes comme /tmp/test.txt e-mail:

require 'net/smtp'

filename = "/tmp/test.txt"
# 读取文件并编码为base64格式
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m")   # base64

marker = "AUNIQUEMARKER"

body =<<EOF
This is a test email to send an attachement.
EOF

# 定义主要的头部信息
part1 =<<EOF
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=#{marker}
--#{marker}
EOF

# 定义消息动作
part2 =<<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit

#{body}
--#{marker}
EOF

# 定义附件部分
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 occured: " + e  
end  

Remarque: Vous pouvez spécifier l'adresse d'une pluralité de transmission, mais nécessite l'utilisation de virgules.