Ruby从指定邮箱读取邮件(IMAP/POP3)

Posted Liz-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby从指定邮箱读取邮件(IMAP/POP3)相关的知识,希望对你有一定的参考价值。

  • Documents:
  • 目标:
    • 从收件箱中提取邮件信息
  • Code
     1 require net/imap
     2 require net/pop
     3 require mail
     4 require nokogiri
     5 
     6 server=imap.xxx.com 
     7 user=[email protected]
     8 password=password
     9 
    10 imap = Net::IMAP.new(server,{:port=>993,:ssl=>true}) # 需要根据邮件服务器的具体信息进行设置
    11 # imap = Net::IMAP.new(server,{:port=>143,:ssl=>false})
    12 imap.login(user,password)
    13 
    14 imap.select("inbox")
    15 imap.search(["NEW"]).each do |id|  # 获取符合条件的邮件id集合
    16     # 邮件标题
    17     envelope = imap.fetch(msg_id, "ENVELOPE")[0].attr["ENVELOPE"]
    18     from =  Mail::Encodings.value_decode(envelope.from[0].name) # 转换为中文字符
    19     subject = Mail::Encodings.value_decode(envelope.subject) 
    20     puts "#{from}: \t#{subject}"
    21 
    22     # 邮件正文
    23     body = imap.fetch(msg_id, "BODY[TEXT]")[0].attr["BODY[TEXT]"]
    24     doc = Nokogiri::html.parse(body, nil, "UTF-8")  # 如果获取的邮件为HTML格式,可以使用nokogiri对其进行处理
    25     ele = doc.xpath("//label//path").inner_text
    26 end 
    27 
    28 imap.logout
    29 imap.disconnect
    30 
    31 
    32 
    33 server=pop3.xxx.com # 只要支持imap和pop3都可以使用
    34 user=[email protected]
    35 password=password
    36 
    37 pop = Net::POP3.new server
    38 pop.start user, password
    39 
    40 mails = pop.mails.reverse
    41 mail = mails.first # 获取最新一封未读邮件
    42 subject = mail.header.split("\r\n")
    43 body = mail.pop 
    44 doc = Nokogiri::HTML.parse(body, nil, "UTF-8") 
    45 ele = doc.xpath("//label//path").inner_text
    46 
    47 pop.finish

     

以上是关于Ruby从指定邮箱读取邮件(IMAP/POP3)的主要内容,如果未能解决你的问题,请参考以下文章

SpringBootspringboot 与 Email 邮箱

QQ邮箱打开IMAP开启时验证密出不来怎么办?

如何解除 outlook 2016 附件大小的限制

如何在 Python 中通过 imap/pop3 识别 Outlook“消息 ID”?

linux邮件服务器搭建

Exchange Server 2016管理系列课件20.开启或关闭邮箱功能