Latest web development tutorials

Rubí enviar correo - SMTP

SMTP (Simple Mail Transfer Protocol) que es Simple Mail Transfer Protocol, que es un conjunto de normas para la transmisión de mensajes desde el origen al destino, lo que se tiene que controlar la forma en que las cartas de tránsito.

Rubí proporciona un Net :: SMTP para enviar correo, y proporciona dos métodos y nuevo comienzo:

nuevo método tiene dos parámetros:

  • Elnombredelservidorpor defecto es localhost
  • Elnúmero de puertopredeterminado es 25

métodostart tiene los siguientes parámetros:

  • servidor -IP del servidorSMTP,el valor por defecto es localhost
  • puerto -el número de puerto, el valor predeterminado es 25
  • Dominio -dominio de correo del remitente, por defecto ENV [ "hostname"]
  • cuenta -el nombre de usuario, el valor predeterminado es nulo
  • contraseña -la contraseña del usuario, el valor predeterminado es nulo
  • AuthType -el tipo de autenticación, el valor predeterminado escram_md5

SMTP método de objeto de instancias llama sendmail, los siguientes parámetros:

  • fuente -Una cadena o matriz de cada iteración o cualquier cosa en cualquier momento de un cambio.
  • emisor -una cadena que aparece en forma de campo de correo electrónico.
  • - los destinatariosuna cadena o matriz de cadenas que representan la dirección del destinatario.

Ejemplos

A continuación se proporciona un sencillo script Ruby a enviar correo:

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

En el ejemplo anterior, se ha configurado un mensaje de correo electrónico básico, prestar atención al formato de título correcto. Un e-mail que se va De, Para, Asunto y, entre el texto y la información de cabecera requiere una línea en blanco.

Utilice Net :: SMTP para conectar con el servidor SMTP en la máquina local para enviar mensajes utilizando el proceso send_message, los parámetros del proceso para el remitente del mensaje con el destinatario de correo.

Si no se está ejecutando en el servidor SMTP de la máquina, se puede utilizar la comunicación Net :: SMTP con el servidor SMTP remoto. Si utiliza servicios de correo web (como Hotmail o Yahoo Mail), su proveedor de correo electrónico proporcionará detalles del servidor de correo que envía para usted:

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

El código anterior se conectará anfitrión mail.your-domain.com, número de puerto 25 del servidor de correo, si tiene que rellenar el nombre de usuario y contraseña, el código es el siguiente:

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

Los ejemplos anteriores utilizan un nombre de usuario y contraseña para conectarse al host especificado mail.your-domain.com, número de puerto 25 del servidor de correo.


Enviar correo electrónico HTML con Ruby

Net :: SMTP también proporciona soporte para el envío de mensajes en formato HTML.

Al enviar un e-mail puede configurar la versión MIME, tipo de documento, el conjunto de caracteres para enviar mensajes en formato HTML.

Ejemplos

Los siguientes ejemplos se utilizan para enviar mensajes en formato 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

Enviar correo con archivos adjuntos

Si necesita enviar un contenido mixto de correo electrónico, es necesario configurar el tipo de contenido es multipart / mixed. Así que usted puede añadir un archivo adjunto en el contenido del mensaje.

Accesorio antes de la transferencia requiere el paquete de uso ( "m") convierte su contenido en formato de base 64.

Ejemplos

El siguiente ejemplo enviar archivos adjuntos de correo electrónico como /tmp/test.txt:

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  

Nota: Puede especificar la dirección de una pluralidad de transmisión, pero requiere el uso de comas.