begin adding online accounts
This commit is contained in:
parent
b2f58a61f7
commit
1d464cbadf
151
mw
151
mw
@ -19,7 +19,49 @@ case "$(uname)" in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
getprofiles() { \
|
getprofiles() { \
|
||||||
|
unset msmtp_header msmtp_profile mutt_profile offlineimap_header offlineimap_profile
|
||||||
printf "Creating profiles for \`%s\`..." "$title"
|
printf "Creating profiles for \`%s\`..." "$title"
|
||||||
|
msmtp_header="defaults
|
||||||
|
auth on
|
||||||
|
tls on
|
||||||
|
tls_trust_file $sslcert
|
||||||
|
logfile ~/.config/msmtp/msmtp.log
|
||||||
|
"
|
||||||
|
msmtp_profile="
|
||||||
|
|
||||||
|
account $title
|
||||||
|
host $smtp
|
||||||
|
port $sport
|
||||||
|
from $login
|
||||||
|
user $login
|
||||||
|
passwordeval \"$GPG -d --quiet --for-your-eyes-only --no-tty $creddir/$title.gpg | sed -e '\$a\\'\"
|
||||||
|
"
|
||||||
|
|
||||||
|
if [ "$accounttype" = "offline" ]; then
|
||||||
|
mutt_profile="# vim: filetype=neomuttrc
|
||||||
|
# muttrc file for account $title
|
||||||
|
set realname = \"$realname\"
|
||||||
|
set from = \"$fulladdr\"
|
||||||
|
set sendmail = \"/usr/bin/msmtp -a $title\"
|
||||||
|
set folder = \"$maildir/$title\"
|
||||||
|
set header_cache = $accdir/$title/cache/headers
|
||||||
|
set message_cachedir = $accdir/$title/cache/bodies
|
||||||
|
set certificate_file = $accdir/$title/certificates
|
||||||
|
source \"$bindir/getmuttpass $title |\"
|
||||||
|
|
||||||
|
alias me $realname <$fulladdr>
|
||||||
|
|
||||||
|
set mbox_type = Maildir
|
||||||
|
set ssl_starttls = yes
|
||||||
|
set ssl_force_tls = yes
|
||||||
|
|
||||||
|
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
|
||||||
|
unmailboxes *
|
||||||
|
"
|
||||||
offlineimap_header="[general]
|
offlineimap_header="[general]
|
||||||
accounts =
|
accounts =
|
||||||
starttls = yes
|
starttls = yes
|
||||||
@ -46,29 +88,14 @@ type = Maildir
|
|||||||
localfolders = $maildir/$title
|
localfolders = $maildir/$title
|
||||||
"
|
"
|
||||||
|
|
||||||
msmtp_header="defaults
|
else
|
||||||
auth on
|
|
||||||
tls on
|
|
||||||
tls_trust_file $sslcert
|
|
||||||
logfile ~/.config/msmtp/msmtp.log
|
|
||||||
"
|
|
||||||
|
|
||||||
msmtp_profile="
|
|
||||||
|
|
||||||
account $title
|
|
||||||
host $smtp
|
|
||||||
port $sport
|
|
||||||
from $login
|
|
||||||
user $login
|
|
||||||
passwordeval \"$GPG -d --quiet --for-your-eyes-only --no-tty $creddir/$title.gpg | sed -e '\$a\\'\"
|
|
||||||
"
|
|
||||||
|
|
||||||
mutt_profile="# vim: filetype=neomuttrc
|
mutt_profile="# vim: filetype=neomuttrc
|
||||||
# muttrc file for account $title
|
# muttrc file for account $title
|
||||||
set realname = \"$realname\"
|
set realname = \"$realname\"
|
||||||
set from = \"$fulladdr\"
|
set from = \"$fulladdr\"
|
||||||
set sendmail = \"/usr/bin/msmtp -a $title\"
|
set sendmail = \"/usr/bin/msmtp -a $title\"
|
||||||
set folder = \"$maildir/$title\"
|
set folder = \"imaps://$imap:$iport\"
|
||||||
|
set imap_user = $login
|
||||||
set header_cache = $accdir/$title/cache/headers
|
set header_cache = $accdir/$title/cache/headers
|
||||||
set message_cachedir = $accdir/$title/cache/bodies
|
set message_cachedir = $accdir/$title/cache/bodies
|
||||||
set certificate_file = $accdir/$title/certificates
|
set certificate_file = $accdir/$title/certificates
|
||||||
@ -87,6 +114,7 @@ bind index,pager C noop
|
|||||||
bind index gg first-entry
|
bind index gg first-entry
|
||||||
unmailboxes *
|
unmailboxes *
|
||||||
"
|
"
|
||||||
|
fi
|
||||||
printf "DONE.\\n"
|
printf "DONE.\\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,10 +157,7 @@ $serverinfo
|
|||||||
EOF
|
EOF
|
||||||
printf "\\n\033[3;33mCongrats!\033[0m Server info has automatically be found, so you won't have to look anything up!\\n\t\033[1mIMAP server\033[0m: %s\\n\t\033[1mIMAP port\033[0m: %s\\n\t\033[1mSMTP server\033[0m: %s\\n\t\033[1mSMTP port\033[0m: %s\\nThis data will be used by the wizard.\\n" "$imap" "$iport" "$smtp" "$sport"
|
printf "\\n\033[3;33mCongrats!\033[0m Server info has automatically be found, so you won't have to look anything up!\\n\t\033[1mIMAP server\033[0m: %s\\n\t\033[1mIMAP port\033[0m: %s\\n\t\033[1mSMTP server\033[0m: %s\\n\t\033[1mSMTP port\033[0m: %s\\nThis data will be used by the wizard.\\n" "$imap" "$iport" "$smtp" "$sport"
|
||||||
fi
|
fi
|
||||||
printf "\\nPress enter to continue.\\n"
|
cont
|
||||||
stty -echo
|
|
||||||
read -r
|
|
||||||
stty echo
|
|
||||||
printf "Enter the \033[35mfull name\033[0m you want to be identified by on this account.\\n\tReal name: "
|
printf "Enter the \033[35mfull name\033[0m you want to be identified by on this account.\\n\tReal name: "
|
||||||
read -r realname
|
read -r realname
|
||||||
printf "Enter a short, \033[36mone-word identifier\033[0m for this email account that will distinguish them from any other accounts you add.\\n\tAccount name: "
|
printf "Enter a short, \033[36mone-word identifier\033[0m for this email account that will distinguish them from any other accounts you add.\\n\tAccount name: "
|
||||||
@ -160,14 +185,16 @@ ssl_version = tls1_2"
|
|||||||
idnum=$(diff "$tmpdir/mutt_all" "$tmpdir/mutt_used" | sed -n 2p | awk '{print $2}')
|
idnum=$(diff "$tmpdir/mutt_all" "$tmpdir/mutt_used" | sed -n 2p | awk '{print $2}')
|
||||||
getpass
|
getpass
|
||||||
getprofiles
|
getprofiles
|
||||||
mkdir -p "$accdir/$title/cache/bodies"
|
mkdir -p "$accdir/$title/cache/bodies" "$HOME/.config/msmtp"
|
||||||
mkdir -p "$HOME/.config/offlineimap/" "$HOME/.config/msmtp"
|
|
||||||
[ ! -f "$HOME/.config/offlineimap/config" ] && echo "$offlineimap_header" > "$HOME/.config/offlineimap/config"
|
|
||||||
[ ! -f "$HOME/.config/msmtp/config" ] && echo "$msmtp_header" > "$HOME/.config/msmtp/config"
|
[ ! -f "$HOME/.config/msmtp/config" ] && echo "$msmtp_header" > "$HOME/.config/msmtp/config"
|
||||||
echo "$offlineimap_profile" >> "$HOME/.config/offlineimap/config"
|
|
||||||
echo "$msmtp_profile" >> "$HOME/.config/msmtp/config"
|
echo "$msmtp_profile" >> "$HOME/.config/msmtp/config"
|
||||||
echo "$mutt_profile" > "$accdir/$title.muttrc"
|
echo "$mutt_profile" > "$accdir/$title.muttrc"
|
||||||
sed -i "s/^accounts =.*[a-zA-Z]$/&, $title/g;s/^accounts =\\s*$/accounts = $title/g" "$HOME/.config/offlineimap/config"
|
if [ "$accounttype" = "offline" ]; then
|
||||||
|
mkdir -p "$HOME/.config/offlineimap/"
|
||||||
|
[ ! -f "$HOME/.config/offlineimap/config" ] && echo "$offlineimap_header" > "$HOME/.config/offlineimap/config"
|
||||||
|
echo "$offlineimap_profile" >> "$HOME/.config/offlineimap/config"
|
||||||
|
sed -i "s/^accounts =.*[a-zA-Z]$/&, $title/g;s/^accounts =\\s*$/accounts = $title/g" "$HOME/.config/offlineimap/config"
|
||||||
|
fi
|
||||||
echo "macro index,pager i$idnum '<sync-mailbox><enter-command>source \"$muttdir\"/accounts/$title.muttrc<enter><change-folder>!<enter>;<check-stats>'" >> "$muttdir/personal.muttrc"
|
echo "macro index,pager i$idnum '<sync-mailbox><enter-command>source \"$muttdir\"/accounts/$title.muttrc<enter><change-folder>!<enter>;<check-stats>'" >> "$muttdir/personal.muttrc"
|
||||||
! grep "^source.*.muttrc" "$muttdir/personal.muttrc" >/dev/null && echo "source $accdir/$title.muttrc" >> "$muttdir/personal.muttrc"
|
! grep "^source.*.muttrc" "$muttdir/personal.muttrc" >/dev/null && echo "source $accdir/$title.muttrc" >> "$muttdir/personal.muttrc"
|
||||||
trysync && finalize
|
trysync && finalize
|
||||||
@ -204,7 +231,7 @@ askgpg() { \
|
|||||||
mkdir -p "$creddir"
|
mkdir -p "$creddir"
|
||||||
echo "$gpgemail" > "$creddir/gpgemail"
|
echo "$gpgemail" > "$creddir/gpgemail"
|
||||||
else
|
else
|
||||||
printf "You do not appear to have a private key associated with %s.\\nPlease generate a GPG key pair by running \`%s --full-gen-key\` and rerun the wizard.\\n" "$gpgemail" "$GPG"
|
printf "You do not appear to have a private key associated with \033[33m%s\033[0m.\\nPlease generate a GPG key pair by running \`\033[32m%s --full-gen-key\033[0m\` and rerun the wizard.\\n" "$gpgemail" "$GPG"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -217,10 +244,8 @@ formatShortcut() { \
|
|||||||
|
|
||||||
trysync() { \
|
trysync() { \
|
||||||
! ping -q -c 1 1.1.1.1 > /dev/null && printf "No internet connection detected.\\nTry rerunning offlineimap manually when connection is established, then select the option to detect mailboxes and finalize installation.\\n" && return 1
|
! ping -q -c 1 1.1.1.1 > /dev/null && printf "No internet connection detected.\\nTry rerunning offlineimap manually when connection is established, then select the option to detect mailboxes and finalize installation.\\n" && return 1
|
||||||
printf "\033[32mYou must have an internet connection to continue.\033[0m\\nmutt-wizard will run offlineimap briefly to (1) ensure that login details are functional and (2) allow offlineimap to tell us what mailboxes your email account has.\\nAfter around 15 seconds, mutt-wizard will kill the process and continue.\\nYou can run offlineimap manually to finish the mail sync later.\\nPress enter to continue.\\n."
|
printf "\033[32mYou must have an internet connection to continue.\033[0m\\nmutt-wizard will run offlineimap briefly to (1) ensure that login details are functional and (2) allow offlineimap to tell us what mailboxes your email account has.\\nAfter around 15 seconds, mutt-wizard will kill the process and continue.\\nYou can run offlineimap manually to finish the mail sync later.\\n"
|
||||||
stty -echo
|
cont
|
||||||
read -r
|
|
||||||
stty echo
|
|
||||||
(sleep 15; killall offlineimap; killall offlineimap; killall offlineimap)>/dev/null 2>&1 &
|
(sleep 15; killall offlineimap; killall offlineimap; killall offlineimap)>/dev/null 2>&1 &
|
||||||
mkdir -p "$maildir"
|
mkdir -p "$maildir"
|
||||||
offlineimap -qoa "$title"
|
offlineimap -qoa "$title"
|
||||||
@ -293,31 +318,89 @@ delete() { sed -i "
|
|||||||
# Delete from the line matching the account name, until the next account or empty line
|
# Delete from the line matching the account name, until the next account or empty line
|
||||||
sed -i "/account $title/,/^\(\s*$\|account\)/d" "$HOME/.config/msmtp/config";}
|
sed -i "/account $title/,/^\(\s*$\|account\)/d" "$HOME/.config/msmtp/config";}
|
||||||
|
|
||||||
|
choosecron() { ! pgrep crond >/dev/null && echo "No cron manager running. Install/enable one and then select this option again." && return 1
|
||||||
|
if crontab -l | grep mailsync >/dev/null; then
|
||||||
|
echo "Active mail sync cronjob detected. Do you want to remove it?"
|
||||||
|
printf "\033[36m\t"
|
||||||
|
read -r rmyn
|
||||||
|
printf "\033[0m"
|
||||||
|
echo "$rmyn" | grep -i "^y\(es\)*$" >/dev/null && crontab -l | sed '/mailsync/d' | crontab - >/dev/null && echo "Mail sync turned off."
|
||||||
|
else
|
||||||
|
echo "How many minutes between each mail sync?"
|
||||||
|
printf "\033[36m\t"
|
||||||
|
read -r minnum
|
||||||
|
printf "\033[0m"
|
||||||
|
while ! echo "$minnum" | grep "^[0-9]\+$" >/dev/null; do
|
||||||
|
printf "That doesn't look like a number. How many minutes between each mail sync?"
|
||||||
|
printf "\033[36m\t"
|
||||||
|
read -r minnum
|
||||||
|
printf "\033[0m"
|
||||||
|
done
|
||||||
|
(crontab -l; echo "*/$minnum * * * * export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus; export DISPLAY=:0; . \$HOME/.profile; $muttdir/bin/mailsync -f INBOX") | crontab - &&
|
||||||
|
echo "Cronjob added. Mail will sync every $minnum minutes. Be sure you have your cron manager running."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
cont() { [ -n "$1" ] && printf "%s\\n" "$1"
|
||||||
|
printf "Press Enter to continue.\\n"
|
||||||
|
stty -echo
|
||||||
|
read -r null
|
||||||
|
stty echo
|
||||||
|
}
|
||||||
|
|
||||||
|
addtype() { \
|
||||||
|
while : ; do
|
||||||
|
echo "Do you want to keep your mail for this account offline with offlineimap? [yes/no]"
|
||||||
|
read -r offnot
|
||||||
|
case "$offnot" in
|
||||||
|
[Yy]es) accounttype="offline" && break ;;
|
||||||
|
[Nn]o) accounttype="online" && break ;;
|
||||||
|
*) echo "I don't know what you mean. Try again or press ctrl-c to quit." ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
addaccount
|
||||||
|
}
|
||||||
|
|
||||||
main() { \
|
main() { \
|
||||||
while : ; do
|
while : ; do
|
||||||
[ -z "$gpgemail" ] && askgpg
|
[ -z "$gpgemail" ] && askgpg
|
||||||
printf "What would you like \033[32mmutt-wizard\033[0m to do?
|
printf "Current GPG key email: %s\\n\033[34m" "$gpgemail"
|
||||||
|
cat << "EOF"
|
||||||
|
_ __ ___ _ _| |_| |_ __ _(_)______ _ _ __ __| |
|
||||||
|
| '_ ` _ \| | | | __| __|___\ \ /\ / / |_ / _` | '__/ _` |
|
||||||
|
| | | | | | |_| | |_| ||_____\ V V /| |/ / (_| | | | (_| |
|
||||||
|
|_| |_| |_|\__,_|\__|\__| \_/\_/ |_/___\__,_|_| \__,_|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
printf "\033[0mMade and maintained by Luke Smith <https://lukesmith.xyz>
|
||||||
|
|
||||||
|
What would you like \033[32mmutt-wizard\033[0m to do?
|
||||||
\033[31m1 Add an email account\033[0m
|
\033[31m1 Add an email account\033[0m
|
||||||
2 Autodetect mailboxes
|
2 Autodetect mailboxes
|
||||||
3 Change an account's password
|
3 Change an account's password
|
||||||
4 Remove an account
|
4 Remove an account
|
||||||
5 Change GPG key pair used for encryption
|
5 Change GPG key pair used for encryption
|
||||||
6 Delete all account data
|
6 Delete all account data
|
||||||
|
7 Enable/disable autosync
|
||||||
|
9 Edit this script
|
||||||
0 Exit
|
0 Exit
|
||||||
Input a number to continue or press ctrl-c.\\n"
|
Input a number to continue or press ctrl-c.\\n"
|
||||||
printf "\033[36m\t"
|
printf "\033[36m\t"
|
||||||
read -r choice
|
read -r choice
|
||||||
printf "\033[0m"
|
printf "\033[0m"
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
1) addaccount ;;
|
1) addtype ;;
|
||||||
2) pick finalize && finalize ;;
|
2) pick finalize && finalize ;;
|
||||||
3) pick "change the password of" yes && getpass ;;
|
3) pick "change the password of" yes && getpass ;;
|
||||||
4) pick delete yes && delete ;;
|
4) pick delete yes && delete ;;
|
||||||
5) askgpg ;;
|
5) askgpg ;;
|
||||||
6) wipe && printf "Account data purged." ;;
|
6) wipe && printf "Account data purged." ;;
|
||||||
|
7) choosecron ;;
|
||||||
|
9) "$EDITOR" "$0"; exit ;;
|
||||||
0) break ;;
|
0) break ;;
|
||||||
*) printf "Invalid input.\\n"
|
*) printf "Invalid input.\\n"
|
||||||
esac
|
esac
|
||||||
|
cont
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user