如何在 SOCKS 代理上使用 Net::SMTP?
How to use Net::SMTP over SOCKS proxy?
我正在这样做,在 Ruby 2.6:
require 'net/smtp'
Net::SMTP.start('smtp.gmail.com', 457).do |smtp|
smtp.helo('gmail.com')
end
现在我想做完全相同的事情,但要通过 SOCKS4/5 代理。我在文档中找不到任何内容。
查看 Net::SMTP 的源代码,它似乎没有 built-in 对 SOCKS 代理的支持。
几个想法:
- 您的 Ruby 解释器是否支持 SOCKS?如果是,那么您可以使用 SOCKSSocket class. Create a subclass of Net::SMTP and override
tcp_socket
method 来使用 SOCKSSocket
而不是 TCPSocket
.
- 使用ruby-proxifiergem(虽然看起来比较旧)
- Re-implement
SOCKSSocket
in pure Ruby(通过 SOCKS4 连接并不难,SOCKS5 稍微复杂一些,参考 this example)或者找一个现有的实现(虽然我没能找到一个)。
我正在这样做,在 Ruby 2.6:
require 'net/smtp'
Net::SMTP.start('smtp.gmail.com', 457).do |smtp|
smtp.helo('gmail.com')
end
现在我想做完全相同的事情,但要通过 SOCKS4/5 代理。我在文档中找不到任何内容。
查看 Net::SMTP 的源代码,它似乎没有 built-in 对 SOCKS 代理的支持。
几个想法:
- 您的 Ruby 解释器是否支持 SOCKS?如果是,那么您可以使用 SOCKSSocket class. Create a subclass of Net::SMTP and override
tcp_socket
method 来使用SOCKSSocket
而不是TCPSocket
. - 使用ruby-proxifiergem(虽然看起来比较旧)
- Re-implement
SOCKSSocket
in pure Ruby(通过 SOCKS4 连接并不难,SOCKS5 稍微复杂一些,参考 this example)或者找一个现有的实现(虽然我没能找到一个)。