2017-10-05 7 views
1

Dans un Rails 5.1 ActionMailer, je veux attacher un objet à un courrier électronique:Joindre le message de courrier à la poste dans Rails

def attach_mail(original_email) 
    attachments['original-email.eml'] = { mime_type: 'message/rfc822', encoding: '7bit', content: original_email.to_s } 
    mail to: 'postmaster', subject: 'mail should be attached' 
end 

Cependant, cela ne produit pas des e-mails valides. Thunderbird répertorie la pièce jointe avec la taille '0'. Horde liste la pièce jointe avec la taille correcte, mais ne la reconnaît pas comme un e-mail.

J'ai essayé des variations de la ligne attachments:

attachments['original-email.eml'] = original_email 
attachments['original-email.eml'] = { content: original_email.to_s } 
attachments['original-email.eml'] = { mime_type: 'message/rfc822', content: original_email.to_s } 

, mais aucun de ces résultats dans un e-mail avec une pièce jointe de courrier électronique.

Quelle est la solution?

Répondre

1

Enfin compris.

Pour joindre un email (objet Mail du bijou « mail ») à un message ActionMailer, vous devez spécifier le type MIME et l'encodage comme ceci:

def attach_mail(original_email) 
    attachments['original-email.eml'] = { mime_type: 'message/rfc822', 
    encoding: '7bit', 
    content: original_email.to_s } 
    mail to: 'postmaster', subject: 'mail should be attached' 
end 

Cela crée un message multipart/mixed qui est correctement affiché dans les MUA. Toutefois, si vous ajoutez une pièce jointe en ligne (par exemple, pour afficher une image de logo dans le corps de l'e-mail ActionMailer), le message entier aura un type mime multipart/related. Les MUA que j'ai essayés étaient incapables d'interpréter un message multipart/related avec une pièce jointe à un message électronique.

Par conséquent, évitez d'ajouter des pièces jointes en ligne lorsque vous joignez un courriel à un courriel.

+0

Merci d'avoir documenté ceci ici! J'ai été perplexe pourquoi seulement les messages électroniques étaient brouillés. – neongrau

+0

J'ai en outre eu un problème qui s'est produit avec les mails ayant seulement un corps html avec un fichier eml attaché. Là, l'attachement brouillait tout le courrier à la livraison. Alors que la conversion de l'objet Mail via sa méthode codée en un fichier .eml lui-même fonctionnait bizarrement. Au final, je suis en train d'envoyer eml-attachments avec mime_type: 'application/octet-stream', en encodant: '7bit' qui semble fonctionner le mieux pour mes différents formats. Au moins jusqu'à ce que je trébuche sur la prochaine combinaison étrange qui échouera dans l'un ou l'autre MUA – neongrau