IT Share you

Rails를 사용하여 이메일에 이미지를 삽입하는 올바른 방법은 무엇입니까?

shareyou 2020. 12. 10. 21:28
반응형

Rails를 사용하여 이메일에 이미지를 삽입하는 올바른 방법은 무엇입니까?


Rails를 사용하여 이메일에 이미지를 삽입하는 올바른 방법은 무엇입니까?


Oksana의 답변을 사용자 지정 도우미 접근 방식과 결합하여 다음과 같이 아주 잘 작동했습니다.

app/helpers/email_helper.rb

module EmailHelper
  def email_image_tag(image, **options)
    attachments[image] = File.read(Rails.root.join("app/assets/images/#{image}"))
    image_tag attachments[image].url, **options
  end
end

app/mailers/base_mailer.rb

class BaseMailer < ActionMailer::Base
  add_template_helper(EmailHelper)
end

app/mailers/my_mailer.rb

class MyMailer < BaseMailer

  def send_my_mail(email)  
    mail to: email, subject: "My Subject"
  end
end

예를 들어 이메일 레이아웃 파일에 회사 로고를 첨부하려면

app/views/layouts/email.html.erb

<%= email_image_tag("company_logo.png") %>


** 옵션은 태그를 더 확장 가능하게 만들지 만 루비> = 2에서만 작동합니다. Ruby <2에서이 작업을 수행하려면 키워드 옵션을 처리하는 이전 방식을 사용해야합니다.


레일 5

메일 방법에서 이미지를 가리키는 인라인 첨부 파일을 추가하십시오.

class ConfirmationMailer < ActionMailer::Base
  def confirmation_email
      attachments.inline["logo.png"] = File.read("#{Rails.root}/app/assets/images/logo.png")
      mail(to: email, subject: 'test subject')
  end
end

그런 다음 메일 html image_tag에서 첨부 URL이있는 보기 :

<%= image_tag(attachments['logo.png'].url) %>

Oksana 및 tdubs의 답변에 추가

tdubs가 작성한 모듈은 데스크톱에서 작동하지만 모바일 Gmail 클라이언트의 경우 이미지가 첨부 파일로 나타납니다. 이 문제를 해결하려면

app / helpers / email_helper.rb

module EmailHelper
    def email_image_tag(image, **options)
        attachments[image] = {
            :data => File.read(Rails.root.join("app/assets/images/emails/#{image}")),
            :mime_type => "image/png",
            :encoding => "base64"
        }
        image_tag attachments[image].url, **options
    end
end

나머지는 tdubs의 답변을 따르십시오.


많은 연구 끝에 이메일에 이미지를 포함하는 매우 깨끗한 방법을 찾았습니다. 다음 줄을 추가 production.rb하고development.rb

config.action_mailer.asset_host = 'YOUR HOST URL'

보기에서 다음 코드를 사용하여 이미지를 삽입하십시오.

<%= image_tag('My Web Site Logo.png') %>

참고 : 위 코드에서 HOST URLMy Web Site Logo.png 를 업데이트해야 합니다.

Action Mailer 사용에 대한 기본 세부 사항은 ActionMailer :: Base 를 참조하십시오 .


여기에서 붙여 넣은 복사

http://api.rubyonrails.org/classes/ActionMailer/Base.html#class-ActionMailer::Base-label-Inline+Attachments

인라인 첨부

파일이 다른 HTML과 함께 인라인으로 표시되도록 지정할 수도 있습니다. 회사 로고나 사진을 표시하려는 경우에 유용합니다.

    class Notifier < ApplicationMailer
      def welcome(recipient)
       attachments.inline['photo.png'] = File.read('path/to/photo.png')
       mail(to: recipient, subject: "Here is what we look like")
     end
   end

And then to reference the image in the view, you create a welcome.html.erb file and make a call to image_tag passing in the attachment you want to display and then call url on the attachment to get the relative content id path for the image source:

  <h1>Please Don't Cringe</h1>

  <%= image_tag attachments['photo.png'].url -%>

As we are using Action View's image_tag method, you can pass in any other options you want:

 <h1>Please Don't Cringe</h1>

 <%= image_tag attachments['photo.png'].url, alt: 'Our Photo', class: 'photo' -%>

I don't know much about rails, but I've worked on projects in C# that create emails and then insert them in a users inbox via the Google APIs. To create the email, I had to generate the email string from scratch. If you enable multipart for the email, then the image bytes will be included in a multipart section using base64 encoding.

You may want to check out the TMail and RubyMail packages to see if they support these actions for you.

참고URL : https://stackoverflow.com/questions/4918414/what-is-the-right-way-to-embed-image-into-email-using-rails

반응형