`
cvu
  • 浏览: 107691 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Ruby 写的 Mail Proxy

    博客分类:
  • ruby
阅读更多
光缆还没修好,公司内部系统有些是放在美国的,不能访问就不能工作。而且因为是内部系统,web proxy也不能用。受这位亚洲Geek的启发,用ruby做了一个mail proxy,用gmail做桥梁,deploy在美国office,从上海office发mail去访问。

使用效果附图
1. 发mail

2. 收到的mail(这是上一版的回复mail,现在code是把html文件作为附件的)


主要用到
  1. Watir 用来在那里打开IE,login,goto link,get html
  2. Gmailer 用来收发gmail
  3. 还有些小trick,在code里面都commment说明了一下


目前这个程序可以解决一些GET的请求,和GET的form,下一步要做的是,都是些不很紧迫的需求:
  1. form method=post,应该也可以用watir实现。
  2. 直接在mail里面click或者submit,就可以自动发一封request mail出去,把outlook当浏览器使。


共享一下代码。理论上可以访问任何网站。出于安全,code里面的公司网站,mail地址都只是例子。code只管拿去用,不要干坏事。
require 'gmailer'
require 'watir'
include Watir

host = "http://app.company.com"
login = "sa"
pwd = "secret"

gmail_account = 'mail.proxy'
gmail_pwd = 'secret'

msgerr = ""
GMailer.connect(gmail_account, gmail_pwd) do |g|
  g.messages(:read => false).each_msg do |msg|
    body = msg.body.gsub("<WBR>", "").gsub("u003d", "=") # to fix MIME format
    
    unless body
      # the same subject mails will be regarded as a conversation,
      # we define a rule to avoid that.
      msgerr = "Please do not use the subject that has been used."
    else
      urls = body.scan(/<a href="(.*)".*>\1<\/a>/i).flatten!
  
      if urls.empty?
        # if get no url, return a error msg.
        msgerr = "Cannot find any URL in the request mail."
      else
        # browser
        browser = IE.new
        browser.goto( host + '/login.asp' )
        browser.text_field( :name, 'loginname' ).set( login )
        browser.text_field( :name, 'password' ).set( pwd )
        browser.button( :name, 'submit2' ).click
        
        files = []
        for url in urls
          browser.goto(url) # visit the url
          html = browser.html.gsub("href=\"", "href=\"#{/.*\//.match(url)[0]}") # rewrite links 
          html = html.gsub("action=", "action=#{/.*\//.match(url)[0]}") # rewrite form actions, assume method=get 
          filename = url.split("/").last + ".htm"
          File.open(filename, 'w') {|f| f.puts html}
          files << filename
        end
        g.send(:to => msg.sender_email,:subject => "Re: " + msg.subject,:files => files)
        files.each {|f| File.delete(f)}
        browser.close              
      end
    end
   
    if msgerr
      puts msgerr
      g.send(:to => msg.sender,:subject => "Re: " + msg.subject,:body => msgerr)
    end 
  end
end
[img]
  • 描述: send mail
  • 大小: 24.7 KB
  • 描述: getmail
  • 大小: 31.9 KB
分享到:
评论

相关推荐

    LAMP+Proxy+读写分离

    读写分离的核心思想是将数据库的读操作和写操作分开,主数据库(Master)负责处理所有的写操作,如CREATE、INSERT、UPDATE和DELETE,而从数据库(Slave)则专门处理读操作。这种设计可以显著提升系统的并发处理能力...

    proxy.jsp、proxy.ashx、proxy.php、proxy.config

    配置时同样需要将`proxy.ashx`部署到服务器,并在ArcGIS JavaScript API中设置`proxyUrl`属性。 **proxy.php** 是PHP语言实现的代理服务,适用于PHP环境,如Apache或Nginx。对于那些基于PHP的Web应用,可以使用`...

    mail-proxy

    mail-proxy

    mysql配置mysql-proxy读写分离1

    MySQL Proxy 是一个开源工具,它允许你在 MySQL 客户端和服务器之间设置一个代理层,以便实现诸如负载均衡、故障切换、读写分离等高级功能。在这个场景中,我们将讨论如何配置 MySQL Proxy 来实现读写分离,以提高...

    使用mysql-proxy实现mysql读写分离

    5. **启动mysql-proxy**:通过上述命令启动mysql-proxy后,它将会根据接收到的SQL语句类型(读或写),将请求转发至相应的数据库。 6. **验证读写分离是否成功**:可以通过向mysql-proxy发送SQL语句并观察其转发...

    ruby写的网络蜘蛛

    Ruby可以通过第三方库如HTTP::Proxy来配置和管理IP代理。 8. 避免重复抓取:使用哈希表或数据库记录已抓取的URL,确保同一页面不被多次抓取。 9. 考虑反爬策略:许多网站会设置反爬策略,如User-Agent检测、验证码...

    rails-reverse-proxy:Ruby on Rails的反向代理

    Rails-反向代理Ruby on Rails的反向代理。 反向代理接受来自客户端的请求,将其转发到可以满足该请求的服务器,然后将服务器的响应返回给客户端安装你知道该怎么做。 在您的Gemfile中gem 'rails-reverse-proxy' 然后...

    ABAP 调用ABAP PROXY

    在SAP系统中,ABAP调用ABAP Proxy是一种常见的技术操作,用于在不同系统间或者同一系统内的组件之间实现通信。ABAP Proxy是SAP提供的一个强大的接口技术,它允许开发者创建安全、高效的远程调用机制。接下来,我们将...

    OPC COM ProxyStub MergeModule (x86)_foundation_proxy_usvfs_proxy

    Proxy和Stub的作用是解决进程间通信的问题,使得不同地址空间的应用程序可以透明地调用彼此的功能。 3. **MergeModule (x86)**:MergeModule是一个MSI(Microsoft Installer)模块,用于将组件打包到安装程序中。...

    goproxy-android snail007/goproxy全能代理服务器安卓版

    《GoProxy-Android:全能代理服务器在安卓平台的应用与实现》 GoProxy-Android是由snail007/goproxy团队开发的一款适用于安卓系统的全能代理服务器应用。此项目旨在为移动设备提供强大的网络代理功能,使得用户能够...

    sharding-proxy实现分表

    接下来我们将深入探讨标题和描述中涉及的“sharding-proxy实现分表”这一主题。 ### 1. 分库分表介绍 分库分表是数据库水平扩展的一种常见策略,用于解决单表数据量过大导致的性能问题。随着业务的增长,数据量...

    ftpproxy-1.2.3.rar_Linux c proxy_ftpproxy_ftp代理_linux ftp_proxy-

    proxy源代码,linux下的ftp 代理的源代码,大家多多支持啊

    proxy与mycat对比测试

    Proxy和Mycat是两种常用的中间件,用于实现这些功能。本篇文章将深入探讨proxy和Mycat的对比测试,以及如何在MySQL主从架构中进行测试。 首先,我们来看proxy。Proxy通常指的是数据库代理服务器,它位于应用服务器...

    foxyproxy_standard

    FoxyProxy 是一款高级代理服务器管理工具,是 Firefox 火狐浏览器的代理插件,相比比 SwitchProxy、ProxyButton、QuickProxy、xyzproxy、ProxyTex 等扩展提供更多的功能。 FoxyProxy 通过使用通配符、正则表达式和...

    apache Proxy_Error

    apache Proxy Error apache Proxy Error apache Proxy Error apache Proxy Error

    Nginx之proxy_redirect使用详解

    通过使用proxy_redirect指令,我们可以将这个Location重写成客户端能够理解且不会暴露后端服务器细节的地址。 proxy_redirect指令可以设置为三种模式:default、off或redirect replacement。其中,“default”模式...

    arcgis proxy.ashx,proxy.config

    arcgis for javascript api所需要的配置文件,能解决跨域访问的问题,我在proxy....包含两个文件proxy.ashx,proxy.config两个文件,上次下载一个说是有两个文件,其实里面只有一个,有被骗了的感觉,所以这次上传上来

    mysql-proxy 安装配置

    - `rw-splitting.lua` 是一个常用的Lua脚本,用于实现读写分发,即将读操作发送到只读服务器,写操作发送到主服务器。 - 其他如`auto-config.lua`, `balance.lua`, `commands.lua`, `parser.lua`, `tokenizer.lua`...

Global site tag (gtag.js) - Google Analytics