zoukankan      html  css  js  c++  java
  • 用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
    
  • 相关阅读:
    grant授权“失败”的原因
    解决:error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
    3.MySQL之创建/删除用户
    Linux常用宏contianer_of()
    Linux设备模型(一)_基本概念
    内核探测工具systemtap简介
    模块驱动调试记录 ——platform_driver_register
    Linux软件栈上的性能诊断工具集
    系统调用—sysconf
    C的编译&预编译
  • 原文地址:https://www.cnblogs.com/heimirror/p/2049118.html
Copyright © 2011-2022 走看看