web-dev-qa-db-fra.com

Rails Action Mailer: images dans les emails

J'essaie de coller des images dans un courrier électronique. Le problème est que les emails arrivent sans images à l'intérieur

développement.rb

  config.action_mailer.default_url_options = {
    :Host => 'localhost:3000',
    :only_path => false
  }
  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.asset_Host = 'http://localhost:3000'

voir la fiche:

<div class="image">
  <%= image_tag image_path('email-logo.png') %>
</div>

Où ai-je commis une erreur? S'il vous plaît demander si vous avez besoin de plus d'informations.

18
Pavel Babin

essayer

<div class="image">
  <%= image_tag('email-logo.png') %>
</div>

Assurez-vous de définir config.action_controller.asset_Host et config.action_mailer.asset_Host 

18
a14m

Vous envoyez des courriers électroniques à partir de localhost:3000, qui n'est pas accessible au public (et limité à votre ordinateur uniquement).

Vous devez exposer votre environnement local pour que les images puissent être téléchargées dans votre client de messagerie.

Utilisez un service tel que ngrok pour exposer votre domaine local.

Une fois cela fait, assurez-vous de remplacer config.action_mailer.asset_Host = 'http://localhost:3000'

avec l'URL ngrok (quelque chose comme config.action_mailer.asset_Host = 'http://<xxx>.ngrok.com')

De plus, dans votre fichier de vue, vous devrez vous assurer de spécifier l'URL absolue de l'image (et pas uniquement le chemin relatif). Vous pouvez en lire plus ici: Comment obtenir une URL absolue pour un actif dans Rails 3.1?

8
Utsav Kesharwani

Si vous utilisez le

image_url('e-mail-logo.png')

au lieu de 

image_path()

cela rendra le chemin absolu vers l'image, ce qui devrait fonctionner. Le chemin interne à l'image n'a pas de sens dans le contexte du message.

3
oxtub

Je ne suis pas un gourou de Rails, mais j'ai trouvé celui-ci:

  1. placez votre image email-logo.png dans le dossier public du projet Rails;
  2. dans votre email (par exemple views/invent/mailer/my_email.html.erb, définissez le tag image comme ceci:

    <%= image_tag("http://#{ActionMailer::Base.default_url_options[:Host]}:#{ActionMailer::Base.default_url_options[:port]}/email-logo.png") %>
    
0
Giacomo

Je suis d'accord avec Utsav Kesharwani. J'ai récemment rencontré le même problème. Comme l'hôte local n'est pas accessible au public, vous ne pouvez pas accéder aux images de l'hôte local.

Donc, une solution pratique à ce problème peut être de télécharger vos images sur un nuage et d’y accéder lorsque vous souhaitez afficher ces images.

Personnellement, je préfère Cloudinary - Un service basé sur un nuage qui fournit une solution de gestion d’image de bout en bout, comprenant les téléchargements, le stockage, les manipulations, les optimisations et la livraison.

Vous pouvez vous référer à la documentation Cloudinary pour Rails: http://cloudinary.com/documentation/Rails_integration#getting_started_guide

J'espère que ça aide.

0
VoidZero