diff options
| -rwxr-xr-x | bin/mw | 147 | 
1 files changed, 70 insertions, 77 deletions
| @@ -10,6 +10,7 @@ accdir="${XDG_CONFIG_HOME:-$HOME/.config}/mutt/accounts"  msmtprc="${XDG_CONFIG_HOME:-$HOME/.config}/msmtp/config"  msmtplog="${XDG_CONFIG_HOME:-$HOME/.config}/msmtp/msmtp.log"  mbsyncrc="${MBSYNCRC:-$HOME/.mbsyncrc}" +mpoprc="${XDG_CONFIG_HOME:-$HOME/.config}/mpop/config"  alias mbsync='mbsync -c "$mbsyncrc"'  for x in "/etc/ssl/certs/ca-certificates.crt" "/etc/pki/tls/certs/ca-bundle.crt" "/etc/ssl/ca-bundle.pem" "/etc/pki/tls/cacert.pem" "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem" "/etc/ssl/cert.pem" "/usr/local/share/ca-certificates/"; do @@ -28,27 +29,23 @@ getaccounts() { accounts="$(find -L "$accdir" -type f 2>/dev/null | grep -o "[0-  list() { getaccounts && [ -n "$accounts" ] && echo "$accounts" ;} -getprofiles() { \ -	unset msmtp_header msmtp_profile mutt_profile mbsync_profile -	case "$iport" in -		1143) imapssl=None ;; -		143) imapssl=STARTTLS ;; -	esac -msmtp_header="defaults -auth	on -tls	on -tls_trust_file	$sslcert -logfile $msmtplog -" -msmtp_profile="account $fulladdr +prepmsmtp() { echo "account $fulladdr  host $smtp  port ${sport:-587}  from $fulladdr  user $login  passwordeval \"pass $fulladdr\" -$tlsline -" -mbsync_profile=" +auth on +${tlsline:-tls on} +tls_trust_file	$sslcert +logfile $msmtplog +" >> "$msmtprc" +	# On Ubuntu/Debian, a link is needed since they use an older version. +	command -V apt-get >/dev/null 2>&1 && ln -s "$msmtprc" "$HOME/.msmtprc" 2>/dev/null +} + +prepmbsync() { mkdir -p "${mbsyncrc%/*}" +	echo "  IMAPStore $fulladdr-remote  Host $imap  Port ${iport:-993} @@ -73,56 +70,71 @@ SyncState *  MaxMessages ${maxmes:-0}  ExpireUnread no  # End profile -" +" >> "$mbsyncrc" ;} + +prepmpop() { echo " +account $fulladdr +tls on +user $login +host $imap +delivery maildir ${XDG_DATA_HOME:-$HOME/.local/share}/mail/$fulladdr/${inbox:-INBOX} +passwordeval pass $fulladdr +" >> "$mpoprc" ;} -if [ -z "${online+x}" ]; then -mutt_profile="# vim: filetype=neomuttrc +prepmutt() { echo "# vim: filetype=neomuttrc  # muttrc file for account $fulladdr  set realname = \"$realname\"  set from = \"$fulladdr\"  set sendmail = \"msmtp -a $fulladdr\"  alias me $realname <$fulladdr> -set folder = \"$maildir/$fulladdr\" +set folder = \"$folder\"  set header_cache = $cachedir/$fulladdr/headers  set message_cachedir = $cachedir/$fulladdr/bodies  set mbox_type = Maildir +$extra  bind index,pager gg noop  bind index,pager g noop  bind index,pager M noop  bind index,pager C noop  bind index gg first-entry -macro index o \"<shell-escape>mw -y $fulladdr<enter>\" \"run mbsync to sync $fulladdr\"  unmailboxes *  unalternates * -" -else -mutt_profile="# vim: filetype=neomuttrc -# muttrc file for account $fulladdr -set realname = \"$realname\" -set from = \"$fulladdr\" -set sendmail = \"msmtp -a $fulladdr\" -alias me $realname <$fulladdr> -set folder = \"imaps://$login@$imap:${iport:-993}\" -set imap_user = \"$login\" -set header_cache = $cachedir/$fulladdr/headers -set message_cachedir = $cachedir/$fulladdr/bodies -set imap_pass = \"\`pass $fulladdr\`\" +unset signature +unmacro index o +$synccmd +" > "$accdir/$idnum-$fulladdr.muttrc" -set mbox_type = Maildir +	[ ! -f "$muttrc" ] && echo "# vim: filetype=neomuttrc" > "$muttrc" +	! grep -q "^source.*mutt-wizard.muttrc" "$muttrc" && echo "source $mwconfig" >> "$muttrc" +	! grep "^source.*.muttrc" "$muttrc" | grep -qv "$mwconfig" && echo "source $accdir/$idnum-$fulladdr.muttrc" >> "$muttrc" +	echo "macro index,pager i$idnum '<sync-mailbox><enter-command>source $accdir/$idnum-$fulladdr.muttrc<enter><change-folder>!<enter>;<check-stats>' \"switch to $fulladdr\"" >> "$muttrc" +} + +getprofiles() { \ +	mkdir -p "${muttrc%/*}" "$accdir" "$cachedir/$fulladdr/bodies" "${XDG_CONFIG_HOME:-$HOME/.config}/msmtp" +	unset msmtp_header msmtp_profile mutt_profile mbsync_profile +	case "$iport" in +		1143) imapssl=None ;; +		143) imapssl=STARTTLS ;; +	esac +	case "$type" in +		online) folder="imaps://$login@$imap:${iport:-993}" +extra="set imap_user = \"$login\" +set imap_pass = \"\`pass $fulladdr\`\"  set ssl_starttls = yes -set ssl_force_tls = yes +set ssl_force_tls = yes" +			;; +		pop) synccmd="macro index o \"<shell-escape>mpop $fulladdr<enter>\" \"run mpop to get $fulladdr's mail\"" +			prepmpop ;; +		*) synccmd="macro index o \"<shell-escape>mw -y $fulladdr<enter>\" \"run mbsync to sync $fulladdr\"" +			folder="$maildir/$fulladdr" +			prepmbsync ;; +	esac +	prepmsmtp +	prepmutt -bind index,pager gg noop -bind index,pager g noop -bind index,pager M noop -bind index,pager C noop -bind index gg first-entry -unset signature -unmacro index o -unmailboxes * -" -fi +	prepnotmuch # Create a notmuch config file if not present already.  }  parsedomains(){ serverinfo="$(grep "^${fulladdr#*@}" "$muttshare/domains.csv" 2>/dev/null)" @@ -172,7 +184,7 @@ askinfo() { \  		echo "\`$fulladdr\` is not a valid email address. Please retype the address:"  		read -r fulladdr  	done -	grep -q "Channel\s*$fulladdr$" "$mbsyncrc" 2>/dev/null && +	getaccounts; echo "$accounts" | grep -q "\s$fulladdr$" 2>/dev/null &&  		{ echo "$fulladdr has already been added" && exit 1 ;}  	{ [ -z "$imap" ] || [ -z "$smtp" ] ;} && parsedomains  	[ -z "$imap" ] && echo "Give your email server's IMAP address (excluding the port number):" && @@ -193,27 +205,6 @@ createpass() { echo "$password" > "$PASSWORD_STORE_DIR/$fulladdr"  	"$GPG" -qer "$(cat "$PASSWORD_STORE_DIR/.gpg-id")" "$PASSWORD_STORE_DIR/$fulladdr"  	rm -f "$PASSWORD_STORE_DIR/$fulladdr" ;} -writeinfo() { mkdir -p "${muttrc%/*}" "$accdir" "$cachedir/$fulladdr/bodies" "${XDG_CONFIG_HOME:-$HOME/.config}/msmtp" "$maildir/$fulladdr" - -	# Configure msmtprc for sending mail. -	[ ! -f "$msmtprc" ] && echo "$msmtp_header" > "$msmtprc" -	echo "$msmtp_profile" >> "$msmtprc" -	# On Ubuntu/Debian, a link is needed since they use an older version. -	command -V apt-get >/dev/null 2>&1 && ln -s "$msmtprc" "$HOME/.msmtprc" 2>/dev/null - -	# Create the mbsync config file if local account. -	[ -z "${online+x}" ] && mkdir -p "${mbsyncrc%/*}" && echo "$mbsync_profile" >> "$mbsyncrc" - -	# Create a muttrc for viewing mail. -	echo "$mutt_profile" > "$accdir/$idnum-$fulladdr.muttrc" -	[ ! -f "$muttrc" ] && echo "# vim: filetype=neomuttrc" > "$muttrc" -	! grep -q "^source.*mutt-wizard.muttrc" "$muttrc" && echo "source $mwconfig" >> "$muttrc" -	! grep "^source.*.muttrc" "$muttrc" | grep -qv "$mwconfig" && echo "source $accdir/$idnum-$fulladdr.muttrc" >> "$muttrc" -	echo "macro index,pager i$idnum '<sync-mailbox><enter-command>source $accdir/$idnum-$fulladdr.muttrc<enter><change-folder>!<enter>;<check-stats>' \"switch to $fulladdr\"" >> "$muttrc" - -	notmuchauto # Create a notmuch config file if not present already. -} -  getpass() { while : ; do pass rm -f "$fulladdr" >/dev/null 2>&1  		pass insert "$fulladdr" && break; done ;} @@ -247,13 +238,13 @@ getboxes() { if [ -n "${force+x}" ]; then  	done  } -finalize() { echo "$mailboxes" | xargs -I {} mkdir -p "$maildir/$fulladdr/{}/cur" "$maildir/$fulladdr/{}/tmp" "$maildir/$fulladdr/{}/new" -	echo "$toappend" >> "$accdir/$idnum-$fulladdr.muttrc" -	[ -z "${online+x}" ] && echo "$fulladdr (account #$idnum) added successfully." +finalize() { echo "$toappend" >> "$accdir/$idnum-$fulladdr.muttrc" +	[ "$type" != "online" ] && echo "$mailboxes" | xargs -I {} mkdir -p "$maildir/$fulladdr/{}/cur" "$maildir/$fulladdr/{}/tmp" "$maildir/$fulladdr/{}/new" +	echo "$fulladdr (account #$idnum) added successfully."  	command -V urlview >/dev/null 2>&1 && [ ! -f "$HOME/.urlview" ] && echo "COMMAND \$BROWSER" > "$HOME/.urlview"  	return 0 ;} -notmuchauto() { \ +prepnotmuch() { \  	[ -z "$NOTMUCH_CONFIG" ] && NOTMUCH_CONFIG="$HOME/.notmuch-config"  	[ -f "$NOTMUCH_CONFIG" ] && return 0  	nmbasic="[database] @@ -308,12 +299,13 @@ Main actions:  Options allowed with -a:    -u	Account login name if not full address    -n	"Real name" to be on the email account -  -i	IMAP server address -  -I	IMAP server port +  -i	IMAP/POP server address +  -I	IMAP/POP server port    -s	SMTP server address    -S	SMTP server port    -x	Password for account (recommended to be in double quotes)    -p	Install for a Protonmail account. +  -P	Add for a POP server instead of IMAP    -o	Configure address, but keep mail online.    -f	Assume typical English mailboxes without attempting log-on. @@ -324,7 +316,7 @@ To change an account's password, run \`pass edit your@email.com\`.  EOF  } -while getopts "fplhodTYD:y:i:I:s:S:u:a:n:x:m:t:" o; do case "${o}" in +while getopts "fpPlhodTYD:y:i:I:s:S:u:a:n:x:m:t:" o; do case "${o}" in  	l) setact list || exit 1 ;;  	d) setact delete || exit 1 ;;  	D) setact delete || exit 1 ; fulladdr="$OPTARG" ;; @@ -338,7 +330,8 @@ while getopts "fplhodTYD:y:i:I:s:S:u:a:n:x:m:t:" o; do case "${o}" in  	u) setact add || exit 1 ; login="$OPTARG" ;;  	n) setact add || exit 1 ; realname="$OPTARG" ;;  	m) setact add || exit 1 ; maxmes="$OPTARG" ;; -	o) setact add || exit 1 ; online=True ;; +	o) setact add || exit 1 ; type="online" ;; +	P) setact add || exit 1 ; type="pop" ;;  	f) setact add || exit 1 ; force=True ;;  	x) setact add || exit 1 ; password="$OPTARG" ;;  	t) setact toggle || exit 1 ; cronmin="$OPTARG" ;; @@ -357,7 +350,7 @@ esac done  case "$action" in  	list) list ;; -	add) checkbasics && askinfo && getboxes && getprofiles && writeinfo && finalize || { delete ; exit 1 ;} ;; +	add) checkbasics && askinfo && getboxes && getprofiles && finalize || { delete ; exit 1 ;} ;;  	delete) delete ;;  	sync) mailsync $fulladdr ;;  	toggle) togglecron ;; | 
