用ruby获取Email邮箱标题并判断

class String
  def has_one_in?(string_Arr)
    has = false
    string_Arr.each { |word|  
      has= self.include?(word)
      if has
        break
      end
    }
    has
  end
end
def decode_subject(sub)
  if sub.include?("B?")
    encode_str = sub.match(/=\?(.*?)\?=/).to_s
    encode_str.scan(/=\?(.*?)\?(B\?)(.*?)\?=/)
    if $1 != nil
      encode = $1.to_s
      if encode=='utf8'
        encode='utf-8'
      end
      str = $3.to_s
      decode_str = Base64.decode64(str)
      convert = Iconv.new("utf-8", encode)
      convert1 = Iconv.new("GBK//IGNORE","UTF-8")
      begin
        decode_str = convert.iconv(decode_str)
      rescue
      end
      return sub.sub(/=\?.*?\?=/,decode_str)
    else
      return sub
    end
  else
    return sub
  end
end
require 'net/pop'
require 'iconv'
require "base64"
pop = Net::POP3.new('mail.******.com','110')
pop.start('username','password')
skip_keywords = ["Out of office","out of office","out of Office","Out of Office","Out Of Office","自动回复","自动答复","外出",
  "AutoReply","Autoreply","autoreply","Auto-Re","auto-re","Auto-re","Delayed","delayed"]
email_patern = %r{([0-9a-zA-Z]{1}[0-9a-zA-Z.-]{1,40}@[0-9a-zA-Z.-]+[-\w]*[0-9a-zA-Z]*\.+[a-zA-Z]{2,15})}i

File.open("test.txt","w+") do |file|
  mail_addr = []
  end_num = 0
  pop.mails.each do |e|  
    subj= e.header.split("\r\n").grep(/^Subject:/).to_s
    subj = decode_subject(subj)
    if !subj.has_one_in?(skip_keywords)
      email= e.pop.to_s.scan(email_patern)
      email = email.uniq
      email.each do |item|
        if !item.to_s.include?("relay.greensmtp.com") and !item.to_s.start_with?("3D")
          if !mail_addr.include?(item)
            mail_addr << item
            puts item.to_s + "|" + end_num.to_s
          end
        end
      end
    end
    end_num+=1 
  end
  file.puts mail_addr
end

转载于:https://www.cnblogs.com/heimirror/archive/2011/05/17/2049118.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值