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.
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
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?
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.
Je ne suis pas un gourou de Rails, mais j'ai trouvé celui-ci:
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") %>
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.