首页 > 解决方案 > 如何通过 SOCKS 代理使用 Net::SMTP?

问题描述

我在 Ruby 2.6 中这样做:

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

现在我想做同样的事情,但是通过 SOCKS4/5 代理。我在文档中找不到任何东西。

标签: rubynetworkingsmtpsocks

解决方案


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

几个想法:

  1. 你的 Ruby 解释器是用 SOCKS 支持构建的吗?如果是,那么您将能够使用SOCKSSocket 类。创建 Net::SMTP 的子类并覆盖要使用的tcp_socket方法SOCKSSocket,而不是TCPSocket.
  2. 使用ruby​​-proxifier gem(虽然它看起来很旧)。
  3. 在纯 Ruby 中重新实现SOCKSSocket(通过 SOCKS4 连接并不太难,SOCKS5 稍微复杂一些,请参阅此示例以供参考)或找到现有的实现(虽然我还没有找到)。

推荐阅读