[ Pob's corner ]

Wicked_pdf #5 : Un PDF en pièce jointe de votre mail

October 01, 2015 | about 1 minute read

Lorsque l’on souhaite générer un PDF avec wicked_pdf dans un projet Rails il peut s’avérer utile et nécessaire de placer ce dernier en pièce jointe d’un email.

Dans un premier temps on va créer le PDF sans l’afficher en utilisant la méthode “render_to_string” puis appeler notre mailer en lui passant en paramètre le contenu de ce PDF.

L’exemple ci-dessous précise le template et le layout mais ces options sont facultatives (et il y a possibilité d’ajouter toutes les options de wicked_pdf présentées dans le billet précédent).

# app/controllers/mon_objet_controller.rb
def envoyer_mail
[...]
contenu_pdf = render_to_string :pdf    => "mon_pdf",
            :template    => "mon_objet/mon_action.pdf.erb",
            :layout      => "mon_layout_specifique.html"
MonMailer.envoyer_mail_avec_piece_jointe(contenu_pdf).deliver
[...]
end

Ensuite dans le mailer, on récupère le contenu du PDF en paramètre et on spécifie un content_type à notre pièce jointe en y plaçant le contenu :

# app/mailers/mon_mailer.rb
def envoyer_mail_avec_piece_jointe(contenu_pdf)
    nom_fichier_pdf = "mon_fichier_pdf_qui_sera_en_piece_jointe.pdf"
    attachments[nom_fichier_pdf] = { content_type: "application/pdf", filename: nom_fichier_pdf, body: contenu_pdf }
    mail(to:"mail[at]domain[dot]com", subject: "Sujet", from: "...", cc: "...")
end

L’avantage de cette solution est que le fichier PDF est généré à la volée, il n’est pas stocké sur le serveur.

Originally published at Sois-net.