Re: [PATCH] Implement sending mails over TLS in git-send-email.
- From
Baz <brian.ewins@gmail.com>
- Date
- Oct 31, 2007, 23:59 UTC
- Message-ID
- <2faad3050710311659s10cab8fbj45bac505b22bb0c2@mail.gmail.com>
- In-Reply-To
- <981e6de60710311504v666943beve3b87c6a713fb18c@mail.gmail.com>
On 31/10/2007, Simon Sasburg <simon.sasburg@gmail.com> wrote:
Show 14 quoted lines
> > 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()...