亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby實現郵件主動推送觸發程序

2020-10-29 19:43:16
字體:
來源:轉載
供稿:網友

郵件服務器接收到郵件后,service push通知程序。有什么辦法實現嗎?

1、客戶端輪詢
2、服務器主動推送。

首先熟悉一下,收發郵件的協議:
Net::SMTP(發送郵件)
Net::POP3(接收郵件)
Net::IMAP(接收郵件)

網上很多用pop3收郵件的例子,但是用pop3收郵件只能獲取收件箱里面所有郵件,郵件是否已讀等標記無法獲取,使用imap協議則避免了這個尷尬,imap不僅能獲得一個郵件的詳細信息(比如是否已讀,是否回復),它還允許用戶更改郵件的標記,但是目前支持imap協議的郵件服務器并不多,我知道的只有21cn和gmail,下面的例子中使用了代理 、SSL認證多個內容,請大家參考。

imap郵件,都是按需索取,也就是說,當你得到一個Message的對象時,其實里面什么信息都沒有,當你在這個對象里用get方法取得信息時,比如getSubject,那么Message對象會重新訪問郵件服務器來得到這個消息的 ,所以在得到所有所需信息之前,不可以關閉目錄,更不可以斷開連接。
如果實在想在關閉目錄或者連接后操作Message對象的話,需要使用Folder對象的fetch方法得到所需信息。

一:客戶端輪詢

下邊用pop3和imap顯示一下輪詢訪問獲取郵件的例子:

POP3輪詢:

復制代碼 代碼如下:

loop do
require 'net/pop'
pop = Net::POP3.new('EMAILSERVICE')
pop.start('USENAME', 'PASSWORD')           
if pop.mails.empty?
  puts 'No mail.'
else
  pop.each_mail do |m|
    m.pop do |chunk|  
      p chunk
    end
  end
  puts "#{pop.mails.size} mails popped."
end
pop.finish
sleep(10)
end

imap輪詢:

復制代碼 代碼如下:

loop do
require 'net/imap'
imap = Net::IMAP.new('EMAILSERVICE')
imap.login "USERNAME", "PASSWORD"
imap.examine('INBOX')
imap.search(["BEFORE", "29-Oct-2014", "SINCE", "28-Oct-2014"]).each do |message_id|
   envelope = imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]
   puts "#{envelope.from[0].name}: /t#{envelope.subject}"
end
sleep(10)
end

二:服務器主動推送

下邊實現一種服務器主動推送方式:(IMAP.IDLE)

這是一種介于pull和Persistent TCP/IP之間的技術:long polling(長輪詢)。原理是客戶端每次對服務的請求都被服務端hold住,等到有message返回或time out之后,會再次主動發起請求,等待message的到達。這種模式不需要保持心跳,也不需要持續TCP的占用,比較適合頁面端及時消息的推送。

復制代碼 代碼如下:

SERVER = 'EMAILSERVICE'
USERNAME = 'USERNAME'
PW = 'PASSWORD'
require 'net/imap'

# Extend support for idle command. See online.
# http://www.ruby-forum.com/topic/50828
# https://gist.github.com/jem/2783772
# but that was wrong. see /opt/ruby-1.9.1-p243/lib/net/imap.rb.
class Net::IMAP
  def idle
    cmd = "IDLE"
    synchronize do
      @idle_tag = generate_tag
      put_string(@idle_tag + " " + cmd)
      put_string(CRLF)
    end
  end

  def say_done
    cmd = "DONE"
    synchronize do
      put_string(cmd)
      put_string(CRLF)
    end
  end

  def await_done_confirmation
    synchronize do
      get_tagged_response(@idle_tag, nil)
      puts 'just got confirmation'
    end
  end
end

class Remailer
  attr_reader :imap

  public
  def initialize
    @imap = nil
    @mailer = nil
    start_imap
  end

  def tidy
    stop_imap
  end

  def print_pust
       envelope = @imap.fetch(-1, "ENVELOPE")[0].attr["ENVELOPE"]
       puts "From:#{envelope.from[0].name}/t Subject: #{envelope.subject}"
  end

  def bounce_idle
    # Bounces the idle command.
    @imap.say_done
    @imap.await_done_confirmation
    # Do a manual check, just in case things aren't working properly.
    @imap.idle
  end

  private
  def start_imap
    @imap = Net::IMAP.new('pop.i-click.com')
    @imap.login USERNAME, PW
    @imap.select 'INBOX'

    # Add handler.
    @imap.add_response_handler do |resp|
      if resp.kind_of?(Net::IMAP::UntaggedResponse) and resp.name == "EXISTS"
        @imap.say_done
        Thread.new do
          @imap.await_done_confirmation
          print_pust
          @imap.idle
        end
      end
    end
    @imap.idle
  end

  def stop_imap
    @imap.done
  end

end

begin
  Net::IMAP.debug = true
  r = Remailer.new
  loop do
    puts 'bouncing...'
    r.bounce_idle
    sleep 15*60
    #一般設置15分鐘無操作保持長鏈接
  end
ensure
  r.tidy
end

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久偷看各类女兵18女厕嘘嘘| 亚洲国产毛片完整版| 国产精品久久久久久久av大片| 亚洲人成网站在线播| 精品免费在线观看| 国产精品99久久久久久久久久久久| 久久久999国产精品| 6080yy精品一区二区三区| 欧美日韩综合视频网址| 亚洲aⅴ日韩av电影在线观看| www.欧美精品一二三区| 日韩亚洲一区二区| 欧美激情精品久久久久久久变态| 国产91精品久久久久| 欧美老妇交乱视频| 日本精品免费一区二区三区| 欧美精品激情blacked18| 欧美日韩不卡合集视频| 自拍偷拍亚洲欧美| 日韩欧美在线观看视频| 茄子视频成人在线| 国产精品久久视频| 清纯唯美日韩制服另类| 亚洲理论片在线观看| 日本不卡高字幕在线2019| 欧美巨猛xxxx猛交黑人97人| 国产精品91久久| 国产日韩欧美中文| 波霸ol色综合久久| 美女少妇精品视频| 日韩一二三在线视频播| 国产原创欧美精品| 欧美视频在线观看免费网址| 亚洲精品视频久久| 日韩激情视频在线| 992tv成人免费影院| 欧美视频在线观看 亚洲欧| 日本亚洲欧洲色α| 久热精品视频在线观看| 国产精品直播网红| 日本电影亚洲天堂| 亚洲美女性视频| 成人国产亚洲精品a区天堂华泰| 欧美黑人一级爽快片淫片高清| 国产成人精品一区二区三区| 一区国产精品视频| 久久97久久97精品免视看| 2019国产精品自在线拍国产不卡| 久久躁狠狠躁夜夜爽| 另类视频在线观看| 国产亚洲一区二区精品| 欧美成人午夜激情视频| 久久人体大胆视频| 欲色天天网综合久久| 日韩精品在线观看一区| 91久久嫩草影院一区二区| 亚洲精品电影在线观看| 国产女精品视频网站免费| 91网站免费看| 国产亚洲福利一区| 久久精品国产视频| 日韩在线资源网| 亚洲夜晚福利在线观看| 91日韩在线播放| 久久精品国产亚洲精品| xxav国产精品美女主播| 一区二区三区国产在线观看| 国产亚洲一区二区精品| 亚洲人高潮女人毛茸茸| 日韩中文在线观看| 亚洲激情 国产| 亚洲天堂男人天堂| 久久精品国产清自在天天线| 免费成人高清视频| 欧美黄色三级网站| 中文字幕av日韩| 日韩一区二区在线视频| 欧美日韩激情视频8区| 在线日韩第一页| 操91在线视频| 91po在线观看91精品国产性色| 欧美专区在线观看| 欧美日韩亚洲系列| 国产精品免费一区二区三区都可以| 久久久久久久久久国产| 国产黑人绿帽在线第一区| 国产伦精品免费视频| 精品国产鲁一鲁一区二区张丽| 国产成人一区三区| 亚洲的天堂在线中文字幕| 亚洲精品aⅴ中文字幕乱码| 欧美天堂在线观看| 欧美性猛交xxxx偷拍洗澡| 毛片精品免费在线观看| 国产日韩在线免费| 亚洲福利视频专区| 欧美日韩亚洲高清| 亚洲国产精品成人精品| 成人性生交xxxxx网站| 国产精品扒开腿做爽爽爽男男| 日韩在线不卡视频| 色婷婷久久av| 久久在精品线影院精品国产| 国产一区二区在线免费视频| 亚洲国产精品99久久| 欧美亚洲国产视频小说| 亚洲天堂av电影| 国产日韩欧美在线播放| 亚洲天堂开心观看| 欧美日韩亚洲一区二| 日韩欧中文字幕| 成人久久一区二区三区| 欧美多人爱爱视频网站| 日韩在线视频观看正片免费网站| 国产91成人在在线播放| 啊v视频在线一区二区三区| 在线观看不卡av| 欧洲成人在线观看| 国产精品wwwwww| 91社影院在线观看| 青青草国产精品一区二区| 26uuu亚洲伊人春色| 欧美精品性视频| 国产精品入口夜色视频大尺度| 北条麻妃一区二区三区中文字幕| 国产福利精品av综合导导航| 精品国产一区二区三区久久狼黑人| 日韩电影中文字幕| 欧美精品一区在线播放| 国产成人avxxxxx在线看| 成人久久一区二区三区| 精品国产91久久久| 国产z一区二区三区| 亚洲国产成人久久| 午夜精品久久久久久久99黑人| 亚洲欧美中文日韩在线| 成人精品久久久| 日韩精品在线影院| 亚洲天堂网在线观看| 精品视频久久久久久久| 久久久久久久久国产| 精品久久久久久亚洲国产300| 亚洲精品99久久久久| 91国语精品自产拍在线观看性色| 精品日本高清在线播放| 欧美日韩在线免费| 国产亚洲人成网站在线观看| 亚洲美女在线视频| 日韩成人激情在线| 国产精品美女主播在线观看纯欲| 日韩av不卡在线| 日韩视频在线观看免费| 国产精品情侣自拍| 国产精品日韩久久久久| 日韩中文在线中文网在线观看| 欧美风情在线观看| 在线观看中文字幕亚洲| 欧美老少配视频| 欧美精品久久久久a| 日韩电影中文 亚洲精品乱码| 精品毛片网大全| 国产精品福利片| 欧美性高潮床叫视频| 亚洲欧洲一区二区三区久久|