如何通过SOCKS代理使用Net :: SMTP?

时间:2019-05-09 06:34:41

标签: ruby networking smtp socks

我正在Ruby 2.6中这样做:

require 'net/smtp'
Net::SMTP.start('smtp.gmail.com', 457).do |smtp|
  smtp.helo('gmail.com')
end

现在,我想做完全一样的事情,但是要通过SOCKS4 / 5代理。我在文档中找不到任何内容。

1 个答案:

答案 0 :(得分:1)

看看Net::SMTP的来源,似乎它没有对SOCKS代理的内置支持。

一些想法:

  1. 您的Ruby解释器是否具有SOCKS支持?如果是,那么您将可以使用SOCKSSocket class。创建Net :: SMTP的子类,并覆盖tcp_socket method以使用SOCKSSocket代替TCPSocket
  2. 使用ruby-proxifier宝石(虽然看起来很旧)。
  3. 在纯Ruby中重新实现SOCKSSocket(通过SOCKS4进行连接不是很困难,SOCKS5稍微复杂一些,请参见this example以供参考)或找到现有的实现(尽管我还没有)能够找到一个)。