7

我试图添加附件到这个网站上的联系表格我正在做,但我不能得到行动邮件程序附加上传的文件。我有回形针上传文件到S3,但我不能让它抓住文件并将其附加到消息。ActionMailer - 如何从s3添加附件

我的应用程序堆栈:Heroku的,Rails 3中,和回形针上传到S3,继承人是我到目前为止有:

def contact_notification(sender) 
    @sender = sender 

    if attachments.count > 0 
     # Parse the S3 URL into its constituent parts 
     uri = URI.parse @sender.photo.url(:original).authenticated_url 
     # Use Ruby's built-in Net::HTTP to read the attachment into memory 
     response = Net::HTTP.start(uri.host, uri.port) { |http| http.get uri.path } 
     # Attach it to your outgoing ActionMailer email 
     attachments[@sender.attachment_file_name] = response.body 
    end 
    mail(:to => xxx)  

我在做什么错?我仍然是一个铁轨noob,所以我拼凑在一起。

回答

-3

如果你没有一个S3帐户已经去得到一个位置:

http://aws.amazon.com/s3/

您需要添加到您的接触模型:

应用程序/模型/ contact.rb

has_attached_file :picture, 
        :styles => {:large => "275x450>"}, 
        :storage => :s3, 
        :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
        :path => "appname/:attachment/:style/:id.:extension" 

确保你应用程序的名字就是你的轨道在Heroku应用程序名称。并确保您将图片重命名为任何您命名的图片。

然后你需要一个配置文件在config/s3.yml

development: 
    bucket: bucked_name 
    access_key_id: key 
    secret_access_key: secret 

production: 
    bucket: bucked_name 
    access_key_id: key 
    secret_access_key: secret 

请确保您获得正确的密钥和密码。

在你的宝石文件请确保您有这些宝石安装:

gem "aws-s3", :require => "aws/s3" 
gem "paperclip" 

然后在你的表格,你需要一个文件域并声明形式多:

<% form_for(@contact, :html => {:multipart => true}) do |f| %> 
    <p><%= f.file_field :picture %></p> 
<% end %> 

而且应该做的它。 如果你没有一个S3帐户已经去得到一个位置:

http://aws.amazon.com/s3/

您需要添加到您的接触模型:

应用程序/模型/ contact.rb

has_attached_file :picture, 
        :styles => {:large => "275x450>"}, 
        :storage => :s3, 
        :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
        :path => "appname/:attachment/:style/:id.:extension" 

请确保您的appname是您在heroku上的rails应用程序名称。并确保您将图片重命名为任何您命名的图片。

然后你需要一个配置文件在config/s3.yml

development: 
    bucket: bucked_name 
    access_key_id: key 
    secret_access_key: secret 

production: 
    bucket: bucked_name 
    access_key_id: key 
    secret_access_key: secret 

请确保您获得正确的密钥和密码。

在你的宝石文件请确保您有这些宝石安装:

gem "aws-s3", :require => "aws/s3" 
gem "paperclip" 

然后在你的表格,你需要一个文件域并声明形式多:

<% form_for(@contact, :html => {:multipart => true}) do |f| %> 
    <p><%= f.file_field :picture %></p> 
<% end %> 

然后邮寄您的联系与图片。你说你正在使用rails 3?

您的联系模型

所以:

class Contact << ActiveRecord::Base 

    before_save :mail_user 

    def mailer_user 
     ContactMailer.contact_notification(@user).deliver 
    end 

end 

然后在你的邮件(假设你是在Rails 3中):

class ContactMailer < ActionMailer::Base 

    default :from => "[email protected]" 

    def contact_notification(@user) 
    @subscription = "test" 
    @url = "test" 
    mail(:to => "[email protected]", 
     :subject => "Test") 
    end 

end 

因此,在您邮件视图,您需要包括和图像标记像所以:

<%= image_tag(@contact.picture(:small)) %> 

然后,你只需要在创建联系人后发送给你电子邮件,并包括在tachment。

+2

可笑的长答案决不会解决OP的问题。 – 2012-11-16 04:37:23

1

快速注意:

亚马逊现在需要

gem 'aws-sdk', :require => "aws-sdk" 

,而不是上面列出的S3宝石。