English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SMTP (Simple Mail Transfer Protocol) es el Protocolo de Transferencia de Correos Electrónicos Simple, es un conjunto de reglas utilizado para enviar correos electrónicos de una dirección de origen a una dirección de destino, y controla la forma en que se transfieren los correos.
Ruby proporciona Net::SMTP para enviar correos electrónicos y proporciona dos métodos new y start:
new El método tiene dos parámetros:
nombre del servidor Por defecto es localhost
número de puerto Por defecto es 25
start El método tiene los siguientes parámetros:
servidor - SMTP 服务器 IP, 默认为 localhost
port - 端口号,默认为 25
domain - 邮件发送者域名,默认为 ENV["HOSTNAME"]
account - 用户名,默认为 nil
password - 用户密码,默认为nil
authtype - 验证类型,默认为 cram_md5
SMTP 对象示例化方法调用了 sendmail, 参数如下:
source - 一个字符串或数组或每个迭代器在任一时间中返回的任何东西。
sender -一个字符串,出现在 email 的表单字段。
recipients - 一个字符串或字符串数组,表示收件人的地址。
以下提供了简单的Ruby脚本来发送邮件:
require 'net/smtp' message = <<MESSAGE_END From: Private Person <[email protected]> Para: Un Usuario de Prueba <[email protected]> Asunto: SMTP e-correo electrónico de prueba This is a test e-mail message. MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, '[email protected]', '[email protected]' final
在以上示例中,你已经设置了一个基本的电子邮件消息,注意正确的标题格式。一个电子邮件要要From,To和Subject,文本内容与头部信息间需要一个空行。
使用Net::SMTP连接到本地机器上的SMTP服务器,使用send_message方法来发送邮件,方法参数为发送者邮件与接收者邮件。
如果你没有运行在本机上的SMTP服务器,您可以使用Net::SMTP与远程SMTP服务器进行通信。如果使用网络邮件服务(如Hotmail或雅虎邮件),您的电子邮件提供者会为您提供发送邮件服务器的详细信息:
Net::SMTP.start('mail.your-domain.com')
以上代码将连接主机为 mail.your-domain.com,端口号为 25的邮件服务器,如果需要填写用户名密码,则代码如下:
Net::SMTP.start('mail.your-domain.com', 25, 'localhost', 'username', 'password', :plain)
以上示例使用了指定的用户名密码连接到主机为 mail.your-domain.com,端口号为 25的邮件服务器。
Net::SMTP同样提供了支持发送 HTML 格式的邮件。
发送电子邮件时你可以设置MIME版本,文档类型,字符集来发送HTML格式的邮件。
以下示例用于发送 HTML 格式的邮件:
require 'net/smtp' message = <<MESSAGE_END From: Private Person <[email protected]> Para: Un Usuario de Prueba <[email protected]> MIME-Versión: 1.0 Contenido-tipo: texto/html Asunto: SMTP e-correo electrónico de prueba Este es un e-mensaje de correo electrónico para enviar en formato HTML <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]' final
Si se necesita enviar un correo electrónico con contenido mixto, se debe configurar el Content-tipo multipart/mixed. de esta manera se puede agregar contenido adjunto al correo electrónico.
La adjunto necesita ser usada pack("m") La función lo convierte en base64 formato.
El siguiente ejemplo enviará el adjunto como /tmp/Correo electrónico de test.txt:
require 'net/smtp' filename = "/tmp/test.txt" # Leer archivo y codificar en base64Formato filecontent = File.read(filename) contenido_codificado = [filecontent].pack("m") # base64 marcador = "AUNIQUEMARKER" cuerpo =<<EOF Este es un correo electrónico de prueba para enviar un adjunto. EOF # Definición de la información principal de la cabecera part1 =<<EOF De: Persona Privada <[email protected]> Para: Un Usuario de Prueba <[email protected]> Asunto: Enviando Adjunto MIME-Versión: 1.0 Contenido-Tipo: multipart/mixed; límite=#{marker} --#{marker} EOF # Definición de la acción del mensaje part2 =<<EOF Contenido-Tipo: texto/plano Contenido-Transferencia-Codificación:8bit #{body} --#{marker} EOF # Definición de la parte adjunta part3 =<<EOF Contenido-Tipo: multipart/mixed; nombre=\"#{filename}\" Contenido-Transferencia-Codificación: base64 Contenido-Disposición: adjunto; nombre_de_archivo="#{filename}" #{encodedcontent} --#{marker}-- EOF mailtext = part1 + part2 + part3 # Enviar correo begin Net::SMTP.start('localhost') do |smtp| smtp.sendmail(mailtext, '[email protected]', ['[email protected]']) final rescue Exception => e print "Exception occurred: " + e final
Nota:Puedes especificar múltiples direcciones de envío, pero deben separarse con comas.