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 URL 및 My Web Site Logo.png 를 업데이트해야 합니다.
Action Mailer 사용에 대한 기본 세부 사항은 ActionMailer :: Base 를 참조하십시오 .
여기에서 붙여 넣은 복사
인라인 첨부
파일이 다른 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.
'IT Share you' 카테고리의 다른 글
프로그램을 종료하지 않고 메소드를 종료하는 방법은 무엇입니까? (0) | 2020.12.10 |
---|---|
가로 스크롤이있는 HTML 표 (첫 번째 열 고정) (0) | 2020.12.10 |
32 비트 정수에 대해 왼쪽 비트 시프트 "<<"가 32 회 이상 사용될 때 예상대로 작동하지 않는 이유는 무엇입니까? (0) | 2020.12.10 |
if 조건과 중괄호가없는 변수를 선언 할 때 컴파일러 오류 (0) | 2020.12.10 |
Jenkins에서 프로젝트를 특정 디렉터리로 체크 아웃하는 방법 (GIT 사용) (0) | 2020.12.10 |