2013-05-24 16 views
5

私は以下のコードで間違っていることを誰かが助けてくれることを望んでいました - 私のメールは、ほとんどのメールクライアント(gmail web、アンドロイド)、それはiphone/ipadで適切にレンダリングされません。最後に添付された画像だけが表示され、HTMLコンテンツやテキストコンテンツは表示されません。私はすべての電子メールクライアントがペイロードを違った方法で解釈してレンダリングすることを理解しています。私はそれをiPhoneで動作させる方法を知らない。iphoneで正しく表示されないインライン画像を含むhtmlメール

Rubyコード:

require 'mail' 

def inline_body_with_attachments(html, attachments) 
    attachments.each do |attachment| 
     if (html =~ /#{attachment.filename}/) 
      html = html.sub(attachment.filename, "cid:#{attachment.cid}") 
     end 
    end 
    return html 
end 


mail = Mail.new({ 
    :from => "[email protected]", 
    :to  => "[email protected]", 
    :subject => "html email with inline images" 
}) 

text_part = Mail::Part.new do 
    body "some text" 
end 

mail.text_part = text_part 

# Load the attachments 
attachment = "image.png" 
mail.attachments[attachment] = File.read(attachment) 

inline_html = inline_body_with_attachments("<b>An inline image</b><img src='image.png'/>", mail.attachments) 

html_part = Mail::Part.new do 
    content_type 'text/html; charset=UTF-8' 
    body   inline_html 
end 

mail.html_part = html_part 
mail.deliver! 

メールは次のようになります。

Date: Fri, 24 May 2013 13:58:02 +0000 
From: [email protected] 
To: [email protected] 
Message-ID: <[email protected]> 
Subject: test mail with attachment- raw 
Mime-Version: 1.0 
Content-Type: multipart/alternative; 
boundary="--==_mimepart_519f71eab2260_2a1d9e076471d6"; 
charset=UTF-8 
Content-Transfer-Encoding: 7bit 



----==_mimepart_519f71eab2260_2a1d9e076471d6 
Date: Fri, 24 May 2013 13:58:02 +0000 
Mime-Version: 1.0 
Content-Type: text/plain; 
charset=UTF-8 
Content-Transfer-Encoding: 7bit 
Content-ID: <[email protected]> 

some text 

----==_mimepart_519f71eab2260_2a1d9e076471d6 
Date: Fri, 24 May 2013 13:58:02 +0000 
Mime-Version: 1.0 
Content-Type: text/html; 
charset=UTF-8 
Content-Transfer-Encoding: 7bit 
Content-ID: <[email protected]> 

<b>An inline image</b><img src='cid:[email protected]'/> 

----==_mimepart_519f71eab2260_2a1d9e076471d6 
Date: Fri, 24 May 2013 13:58:02 +0000 
Mime-Version: 1.0 
Content-Type: image/png; 
charset=UTF-8; 
filename=image.png 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; 
filename=image.png 
Content-ID: <[email protected]> 

iVBORw0KGgoAAAANSUhEUgAAASwAAABaCAYAAAACcWsdAAAXUUlEQVR4nGJk 
[.... more image encoding ...] 
DhwFowAXGE0go2CQAAAAAAD//wMAFOkCtHNhXPkAAAAASUVORK5CYII= 


----==_mimepart_519f71eab2260_2a1d9e076471d6-- 
+0

私はあなたを助けることはできませんが、私が解決しようとしてきた私の問題の解決策を提供してくれてありがとうと思います。 +1 – GoldfishGrenade

+0

私はインラインイメージも送ろうとしていますが、 '.cid'メソッドを見つけることができません。これは別の宝石や作成されたメソッドですがここには表示されていませんか? – sylvian

+0

あなたの体にいくつかのhtmlを追加しようとすることができますか:[ここに] [質問は回答しました(http://stackoverflow.com/questions/24273954/inline-images-with-ruby-mail-gem/24274267#24274267) – sylvian

答えて

0

私はこれが役に立つかどうかわからないんだけど、私はかなりあなたのコードに続いて、それは私のiPhone上で動作します5. Microsoft Exchangeサーバーに送信します。

require 'mail' 

mail = Mail.deliver do 
    to '[email protected]' 
    from '[email protected]' 
    subject 'Inline Image test' 

    add_file './banner.png' 

    pic = attachments['banner.png'] 

    html_part do 
     content_type 'text/html; charset=UTF-8' 
     body "<img width=597 height=162 id='Banner0' src='cid:#{pic.cid}'>" 
    end 

end 

これが役に立ちます。

+0

body "Before iamge after image"とあなたのiPhoneにレンダリングが表示されますか? – user316054

+0

私は試しましたが、正しく表示されるようです。ただし、画像は添付ファイルとしても表示されます。 – GoldfishGrenade

2

iphoneを動かすために、画像のHTMLコンテンツを自分のmultipart/related部分にラップする必要がありました。

require 'mail' 


def inline_body_with_attachments(html, attachments) 
    attachments.each do |attachment| 
     if (html =~ /#{attachment.filename}/) 
      html = html.sub(attachment.filename, "cid:#{attachment.cid}") 
     end 
    end 
    return html 
end 


mail = Mail.new({ 
    :from => "[email protected]", 
    :to  => "[email protected]", 
    :subject => "test mail with attachment- raw4", 
    :content_type => 'multipart/alternative' 
}) 

text_part = Mail::Part.new do 
    body "some text" 
end 

mail.add_part(text_part) 

other_part = Mail::Part.new do 
    content_type 'multipart/related;' 
end 

# Load the attachments 
attachment = "image.png" 
#mail.attachments[attachment] = File.read(attachment) 
other_part.add_file(attachment) 

inline_html = inline_body_with_attachments("<b>An inline image</b><img src='image.png'/>", other_part.attachments) 
html_part = Mail::Part.new do 
    content_type 'text/html; charset=UTF-8' 
    body   inline_html 
end 
other_part.add_part(html_part) 

mail.add_part(other_part) 

mail.deliver! 
関連する問題