 1e16b255b9
			
		
	
	1e16b255b9
	
	
	
		
			
			Use libcurl's high-level API functions to implement git-imap-send
instead of the previous low-level OpenSSL-based functions.
Since version 7.30.0, libcurl's API has been able to communicate with
IMAP servers. Using those high-level functions instead of the current
ones would reduce imap-send.c by some 1200 lines of code. For now,
the old ones are wrapped in #ifdefs, and the new functions are enabled
by make if curl's version is >= 7.34.0, from which version on curl's
CURLOPT_LOGIN_OPTIONS (enabling IMAP authentication) parameter has been
available. The low-level functions will still be used for tunneling
into the server for now.
As I don't have access to that many IMAP servers, I haven't been able to
test the new code with a wide variety of parameter combinations. I did
test both secure and insecure (imaps:// and imap://) connections and
values of "PLAIN" and "LOGIN" for the authMethod.
In order to suppress a sparse warning about "using sizeof on a
function", we use the same solution used in commit 9371322a6
("sparse: suppress some "using sizeof on a function" warnings",
06-10-2013) which solved exactly this problem for the other commands
using libcurl.
Helped-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Bernhard Reiter <ockham@raz.or.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			183 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| git-imap-send(1)
 | |
| ================
 | |
| 
 | |
| NAME
 | |
| ----
 | |
| git-imap-send - Send a collection of patches from stdin to an IMAP folder
 | |
| 
 | |
| 
 | |
| SYNOPSIS
 | |
| --------
 | |
| [verse]
 | |
| 'git imap-send' [-v] [-q] [--[no-]curl]
 | |
| 
 | |
| 
 | |
| DESCRIPTION
 | |
| -----------
 | |
| This command uploads a mailbox generated with 'git format-patch'
 | |
| into an IMAP drafts folder.  This allows patches to be sent as
 | |
| other email is when using mail clients that cannot read mailbox
 | |
| files directly. The command also works with any general mailbox
 | |
| in which emails have the fields "From", "Date", and "Subject" in
 | |
| that order.
 | |
| 
 | |
| Typical usage is something like:
 | |
| 
 | |
| git format-patch --signoff --stdout --attach origin | git imap-send
 | |
| 
 | |
| 
 | |
| OPTIONS
 | |
| -------
 | |
| 
 | |
| -v::
 | |
| --verbose::
 | |
| 	Be verbose.
 | |
| 
 | |
| -q::
 | |
| --quiet::
 | |
| 	Be quiet.
 | |
| 
 | |
| --curl::
 | |
| 	Use libcurl to communicate with the IMAP server, unless tunneling
 | |
| 	into it.  Ignored if Git was built without the USE_CURL_FOR_IMAP_SEND
 | |
| 	option set.
 | |
| 
 | |
| --no-curl::
 | |
| 	Talk to the IMAP server using git's own IMAP routines instead of
 | |
| 	using libcurl.
 | |
| 
 | |
| 
 | |
| CONFIGURATION
 | |
| -------------
 | |
| 
 | |
| To use the tool, imap.folder and either imap.tunnel or imap.host must be set
 | |
| to appropriate values.
 | |
| 
 | |
| Variables
 | |
| ~~~~~~~~~
 | |
| 
 | |
| imap.folder::
 | |
| 	The folder to drop the mails into, which is typically the Drafts
 | |
| 	folder. For example: "INBOX.Drafts", "INBOX/Drafts" or
 | |
| 	"[Gmail]/Drafts". Required.
 | |
| 
 | |
| imap.tunnel::
 | |
| 	Command used to setup a tunnel to the IMAP server through which
 | |
| 	commands will be piped instead of using a direct network connection
 | |
| 	to the server. Required when imap.host is not set.
 | |
| 
 | |
| imap.host::
 | |
| 	A URL identifying the server. Use a `imap://` prefix for non-secure
 | |
| 	connections and a `imaps://` prefix for secure connections.
 | |
| 	Ignored when imap.tunnel is set, but required otherwise.
 | |
| 
 | |
| imap.user::
 | |
| 	The username to use when logging in to the server.
 | |
| 
 | |
| imap.pass::
 | |
| 	The password to use when logging in to the server.
 | |
| 
 | |
| imap.port::
 | |
| 	An integer port number to connect to on the server.
 | |
| 	Defaults to 143 for imap:// hosts and 993 for imaps:// hosts.
 | |
| 	Ignored when imap.tunnel is set.
 | |
| 
 | |
| imap.sslverify::
 | |
| 	A boolean to enable/disable verification of the server certificate
 | |
| 	used by the SSL/TLS connection. Default is `true`. Ignored when
 | |
| 	imap.tunnel is set.
 | |
| 
 | |
| imap.preformattedHTML::
 | |
| 	A boolean to enable/disable the use of html encoding when sending
 | |
| 	a patch.  An html encoded patch will be bracketed with <pre>
 | |
| 	and have a content type of text/html.  Ironically, enabling this
 | |
| 	option causes Thunderbird to send the patch as a plain/text,
 | |
| 	format=fixed email.  Default is `false`.
 | |
| 
 | |
| imap.authMethod::
 | |
| 	Specify authenticate method for authentication with IMAP server.
 | |
| 	If Git was built with the NO_CURL option, or if your curl version is older
 | |
| 	than 7.34.0, or if you're running git-imap-send with the `--no-curl`
 | |
| 	option, the only supported method is 'CRAM-MD5'. If this is not set
 | |
| 	then 'git imap-send' uses the basic IMAP plaintext LOGIN command.
 | |
| 
 | |
| Examples
 | |
| ~~~~~~~~
 | |
| 
 | |
| Using tunnel mode:
 | |
| 
 | |
| ..........................
 | |
| [imap]
 | |
|     folder = "INBOX.Drafts"
 | |
|     tunnel = "ssh -q -C user@example.com /usr/bin/imapd ./Maildir 2> /dev/null"
 | |
| ..........................
 | |
| 
 | |
| Using direct mode:
 | |
| 
 | |
| .........................
 | |
| [imap]
 | |
|     folder = "INBOX.Drafts"
 | |
|     host = imap://imap.example.com
 | |
|     user = bob
 | |
|     pass = p4ssw0rd
 | |
| .........................
 | |
| 
 | |
| Using direct mode with SSL:
 | |
| 
 | |
| .........................
 | |
| [imap]
 | |
|     folder = "INBOX.Drafts"
 | |
|     host = imaps://imap.example.com
 | |
|     user = bob
 | |
|     pass = p4ssw0rd
 | |
|     port = 123
 | |
|     sslverify = false
 | |
| .........................
 | |
| 
 | |
| 
 | |
| EXAMPLE
 | |
| -------
 | |
| To submit patches using GMail's IMAP interface, first, edit your ~/.gitconfig
 | |
| to specify your account settings:
 | |
| 
 | |
| ---------
 | |
| [imap]
 | |
| 	folder = "[Gmail]/Drafts"
 | |
| 	host = imaps://imap.gmail.com
 | |
| 	user = user@gmail.com
 | |
| 	port = 993
 | |
| 	sslverify = false
 | |
| ---------
 | |
| 
 | |
| You might need to instead use: folder = "[Google Mail]/Drafts" if you get an error
 | |
| that the "Folder doesn't exist".
 | |
| 
 | |
| Once the commits are ready to be sent, run the following command:
 | |
| 
 | |
|   $ git format-patch --cover-letter -M --stdout origin/master | git imap-send
 | |
| 
 | |
| Just make sure to disable line wrapping in the email client (GMail's web
 | |
| interface will wrap lines no matter what, so you need to use a real
 | |
| IMAP client).
 | |
| 
 | |
| CAUTION
 | |
| -------
 | |
| It is still your responsibility to make sure that the email message
 | |
| sent by your email program meets the standards of your project.
 | |
| Many projects do not like patches to be attached.  Some mail
 | |
| agents will transform patches (e.g. wrap lines, send them as
 | |
| format=flowed) in ways that make them fail.  You will get angry
 | |
| flames ridiculing you if you don't check this.
 | |
| 
 | |
| Thunderbird in particular is known to be problematic.  Thunderbird
 | |
| users may wish to visit this web page for more information:
 | |
|   http://kb.mozillazine.org/Plain_text_e-mail_-_Thunderbird#Completely_plain_email
 | |
| 
 | |
| SEE ALSO
 | |
| --------
 | |
| linkgit:git-format-patch[1], linkgit:git-send-email[1], mbox(5)
 | |
| 
 | |
| GIT
 | |
| ---
 | |
| Part of the linkgit:git[1] suite
 |