7

Estoy tratando de agregar archivos adjuntos al formulario de contacto en este sitio Estoy haciendo, pero no puedo obtener acción de correo para adjuntar el archivo cargado. Tengo un clip para cargar el archivo en S3, pero no puedo obtener el archivo y adjuntarlo al mensaje.ActionMailer - Cómo agregar un archivo adjunto de s3

Mi pila de aplicación es: Heroku, Rails 3, y un clip subir a S3, aquí está lo que tengo hasta ahora:

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)  

final

¿Qué estoy haciendo mal? Sigo siendo un novato en los rieles, así que estoy reconstruyendo esto.

Respuesta

-3

Si usted no tiene una cuenta s3 ya ir a buscar uno aquí:

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

es necesario agregar esto a su modelo de contacto:

app/modelos/contact.rb

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

Asegúrate de que tu nombre de aplicación es el nombre de tu aplicación de rieles en heroku. Y asegúrese de cambiar el nombre de la imagen a la que haya llamado su imagen.

Luego necesita un archivo de configuración en 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 

Asegúrese de obtener la clave y el secreto correctos.

En el archivo de la gema asegúrese de tener estas joyas instalar:

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

Luego, en el formulario que necesita un campo de archivo y declaran la forma a varias partes:

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

Y que deben hacer eso. Si usted no tiene una cuenta s3 ya ir a buscar uno aquí:

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

es necesario agregar esto a su modelo de contacto:

app/modelos/contact.rb

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

Asegúrate de que tu nombre de aplicación es el nombre de tu aplicación en heroku. Y asegúrese de cambiar el nombre de la imagen a la que haya llamado su imagen.

Luego necesita un archivo de configuración en 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 

Asegúrese de obtener la clave y el secreto correctos.

En el archivo de la gema asegúrese de tener estas joyas instalar:

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

Luego, en el formulario que necesita un campo de archivo y declaran la forma a varias partes:

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

Entonces envíe su contacto con la imagen. ¿Dijiste que estabas usando los rieles 3?

Así que en su modelo de contacto:

class Contact << ActiveRecord::Base 

    before_save :mail_user 

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

end 

Luego, en su programa de correo (asumiendo que son en los carriles 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 

Por lo tanto, en su opinión correo que usted necesita incluir e imagen etiqueta como entonces:

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

Luego solo tiene que enviarle un correo electrónico después de crear un contacto e incluir el tachment.

+2

Respuesta ridículamente larga que de ninguna manera responde a la pregunta del OP. –

1

Una nota rápida:

Amazon requiere ahora

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

en lugar de la gema s3 enumerados anteriormente.

Cuestiones relacionadas