git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] send-email: add --get-smtp-server option to fetch SMTP settings

From
Julian Swagemakers <julian@swagemakers.org>
Date
Aug 4, 2025, 11:51 UTC
Message-ID
<DBTME8R0DCOH.2E8WOTO3STJ4L@swagemakers.org>
In-Reply-To
<1ABB6EBC-7CA0-4108-94AC-F38E96BC7673@live.com>
On Sun Aug 3, 2025 at 3:59 PM CEST, Aditya Garg wrote:
Show 15 quoted lines
> On 03/08/25 7:06 pm, Julian Swagemakers wrote:
>> On Wed Jul 30, 2025 at 5:12 PM CEST, Aditya Garg wrote:
>>> 
>>> 2. If that fails, it attempts to fetch the autoconfig file from the email
>>>   provider's autoconfig URL, which is typically in the format
>>>   `https://autoconfig.[domain]/mail/config-v1.1.xml?emailaddress=[email]`.
>> 
>> The documentation mentions using `DOMAIN/.well-known/autoconfig/mail/`
>> as an alternative to the autoconfig subdomain, what do you think about
>> supporting that?
>
> Can be supported, but I unfortunately didn't find any email provider having
> that sort of server to test. Do you have any in mind? Nevertheless, and untested
> implementation can be done.
>
I also don't know any hosts supporting this.
Show 23 quoted lines
>>> +sub parse_config {
>>> +	require XML::LibXML;
>>> +	my ($xml, $email) = @_;
>>> +	my $parser = XML::LibXML->new;
>>> +	my $doc = eval { $parser->load_xml(string => $xml) };
>>> +	die "Failed to parse XML\n" unless $doc;
>>> +	my $config_num = 0;
>>> +	my $smtp_encryption_config;
>>> +	my $smtp_user_config;
>>> +
>>> +	foreach my $outgoing ($doc->findnodes('//outgoingServer')) {
>>> +		$config_num++;
>>> +		if ($outgoing->findvalue('./socketType') eq 'SSL') {
>>> +			$smtp_encryption_config = 'ssl';
>>> +		} elsif ($outgoing->findvalue('./socketType') eq 'STARTTLS') {
>>> +			$smtp_encryption_config = 'tls';
>>> +		} else {
>>> +			$smtp_encryption_config = 'plain';
>> 
>> 'plain' is unencrypted, I think this should be accompanied by a big
>> warning.
>
> Any ideas on how you want that to be displayed?
How about something like this:
    Found SMTP server settings for example@tiscali.cz:
    Configuration 1:
      Server: smtp.mail.tiscali.cz
      Port: 25
      Encryption: plain
      Username: example@tiscali.cz
    Warning: Encryption plain is unencrypted!
Show 26 quoted lines
>>> +		}
>>> +
>>> +		if ($outgoing->findvalue('./username') eq '%EMAILADDRESS%') {
>>> +			$smtp_user_config = $email;
>>> +		} elsif ($outgoing->findvalue('./username') eq '%EMAILLOCALPART%') {
>>> +			$smtp_user_config = (split /@/, $email)[0];
>>> +		} elsif ($outgoing->findvalue('./username') eq '%EMAILDOMAIN%') {
>>> +			$smtp_user_config = (split /@/, $email)[1];
>>> +		} else {
>>> +			$smtp_user_config = $outgoing->findvalue('./username');
>>> +		}
>>> +
>>> +		print "\nConfiguration $config_num:\n";
>>> +		print "  Server: ", $outgoing->findvalue('./hostname'), "\n";
>>> +		print "  Port: ", $outgoing->findvalue('./port'), "\n";
>>> +		print "  Encryption: ", $smtp_encryption_config, "\n";
>>> +		print "  Username: ", $smtp_user_config, "\n";
>> 
>> The new option only gives you the needed SMTP configuration, as a
>> user you still need to apply them and to do that you will need to
>> look up how. We could help the user here and give them copy and
>> paste commands similar to when trying to commit without having an
>> identity set.
>
> Git allows you to set it as global config or repo specific config.
> I'm not sure how to give a copy/paste command for different needs.
How about something like this:
    Found SMTP server settings for example@pobox.com:
    Configuration 1:
      Server: smtp.pobox.com
      Port: 465
      Encryption: ssl
      Username: example@pobox.com
    Configuration 2:
      Server: smtp.pobox.com
      Port: 587
      Encryption: tls
      Username: example@pobox.com
    To apply the settings use:
      git config --global sendmail.smtpServer VALUE
      git config --global sendmail.smtpServerPort VALUE
      git config --global sendmail.smtpEncryption VALUE
      git config --global sendmail.smtpUser VALUE
    Omit --global to set the configuration only in this repository.
Show 10 quoted lines
>> The XML file also contains authentication details, what do you think
>> about processing those? That would also allow adding references to the
>> documentation in case it is OAuth2.
>
> Honestly, app passwords remain as a preferred way to use git send-email.
> Outlook I guess is just an exception due to obvious reasons. Plus, OAuth2
> does not tell if the Auth is XOAUTH2 or OAUTHBEARER. Not sure if its worth
> adding here. I am open to ideas on use cases though, and may try to
> implement.
>

I was thinking of something as simple as rendering a message if oauth2 is one of the options. Something like:

    Found SMTP server settings for example@gmail.com:
    Configuration 1:
      Server: smtp.gmail.com
      Port: 465
      Encryption: ssl
      Username: example@gmail.com
    The SMTP server supports OAuth2 authentication. If you want to use OAuth2,
    please review the git-send-email man pages for more details.
Show 26 quoted lines
>>> +	}
>>> +}
>>> +
>>> +if ($get_smtp_server) {
>>> +	require URI::Escape;
>>> +	print "Enter your email address: ";
>>> +	chomp(my $email = <STDIN>);
>> 
>> Someone sending out emails will most likely already have set up
>> `user.email` in their gitconfig. We could just use that instead of
>> prompting for user input, or at least suggest it as a default.
>
> Suggesting as a default is better then not prompting. Although I think
> it won't be easy to read the config since all this exits before the config
> is parsed (I guess?).>
>> If you don't have an SMTP server configured then `git send-email`
>> will default to `localhost` and fail if you are not running a
>> local SMTP server with: `Unable to initialize SMTP properly.
>> Check config and use --smtp-debug.`. I would suggest altering the
>> message pointing the user to the new option.
>
> "Unable to initialize SMTP properly. Check config and use
> --smtp-debug. Use --get-smtp-server to get the correct settings for
> you SMTP server if needed."
>
> What do you think about that?
Looks good.
Regards Julian
Previous: Aditya GargNext: Aditya Garg
Message 4 of 10 in “send-email: add --get-smtp-server option to fetch SMTP settings”
  1. send-email: add --get-smtp-server option to fetch SMTP settingsAditya Garg, Jul 30, 2025
  2. Julian SwagemakersAug 3, 2025
  3. Aditya GargAug 3, 2025
  4. Julian SwagemakersAug 4, 2025
  5. Aditya GargAug 4, 2025
  6. Aditya GargAug 22, 2025
  7. send-email: add --get-smtp-server option to fetch SMTP settingsAditya Garg, Aug 22, 2025
  8. send-email: add --get-smtp-server option to fetch SMTP settingsAditya Garg, Aug 26, 2025
  9. brian m. carlsonAug 27, 2025
  10. Aditya GargAug 27, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.