简单邮件传输协议(SMTP)发送电子邮件及路由的e-mail邮件服务器之间的协议处理。
Ruby 提供 Net::SMTP 类的简单邮件传输协议(SMTP)客户端的连接,并提供了两个新的方法:new 和 start.
new 带两个参数:
start 方法带有以下这些参数:
SMTP对象有一个实例方法调用sendmail,后者通常会被用来做邮寄消息的工作。它有三个参数:
例子:
下面是一个简单使用Ruby脚本的方法来发送一个电子邮件。试一次看看吧:
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 方法,从地址,目的地址作为参数(即使地址电子邮件本身范围内,这些并非总是用来将邮件路由)。
如果还没有在机器上运行一个SMTP服务器,可以使用的Net::SMTP远程SMTP服务器进行通信。除非使用一个webmail服务(如Hotmail或雅虎邮件),电子邮件提供商将提供外发邮件服务器的细节,可以提Net::SMTP,具体如下:
Net::SMTP.start('mail.your-domain.com')
这行代码连接到SMTP服务器mail.your-domain.com 端口25。,而无需使用任何用户名或密码。不过,如果需要的话可以指定端口号或其他参数等。例如:
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 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, 'me@fromdomain.com', 'test@todomain.com' end
作为电子邮件的附件发送:
混合内容发送一封电子邮件,要求设置Content-type头为 multipart/mixed。然后,文本和附件部分可以指定 boundaries 范围内。
两个连字符后跟一个唯一的编号,不能出现在电子邮件的消息部分的边界开始。最后一个边界表示电子邮件的最后一节的结尾也必须有两个连字符。
附加文件使用 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
注意:可以指定多个目的地内部数组,但他们需要用逗号分隔。
主要内容:实例,使用 Ruby 发送 HTML 邮件,实例,发送带附件的邮件,实例SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 Ruby提供了 Net::SMTP 来发送邮件,并提供了两个方法 new 和 start: new 方法有两个参数: server name 默认为 localhost port number 默认为 25 start 方法有以下参数:
你好;我正在使用s.o上给出的答案进行smtp邮件;(如果搜索,相信这是第一个结果) 但我仍然没有收到邮件;任何人都可以帮助发现任何错误或提供替代解决方案吗?我已经使用了内置的邮件程序,但它没有被认证,请参阅 -
我正在使用C#使用SMTP和gmail服务器发送电子邮件。 下面是我用于发送电子邮件的代码。我遇到了一些错误,即。 SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:需要5.5.1身份验证。 我做错了什么?我如何使用gmail发送电子邮件。
我得到的错误是:无效地址:mysmtppassxxxxSMTP->错误:连接到服务器失败:连接超时(110) SMTP错误:无法连接到SMTP主机。SMTP错误:无法连接到SMTP主机 当我执行var_dump($email)时,我得到
我使用的PHPMailer表格在这里找到。 从网站下载的示例是“接触-3”,在引导主题中使用PHPMailer通过gmail发送SMTP电子邮件。当我使用“接触-1”时,它完全适用于我的托管域电子邮件地址,但SMTP版本适用于gmail地址,联系人表单不会提交。 在下面的代码中,我更改了以下行以添加我的gmail地址和gmail密码: 任何关于使用给定信息进行此工作的帮助都将不胜感激-提前感谢!