如何在Padrino提交表格时让Amazon SES发送

时间:2012-05-23 14:42:55

标签: html padrino

按照此处的说明操作:http://www.padrinorb.com/guides/padrino-mailer

我在app.rb文件中添加了传递方法:

class OscarAffiliate < Padrino::Application
  register Padrino::Rendering
  register Padrino::Mailer
  register Padrino::Helpers

  enable :sessions

  set :delivery_method, :smtp => { 
    :address              => "email-smtp.us-east-1.amazonaws.com",
    :port                 => 587,
    :user_name            => 'AKIAIQ5YXCWFKFXFFRZA',
    :password             => 'AqMNMFecKSYR/TRu8kJgocysAL5SmIUsu2i8u/KAfeF/',
    :authentication       => :plain,
    :enable_starttls_auto => true  
  }

但是通过Padrino和Mailer一代的产生,我没有推荐的“会话”控制器,它应该属于:

post :create do
  email(:from => "tony@reyes.com", :to => "john@smith.com", :subject => "Welcome!",     :body=>"Body")
end

我错过了什么吗?

我在办公室有一个基本数据收集表单,只需要一封电子邮件发送给5个收件人,邮件正文中包含所有表单字段。

由于

1 个答案:

答案 0 :(得分:1)

在我看来,您在提交表单后尝试通过电子邮件发送给某个人(或多个人)。您可能正在将该表单中的信息保存到数据库中。我认为你对如何使用Padrino邮件有点困惑。请允许我澄清一下:为了发送电子邮件,使用Padrino的邮件程序功能,以及完整的内容,您必须创建一个Padrino邮件程序(我在下面概述了这一点)。然后,您必须配置该邮件程序,以便在调用它时可以将变量传递给它。然后可以在视图中使用这些变量,邮件程序会在发送电子邮件之前将其呈现到电子邮件正文中。这是完成你想要做的事情的一种方式,它可能是最直接的。您可以在问题中提供的help page下的“Mailer Usage”下找到有关此程序的更多信息。我已经概述了一个示例用法,根据我认为您的需求量身定制,如下所示。


<强>说明

我把这个代码示例汇总在一起,并根据我的AWS账户对其进行了测试;它应该在生产中工作。

app/app.rb文件中,包含以下内容(您已经这样做了):

set :delivery_method, :smtp => { 
  :address              => 'email-smtp.us-east-1.amazonaws.com',
  :port                 => 587,
  :user_name            => 'SMTP_KEY_HERE',
  :password             => 'SMTP_SECRET_HERE',
  :authentication       => :plain,
  :enable_starttls_auto => true  
}

然后在app/mailers/affiliate.rb中创建一个邮件程序:

# Defines the mailer
DemoPadrinoMailer.mailer :affiliate do
  # Action in the mailer that sends the email. The "do" part passes the data you included in the call from your controller to your mailer.
  email :send_email do |name, email|
    # The from address coinciding with the registered/authorized from address used on SES
    from 'your-aws-sender-email@yoursite.com'
    # Send the email to this person
    to 'recipient-email@yoursite.com'
    # Subject of the email
    subject 'Affiliate email'
    # This passes the data you passed to the mailer into the view
    locals :name => name, :email => email
    # This is the view to use to redner the email, found at app/views/mailers/affiliate/send_email.erb
    render 'affiliate/send_email'
  end
end

Affiliate Mailer的send_email视图应位于app/view/mailers/affiliate/send_email.erb,如下所示:

Name: <%= name %>
Email: <%= email %>

最后,您可以从您接受表单提交的任何方法(和控制器)内部调用您的邮件程序。务必使用实际表单数据替换字符串。在这个例子中,我使用了POST create动作,它没有保存任何数据(因此带有假数据的字符串):

post :create do
  # Deliver the email, pass the data in after everything else; here I pass in strings instead of something that was being saved to the database
  deliver(:affiliate , :send_email, "John Doe", "john.doe@example.com")
end

我真诚地希望这能帮助您完成Padrino之旅,欢迎来到Stack Overflow社区!

此致

Robert Klubenspies