2010-10-15 14 views
11

Mi aplicación crea un archivo .pdf cuando se representa mediante el paso a la dirección URL (por ejemplo, domain.com/letter/2.pdf)¿Cómo puedo adjuntar un .pdf renderizado a un correo electrónico en Rails 2.3.5?

No consigue guardados en cualquier lugar.

¿Cómo puedo hacer que el pdf real sea un archivo adjunto en un correo electrónico saliente?

Aquí es mi gestor de correo:

def campaign_email(contact,email) 
    subject email.subject 
    recipients contact.email 
    from  'Me <[email protected]>' 
    sent_on Date.today 

    attachment = File.read("http://localhost:3000/contact_letters/#{attachment.id}.pdf") 

    attachment "application/pdf" do |a| 
    a.body = attachment 
    a.filename = "Othersheet.pdf" 
    end 
end 

Este es el controlador que crea/hace que el PDF:

def create 
    @contact_letter = ContactLetter.new(params[:contact_letter]) 

    @contact = Contact.find_by_id(@contact_letter.contact_id) 
    @letter = Letter.find_by_id(@contact_letter.letter_id) 

    if @contact_letter.save 
     flash[:notice] = "Successfully created contact letter." 

     #redirect_to contact_path(@contact_letter.contact_id) 
     redirect_to contact_letter_path(@contact_letter, :format => 'pdf') 
    else 
     render :action => 'new' 
    end 
    end 

NOTA: Me hardcoded localhost: 3000/cómo puedo sustituir eso con una variable entonces, ¿en dev es localhost: 3000 y en producción es el dominio correcto? ¿Hay una manera de incluir el enrutamiento en este)

ERROR:? Me sale un

Invalid argument - http://localhost:3000/contact_letters/9.pdf

+0

¿Está usted en los rieles 2 o 3? – thatmiddleway

+0

rails 2.3.5 (?) – Angela

+0

¿también puede mostrar el código del controlador de letras que envía el pdf? – nathanvda

Respuesta

0

Yo tengo que trabajar al pasar el objeto PDF directamente en el método campaign_email y luego asignar un adjunto.

5

He aquí un ejemplo para los carriles 2

class ApplicationMailer < ActionMailer::Base 
# attachments 
def signup_notification(recipient, letter) 
    recipients  recipient.email_address_with_name 
    subject   "New account information" 
    from   "[email protected]" 

    attachment :content_type => "image/jpeg", 
    :body => File.read("an-image.jpg") 

    attachment "application/pdf" do |a| 
    a.body = letter 
    end 
end 
end 

en su opinión o dondequiera que sus llamando a su método:

ApplicationMailer.deliver_signup_notification(letter) 
+0

¿Qué quieres decir con generar mi pdf allí ... sería la ruta? – Angela

+0

eso, o el método que usa para crear su pdf – thatmiddleway

+0

Esta es la ruta en el método create: contact_letter_path (@contact_letter,: format => 'pdf') ¿eso es lo que puse ahí? – Angela

0

Una solución rápida y fácil sería obtener el contenido de la URL usando net/http y open-uri, para obtener la conexión ment

attachments['free_book.pdf'] = open("http://#{request.host}/letter/#{id}.pdf") 

por ejemplo:

def campaign_email(contact,email) 
    subject email.subject 
    recipients contact.email 
    attachments['free_book.pdf'] = open("http://#{request.host}/letter/#{id}.pdf") 
    from  'Me <[email protected]>' 
    sent_on Date.today 

    body  :email => email 
end 

o, llame a la generación de PDF dentro de la acción del controlador anuncio publicitario

+0

¿cómo puedo llamar al PDF generar dentro del anuncio publicitario acción del controlador?podría usar – Angela

+0

archivos adjuntos ['free.pdf'] = open (contact_letter_path (@contact_letter,: format => 'pdf')) – Angela

+0

archivos adjuntos no es un método conocido para ActionMailer - ese es el error que obtengo .... – Angela

Cuestiones relacionadas