From: Baz Date: Wed, 31 Oct 2007 23:59:24 GMT Subject: Re: [PATCH] Implement sending mails over TLS in git-send-email. Message-ID: <2faad3050710311659s10cab8fbj45bac505b22bb0c2@mail.gmail.com> In-Reply-To: <981e6de60710311504v666943beve3b87c6a713fb18c@mail.gmail.com> On 31/10/2007, Simon Sasburg wrote: > > In other words, this patch should be entirely unnecessary if you have > > Authen::SASL installed - could you try this? (I've checked for myself, > > git-send-email sends me mail fine via gmail without this patch) > > Well, it fails here, maybe maybe you can show me exactly what you did > (configuration/parameters etc)? > > This is what i do now: > > git-send-email testfile.patch -to simon.sasburg@gmail.com --chain-reply-to --smtp-server smtp.gmail.com --smtp-user simon.sasburg --smtp-pass secret --smtp-ssl --smtp-server-port 587 > and it fails, while the same line using --smtp-tls instead of > --smtp-ssl with my patch applied works. > > What am i missing? > ok I'm going to downgrade what I said to 'it works fine with gmail' - it just doesnt do starttls, your code does. git-send-email --from 'brian.ewins@gmail.com' --to 'brian.ewins@gmail.com' --smtp-server smtp.gmail.com --smtp-user 'brian.ewins@gmail.com' --smtp-pass 'secret' --smtp-ssl 0001-the-patch-goes-here That's using SSL on port 465, not TLS. Did this not work for you? I thought Net::SMTP passed its constructor options to IO::Socket, but no. An alternate way of getting starttls to work, without using Net::SMTP::TLS, is this: #connect with Net::SMTP - not ::SSL or the connect will fail $smtp = Net::SMTP->new('smtp.gmail.com', Port => 587, Debug => 1) or die "Could not connect to server\n"; #issue the starttls command, assuming user asked for this $smtp->command('STARTTLS'); $smtp->response(); #if server says 220, then go ahead and convert the socket. Bless as Net::SMTP::SSL # - necessary to inherit both IO::Socket::SSL and Net::SMTP #start_SSL has been renamed, twice. Nice stable api :) #extra args for checking server cert etc can be passed to start_SSL. $smtp->code() == 220 and $smtp = Net::SMTP::SSL->start_SSL($smtp) or die "STARTTLS failed! ".$smtp->message; # say hello again to get server features (including auth) $smtp->hello(); # now continue as before, with $smtp->auth()...