【问题标题】:Ruby Imap Multipart FetchRuby Imap 多部分提取
【发布时间】:2019-10-19 09:01:16
【问题描述】:

我尝试使用 Ruby IMAP 库(“net/imap”)来获取电子邮件。我收到带有 html 和纯文本的消息,但我只需要纯文本 ...

我的代码是...

imap = Net::IMAP.new('XXX')

imap.authenticate('LOGIN', 'USER', "PASS") imap.examine('INBOX') 

imap.search(['UNSEEN']).each do |message_id| 

  body = imap.fetch(message_id,'BODY[TEXT]')[0].attr['BODY[TEXT]'] 

  puts body 

end

我来了

--57887f32df9433962df2d01c44487353c74c0f6d2b9721d30fc189fadae2 内容类型:文本/纯文本; charset=UTF-8

摘要:XXX 描述:XXX。

--57887f32df9433962df2d01c44487353c74c0f6d2b9721d30fc189fadae2--

但我只需要

摘要:XXX 描述:XXX。

如果不需要“邮件”,我怎么能得到它

问候

【问题讨论】:

    标签: ruby email imap multipart


    【解决方案1】:

    您最好在后续的fetch <msgno> body[<partnum>] imap 请求中询问具体的部件号。这将返回实际的 MIME 部分,而不仅仅是带有 MIME 编码的正文。

    例如,我使用以下循环将消息检索到 mime_parts(假设 @imap 是您已经建立的 imap 客户端):

      new_msgs = @imap.uid_search('UNSEEN')
      puts "Found #{new_msgs.size} new messages"
      new_msgs.each do |msg_uid|
        msgs = @imap.uid_fetch(msg_uid, ['BODY', 'FLAGS', 'ENVELOPE'])
        raise "unexpected number of messages, count=#{msgs.size}" if msgs.size > 1
        @imap.uid_store(msg_uid, '+FLAGS', [:Seen]).inspect
        msg = msgs.first
        body = msg.attr['BODY']
        if body.media_type.eql?('MULTIPART')
          mime_parts = []
          body.parts.each.with_index do |part, idx|
            body_part = "BODY[#{idx+1}]"
            fetch_part = @imap.uid_fetch(msg_uid, body_part)
            mime_parts << part.to_h.merge!({content: fetch_part.first.attr[body_part]})
          end
        else
          fetch_text = @imap.uid_fetch(msg_uid, 'BODY[TEXT]')
          mime_parts = [{
              media_type: 'TEXT', subtype: 'PLAIN',
              content: fetch_text.first.attr['BODY[TEXT]']
            }]
        end
      end
    

    然后您可以遍历您的 mime_parts 并随心所欲地使用它们。

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 2012-09-11
      • 2011-10-21
      • 1970-01-01
      • 2015-03-28
      相关资源
      最近更新 更多