2015-12-17 58 views
0

我使用這個寶石與Gmail的API交互:https://github.com/gmailgem/gmail嵌入提取從Gmail影像自定義客戶端 - 軌道

要提取電子郵件,我有:

require 'gmail' 
gmail = Gmail.connect("[email protected]", "password") 

message = gmail.inbox.emails.last 
puts message.message.html_part.body.raw_source 

這將返回的HTML格式電子郵件,這正是我需要的,但圖像顯示,當他們被渲染失蹤,網址是一個奇怪的格式:

<div dir="ltr">see attached<div><br></div><div><img src="cid:ii_151afcf74cab7d3b" alt="Inline image 1" width="517" height="291"><br></div></div> 

如何獲取圖像的完整URL,所以我CA n在返回的HTML中渲染它們?

我知道的3個可能的途徑是:https://www.codementor.io/tips/8112473532/strategies-for-serving-base64-encoded-images-in-html

我想申請第一個解決方案,我會怎麼做呢?

+0

您能否顯示整個響應? :)我懷疑答案在於'headers'。 – Tholle

+0

你的意思是喜歡在下面的答案嗎?我提供的文章是否能幫助我更好地瞭解我在找什麼? –

+1

消息包含一個有效負載,上面有'HTML'部分,它在創建時('internalDate')等。它還包含一個'headers'屬性,其中包含關於'cids'和其他信息的信息。我懷疑這將在'message.headers'或類似的信息所在的地方。 – Tholle

回答

1

附件將被硬編碼在電子郵件正文中,像這樣:

This is the body of the message. 
--frontier 
Content-Type: application/octet-stream 
Content-Transfer-Encoding: base64 

PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg 
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== 
--frontier-- 

可以解碼附件,將其存儲爲臨時文件一個使用它。

mail.attachments.each do | attachment | 
    # Attachments is an AttachmentsList object containing a 
    # number of Part objects 
    if (attachment.content_type.start_with?('image/')) 
    # extracting images for example... 
    filename = attachment.filename 
    begin 
     File.open(images_dir + filename, "w+b", 0644) {|f| f.write attachment.body.decoded} 
    rescue => e 
     puts "Unable to save data for #{filename} because #{e.message}" 
    end 
    end 
end 
+0

有沒有辦法將硬編碼的部分變成一個URL,所以我不必將文件保存在我的服務器上? –

+0

鏈接什麼? –

+0

感謝您的回覆!我剛剛編輯了我的問題,請參閱我添加的文章。我試圖使用託管在Google服務器上的URL來嵌入HTML中的圖像,而不必下載文件並生成新的URL。 –