【问题标题】:ruby NET::IMAP reading body textruby NET::IMAP 读取正文
【发布时间】:2021-05-07 16:14:01
【问题描述】:

我需要阅读每封电子邮件的正文以找到特定的号码。

我的代码:

imap.search(["ON","20-Jan-2021"]).each do |message_id|
        body = imap.fetch(message_id, "BODY[]")[0].attr["BODY[]"]
        mail = Mail.new(body)
        pp mail.body
end

结果是这样的

"L0Rlc3RbOCAwIFIvRml0SCA4MzJdL1BhcmVudCAxNiAwIFIvVGl0bGUoKT4+CmVuZG9iagoxOCAw\r\n" +
  "IG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAxMyAwIFIvT3V0bGluZXMgMTYgMCBSPj4KZW5kb2Jq\r\n" +
  "CjE5IDAgb2JqPDwvQ3JlYXRpb25EYXRlKEQ6MjAyMTAxMjAxMDQ2NDUrMDInMDAnKS9Qcm9kdWNl\r\n" +

我试过用:

mail.body.decoded # same result like above.
mail.text_part.decoded # error: undefined method `decoded' for nil:NilClass
mail.text_part.body.to_s # error: undefined method `body' for nil:NilClass

【问题讨论】:

    标签: ruby email imap


    【解决方案1】:

    我会检查正文的内容以获取 Content-Transfer-Encoding,这很可能是 base64。 Ruby 提供了一个 base64 模块,可以轻松解码:

    require "base64"
    
    # IMAP authentication and whatnot
    
    imap.search(["ON","20-Jan-2021"]).each do |message_id|
      body = imap.fetch(message_id, "BODY[]")[0].attr["BODY[]"]
      body = Base64.decode64(body)
      mail = Mail.new(body)
      pp mail.body
    end
    

    FWIW,您提供的文本产量

    /Dest[8 0 R/FitH 832]/Parent 16 0 R/Title()>>
    endobj
    18 0 obj<</Type/Catalog/Pages 13 0 R/Outlines 16 0 R>>
    endobj
    19 0 obj<</CreationDate(D:20210120104645+02'00')/Produce
    

    从 base64 解码时。

    【讨论】:

      猜你喜欢
      • 2010-11-09
      • 1970-01-01
      • 2018-07-06
      • 2011-03-20
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 2023-03-18
      相关资源
      最近更新 更多