`

使用Rails Action Mailer发送SMTP邮件 基础教程

阅读更多
链接如果,你是在找
553 You are not authorized to send mail, authentication is required 这个问题的原因,请跳这里,Rails smtp 邮件出错时

Action Mailer
是Rails的一个组件用来发送接收邮件,下面将演示,如何使用它创建SMTP邮件。从命令创建Rails工程开始:

C:\ruby\> rails emails


Action Mailer 配置

smtp邮件发送,首先需要配置,在config的environment.rb最后
添加
ActionMailer::Base.delivery_method = :smtp


这个配置是指定使用smtp,下面具体的使用参数:
也要在environment.rb中配置
ActionMailer::Base.server_settings = {
   :address => "smtp.tutorialspoint.com",
   :port => 25,
   :domain => "tutorialspoint.com",
   :authentication => :login,
   :user_name => "username",
   :password => "password",
}


以上配需要根据实际情况写,端口验证方式和发送类型。同样,配置也可以是

ActionMailer::Base.default_content_type = "text/html"#其中type可以是"text/plain", "text/html", 和 "text/enriched"."text/plain"是默认


接着是生成mailer命令如下:
C:\ruby\> cd emails
C:\ruby\emails> ruby script/generate mailer Emailer

生成文件:

class Emailer < ActionMailer::Base
end


我们需要在添加方法:

class Emailer < ActionMailer::Base
   def contact(recipient, subject, message, sent_at = Time.now)
      @subject = subject
      @recipients = recipient
      @from = 'no-reply@yourdomain.com'
      @sent_on = sent_at
	  @body["title"] = 'This is title'
  	  @body["email"] = 'sender@yourdomain.com'
   	  @body["message"] = message
      @headers = {}
   end
end

其中, recipient, subject, message 和 sent_at是关于发送的参数,同时我们还有六个标准参数
引用

    *@subject主题.
    * @body 是Ruby的hash结构。你可以创建三个值对title, email, message
    * @recipients接受邮件的地址列表
    * @from发件人地址列表.
    * @sent_on发送时间.
    * @headers是另外的hash结构标识header信息如,配置MIME typeplain text 或 HTML


然后,创建发送模板

修改如下文件app/views/contact.rhtml
Hi!

You are having one email message from <%= @email %> with a tilte 

<%= @title %>
and following is the message:
<%= @message %>
Thanks



创建对应controller处理逻辑
C:\ruby\emails> ruby script/generate controller Emailer

在 emailer_controller.rb中调用上面创建的Model实现发送逻辑:

class EmailerController < ApplicationController
   def sendmail
      email = @params["email"]
	  recipient = email["recipient"]
	  subject = email["subject"]
	  message = email["message"]
      Emailer.deliver_contact(recipient, subject, message)
      return if request.xhr?
      render :text => 'Message sent successfully'
   end
end


发送邮件,需要添加deliver_到发送的对应方法前。
request.xhr?是用阿里处理Rails Java Script(RJS)当浏览器不支持JavaScript时可以发送text信息。


下面是发送内容的输入界面,首先在emailer_controller.rb添加相应方法
   def index
      render :file => 'app\views\emailer\index.rhtml'
   end


在app\views\emails\index.rhtml文件中设计输入界面

<h1>Send Email</h1>
<%= start_form_tag :action => 'sendmail' %>
<p><label for="email_subject">Subject</label>:
<%= text_field 'email', 'subject' %></p>
<p><label for="email_recipient">Recipient</label>:
<%= text_field 'email', 'recipient' %></p>
<p><label for="email_message">Message</label><br/>
<%= text_area 'email', 'message' %></p>
<%= submit_tag "Send" %>
<%= end_form_tag %>


然后,http://127.0.0.1:3000/Emailer/inde页面测试
如下:



点击发送,就应该看到成功提示
  • 大小: 13.1 KB
4
0
分享到:
评论
5 楼 fireflyman 2010-11-04  
 email = @params["email"]  

这句把@params改为params后能正常实现..
4 楼 qichunren 2009-12-31  
夜鸣猪,there is an error in the article :ActionMailer::Base.server_settings,
in fact is :ActionMailer::Base.smtp_settings.


wo de shuyufa huai le 
3 楼 FlyingPiggy 2009-07-27  
了解,谢谢。
2 楼 夜鸣猪 2009-07-27  
应该是1.8.7和2.2.2
1 楼 FlyingPiggy 2009-07-26  
可以说明一下你做这个程序时的环境吗?Ruby和Rails的版本号?

相关推荐

    rails 邮件支持

    Rails集成了Action Mailer库,使得处理邮件发送变得简单且灵活。这篇博文将深入探讨Rails中的邮件支持。 首先,让我们了解一下Action Mailer。它是Rails内置的一个组件,专门用于发送电子邮件。它的工作原理是通过...

    mailgun-rails-example:使用 Mailgun 的 API 或 SMTP 使用 Ruby on Rails 发送电子邮件

    本示例项目"mailgun-rails-example"将指导你如何通过Mailgun的API或SMTP协议在Rails应用中实现邮件发送。 首先,我们需要安装`mailgun-rails` gem,它是Ruby gem,用于简化与Mailgun接口的交互。在你的`Gemfile`中...

    使用ActionMail发送邮件

    通过定义Mailer类和邮件模板,我们可以轻松地创建各种类型的邮件,并通过配置SMTP服务器实现实际的发送。在实际开发中,ActionMail还可以与其他Rails功能结合,如活动跟踪、通知系统等,进一步提升应用的用户体验。

    详解Ruby on Rails中的mailer相关使用

    在Ruby on Rails框架中,Mailer是用于处理电子邮件发送的一个关键组件。它允许开发者方便地创建、格式化并发送邮件,通常用于用户注册确认、密码重置通知等场景。以下是对Ruby on Rails中Mailer的详细解释及其最佳...

    Rails的邮件预览引擎MailsViewer.zip

    MailsViewer 是一个Rails 的邮件预览引擎,提供了表格用来浏览 tmp/mails 下的所有邮件,可轻松的浏览非产品模式下的邮件。 配置方法: config.action_mailer.delivery_method = :file config.action_mailer.file_...

    multi_smtp:使用 MultiSMTP 在 Rails 中自动进行电子邮件故障转移

    MultiSMTP 接受一组 (1..N) SMTP 提供程序,并将遍历每个提供程序,直到成功发送电子邮件。 安装 将此行添加到应用程序的 Gemfile 中: gem "multi_smtp" 然后执行: $ bundle 配置 对于应该使用自动故障转移...

    Ruby-MailCatcher一个抓取和查看邮件的web工具

    MailCatcher作为SMTP服务器,监听特定端口(默认1025),当你的应用程序尝试通过SMTP协议发送邮件时,MailCatcher会拦截这些邮件,而不是真正将其发送出去。邮件被截获后,其内容会被存储,并在Web界面中展示,包括...

    sending_emails_with_rails

    从 Rails 应用程序发送邮件的简单应用程序。 应用程序使用以下内容: 行动邮件 使用 Gmail 和 Mailgun 的 SMTP Mailgun API 通过 mailgun-ruby 用于预览电子邮件的 Action Mailer Preview。

    sendgrid-actionmailer:通过ActionMailer提供的Rails支持

    一个ActionMailer适配器,可使用SendGrid的HTTPS Web API(而不是SMTP)发送电子邮件。 与Rails 5和Sendgrid API v3兼容。 安装 将此行添加到您的应用程序的Gemfile中: gem 'sendgrid-actionmailer' 用法 为您的...

    Redmine使用手册.doc

    在config/environment.rb文件中,可以设置SMTP服务器的参数:config.action_mailer.smtp_settings。修改此文件后需要重新启动服务器。 备份: Redmine的备份应该包括数据(保存在redmine数据库中)和附件(保存在...

    mandriller:适用于ActionMailer的Mandrill SMTP API集成

    杀人犯 用于ActionMailer的 SMTP API集成。 请上查看该协议的详细信息... action_mailer . delivery_method = :smtp config . action_mailer . smtp_settings = { :user_name =&gt; 'UserName' , :password =&gt; 'Passwor

    twitch:使用RoR 4.2.2的类似app的twitter

    这个版本在RoR的历史中扮演着重要角色,引入了一些关键更新,包括ActiveRecord的性能提升、JSON编码的改进、Action Mailer的SMTP认证增强,以及对新版本的依赖库的支持。此外,4.2版引入了`active_record_forking`,...

Global site tag (gtag.js) - Google Analytics