On Fri, Apr 8, 2022 at 8:01 PM Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote: > > > On Fri, Apr 08 2022, Shaoxuan Yuan wrote: > > > On Fri, Apr 8, 2022 at 5:53 AM brian m. carlson > > <sandals@xxxxxxxxxxxxxxxxxxxx> wrote: > >> > >> On 2022-04-06 at 14:19:43, Shaoxuan Yuan wrote: > >> > Greetings, Git community, > >> > > >> > I'm using git-send-email with Git 2.35.1 under system > >> > 5.4.72-microsoft-standard-WSL2, x86_64 GNU/Linux. > >> > > >> > I am on a system-wide socks5 proxy. Although I set the global > >> > .gitconfig to use the socks5 proxy trying to send emails, the > >> > connection to the SMTP server seems does not go through the proxy at > >> > all. > >> > > >> > Other git commands do go through the globally set .gitconfig proxy, > >> > git-send-email seems to be an exception. > >> > >> I think you're referring to http.proxy. That affects only HTTP, HTTPS, > >> and FTP (if we even still support that). All of those protocols are > >> handled by libcurl, which includes native proxy support. It doesn't > >> affect other protocols like SSH or SMTP. > >> > >> > So I'm wondering if there needs to be a code change in > >> > 'git-send-email.perl' to run the connection through a proxy, or I just > >> > need to tune the setting to accomplish this? > >> > >> git send-email is written in Perl and doesn't use libcurl, so it doesn't > >> have proxy support. If there's a particular optional module we could > >> dynamically load to provide proxy support, that's an option we could > >> support if someone wanted to provide a patch. > >> > >> In the mean time, you could also try using some sort of tool, like > >> socat, to bind a local port tunnelling over the proxy to the destination > >> server and then use SMTP over that local port to connect. > >> -- > >> brian m. carlson (he/him or they/them) > >> Toronto, Ontario, CA > > > > Thanks, it's pretty informative ;-) > > If you want to add a "native" feature to git-send-email.perl (and > provide a patch) it looks from > https://stackoverflow.com/questions/3253360/using-socks5-proxy-with-netsmtp > that doing so isn't too hard. > > I.e. Net::SMTP (which we use) just uses standard Perl modules to connect > to the network, and there's other existing modules to ferry any such > connection through a SOCKS proxy: https://metacpan.org/pod/Net::SOCKS & > https://metacpan.org/pod/IO::Socket::Socks (I'm not sure which of these > is a better choice). > > So it seems like a rather easy 10-20 line patch (including docs and > boilerplate) where we'd just create our own Git::Net::SMTP class, and > that class in turn would be like Net::SMTP, except its @ISA would first > dispatch to a "new" in a class we own. > > We could thus intercept the new() invocation it makes to the socket > class it's picking now, and direct it to a wrapper. > > There's probably even an existing CPAN module for "given this class, > screw with its @ISA such that socks support is added", I just haven't > looked. Thanks for the info, I will definitely try to make a patch and see how it works :-) -- Thanks & Regards, Shaoxuan