Ruby 发送电子邮件

  • 发送电子邮件

    Simple Mail Transfer Protocol(SMTP)是一种协议,用于处理在邮件服务器之间发送电子邮件和路由电子邮件。Ruby为 Simple Mail Transfer Protocol(SMTP)客户端连接提供了Net::SMTP类,并提供了newstart两种类方法。
    new有两个参数-
    • 服务器名称默认为localhost。
    • 默认为端口 25 的端口号。
    start方法将这些参数-
    • server - SMTP服务器的IP名,默认为localhost。
    • port - 端口号,默认为25。
    • domain - 邮件发件人的域,默认为ENV[“HOSTNAME”]。
    • user - 用户名,默认值是零。
    • password - 用户密码,默认为无。
    • authType - 授权类型,默认为cram_md5。
    SMTP对象具有一个称为sendmail的实例方法,通常将用于执行邮件发送工作。它需要三个参数-
    • source - 一个字符串或阵列或用任何每个迭代一次返回一个字符串。
    • sender - 将在出现的字符串从电子邮件的领域。
    • recipients - 一个字符串或表示收件人的收件人(多个)字符串的数组。
    例如:
    
    require 'net/smtp'
    
    message = <<MESSAGE_END
    From: Private Person <me@fromdomain.com>
    To: A Test User <test@todomain.com>
    Subject: SMTP e-mail test
    
    This is a test e-mail message.
    MESSAGE_END
    
    Net::SMTP.start('localhost') do |smtp|
      smtp.send_message message, 'me@fromdomain.com', 'test@todomain.com'
    end
    
    在这里,您已经使用文档在邮件中放置了基本电子邮件,请注意正确设置标题格式。电子邮件需要发件人,收件人和主题标头,并以空白行与电子邮件正文分开。要发送邮件,请使用Net::SMTP连接到计算机上的SMTP服务器,然后使用send_message方法以及消息,发件人地址和目标地址作为参数(即使from和to地址是在电子邮件本身中,它们并不总是用于路由邮件)。如果您不在计算机上运行SMTP服务器,则可以使用Net :: SMTP与远程SMTP服务器通信。除非您使用Webmail服务(例如Hotmail或Yahoo! Mail),否则您的电子邮件提供商将向您提供可以提供给Net::SMTP的外发邮件服务器详细信息,如下所示-
    
    Net::SMTP.start('mail.your-domain.com')
    
    此行代码使用任何用户名或密码连接到mail.your-domain.com的端口25上的SMTP服务器。但是,如果需要,您可以指定端口号和其他详细信息。例如-
    
    Net::SMTP.start('mail.your-domain.com',  25,   'localhost',  'username', 'password' :plain)
    
    本示例使用纯文本格式的用户名和密码连接到mail.your-domain.com上的SMTP服务器。它将客户端的主机名标识为localhost。
  • 使用Ruby发送HTML电子邮件

    当您使用Ruby发送文本消息时,所有内容将被视为简单文本。即使您将HTML标签包含在文本消息中,它也将显示为简单文本,并且不会根据HTML语法设置HTML标签的格式。但是Ruby Net::SMTP提供了将HTML消息作为实际HTML消息发送的选项。发送电子邮件时,您可以指定Mime版本,内容类型和字符集来发送HTML电子邮件。
    :以下是将HTML内容作为电子邮件发送的示例。尝试一次-
    
    require 'net/smtp'
    
    message = <>MESSAGE_END
    From: Private Person <me@fromdomain.com>
    To: A Test User <test@todomain.com>
    MIME-Version: 1.0
    Content-type: text/html
    Subject: SMTP e-mail test
    
    这是要以HTML格式发送的电子邮件
    
    这是HTML消息。
    
    

    这是标题。

    
    MESSAGE_END
    
    Net::SMTP.start('localhost') do |smtp|
       smtp.send_message message, 'me@fromdomain.com', 'test@todomain.com'
    end
    
  • 通过电子邮件发送附件

    要发送包含混合内容的电子邮件,需要将Content-type标头设置为multipart/mixed。然后可以在边界内指定文本和附件节。边界以两个连字符开头,后跟一个唯一的数字,该数字不能出现在电子邮件的消息部分。表示电子邮件最后部分的最后边界也必须以两个连字符结尾。传输前,应使用pack(“m”)函数对附件进行编码,使其具有base64编码。
    :以下是示例,该示例将发送文件/tmp/test.txt作为附件。
    
    require 'net/smtp'
    
    filename = "/tmp/test.txt"
    # Read a file and encode it into base64 format
    filecontent = File.read(filename)
    encodedcontent = [filecontent].pack("m")   # base64
    
    marker = "AUNIQUEMARKER"
    body = <<EOF
    This is a test email to send an attachement.
    EOF
    
    # Define the main headers.
    part1 = <<EOF
    From: Private Person <me@fromdomain.net>
    To: A Test User <test@todmain.com>
    Subject: Sending Attachement
    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary = #{marker}
    --#{marker}
    EOF
    
    # Define the message action
    part2 = <<EOF
    Content-Type: text/plain
    Content-Transfer-Encoding:8bit
    
    #{body}
    --#{marker}
    EOF
    
    # Define the attachment section
    part3 = <<EOF
    Content-Type: multipart/mixed; name = \"#{filename}\"
    Content-Transfer-Encoding:base64
    Content-Disposition: attachment; filename = "#{filename}"
    
    #{encodedcontent}
    --#{marker}--
    EOF
    
    mailtext = part1 + part2 + part3
    
    # Let's put our code in safe area
    begin 
       Net::SMTP.start('localhost') do |smtp|
          smtp.sendmail(mailtext, 'me@fromdomain.net', ['test@todmain.com'])
       end
    rescue Exception => e  
       print "Exception occured: " + e  
    end  
    
    注意 – 您可以在数组内指定多个目标,但应将其用逗号分隔。