浏览 3783 次
锁定老帖子 主题:Ruby 写的 Mail Proxy
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-04
这位亚洲Geek的启发,用ruby做了一个mail proxy,用gmail做桥梁,deploy在美国office,从上海office发mail去访问。
光缆还没修好,公司内部系统有些是放在美国的,不能访问就不能工作。而且因为是内部系统,web proxy也不能用。受
使用效果附图 1. 发mail 2. 收到的mail(这是上一版的回复mail,现在code是把html文件作为附件的) 主要用到
目前这个程序可以解决一些GET的请求,和GET的form,下一步要做的是,都是些不很紧迫的需求:
共享一下代码。理论上可以访问任何网站。出于安全,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] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |