Rails 4 : Envoyer des mails avec des pièces jointes
Dans Rails 4 plusieurs méthodes existent pour envoyer des mails. Nous allons aborder aujourd’hui l’envoie de mail classique avec l’ajout d’une pièce jointe (de type .csv) en spécifiant un content_type pour résoudre certains problèmes sur le client mail "Microsoft Entourage".
Déclaration de notre mailer que nous appelons « Notification » avec la fonction que nous appellerons depuis notre controller.
# project/app/mailers/notification.rb
class Notification < ActionMailer::Base
def mon_super_mail(param1, param2)
# Nom que je veux donner au fichier / pièce jointe
mon_fichier_csv = "nom_fichier.csv"
chemin_fichier_csv = "le_chemin_de_mon_fichier_csv_sur_le_serveur"
attachments[mon_fichier_csv] = { content_type: "application/csv", filename: mon_fichier_csv, body: File.read(chemin_fichier_csv) }
mail(to: mon_destinataire, subject: "Ceci est l'objet de mon mail", from: "ne_pas_repondre@email.com" )
end
end
Nous appelons ensuite cette fonction de mail depuis notre controller.
# project/app/controllers/my_object_controller.rb
# ... code ...
Notification.mon_super_mail(@mon_param, mon_param_2).deliver
# ... code ...
Notes : Pour les pièce jointes on spécifie un content_type (ou un mime_type). Dans notre cas nous avons spécifié “application/csv” mais nous aurions très bien pu mettre “text/csv”.
La différence entre les deux est le rendu : pour “application/csv” le client mail va créer une pièce jointe à télécharger, pour “text/csv” il va l’afficher dans le contenu du mail sans forcément proposer de télécharger le fichier. Nous avons fait les tests sur Microsoft Outlook (qui générait un fichier dans les deux cas) et Microsoft Entourage pour Mac (qui ne générait pas de fichier avec “text/csv”).
Originally published at Sois-net.