前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在 Linux 命令行中收发 Gmail 邮件

在 Linux 命令行中收发 Gmail 邮件

作者头像
用户1880875
修改于 2021-09-08 09:23:12
修改于 2021-09-08 09:23:12
3.1K00
代码可运行
举报
运行总次数:0
代码可运行

我喜欢在 Linux 终端上读写电子邮件的便捷,因此我是 Mutt 这个轻量简洁的电子邮件客户端的忠实用户。对于电子邮件服务来说,不同的系统配置和网络接入并不会造成什么影响。这个客户端通常隐藏在我 Linux 终端的 某个标签页或者某个终端复用器的面板 上,需要用的时候随时可以调出来,不需要使用的时候放到后台,就不需要在桌面上一直放置一个电子邮件客户端的应用程序。

当今我们大多数人使用的都是托管电子邮件账号,在这种使用场景中并不会与电子邮件协议发生过多的直接交互。而 Mutt(以及更早的 ELM)是在更简单的时代创建的,那时候检查邮件只是对 uucp 的调用,以及对 /var/mail 的读取。当然 Mutt 也很与时俱进,随着各种流行的协议(如 POP、IMAP、LDAP)出现,它都实现了良好的支持。因此,即使我们使用的是 Gmail 这种邮件服务,也可以与 Mutt 无缝衔接。

如今在大多数情况下,用户都不会拥有自己的电子邮件服务器,大部分用户都会选择 Gmail,因此下文会以 Mutt + Gmail 为例作介绍。如果你比较注重电子邮件隐私,不妨考虑 ProtonMail 或者 Tutanota,它们都提供完全加密的电子邮件服务。其中 Tutanota 包含很多 开源组件,而 ProtonMail 则为付费用户提供 IMAP 桥接,简化了在非浏览器环境下的邮件访问。不过,很多公司、学校和组织都没有自己的电子邮件服务,而是使用 Gmail 提供的邮件服务,这样一来,大部分用户都会有一个 Gmail 邮箱。

当然,如果你自己就 拥有电子邮件服务器,那么使用 Mutt 就更简单了。下面我们开始介绍。

安装 Mutt

在 Linux 系统上,一般可以直接从发行版提供的软件库中安装 Mutt,另外需要在家目录中创建一个 .mutt 目录以存放配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo dnf install mutt
$ mkdir ~/.mutt

MacOS 上,可以通过 MacPorts 或者 Homebrew 安装;在 Windows 上则可以使用 Chocolatey 安装。

Mutt 是一个 邮件用户代理(Mail User Agent)(MUA),因此它的作用是读取、编写以及向外部邮件池发送邮件。向邮件服务器实际传输邮件是其它应用或邮件服务的工作,尽管它们可以和 Mutt 进行协作,让我们看起来是 Mutt 完成了所有功能,但实际上并非如此。在弄懂了两者之间的区别之后,我们会对 Mutt 的配置更加清楚。

这也是为什么除了 Mutt 之外,我们还需要视乎进行通信的服务种类选择一些辅助应用程序。在本文中我使用的是 IMAP 服务,这可以让我本地的电子邮件副本与电子邮件服务提供商的远程邮件副本保持同步。如果你选择 POP 服务,配置的难度就更下一个台阶了,也无需依赖其它外部工具。我们需要 OfflineIMAP 这个 Python 应用程序来实现 IMAP 的集成,这个应用程序可以在 它的 GitHub 存储库 获取。

OfflineIMAP 目前仍然在从 Python 2 移植到 Python 3,目前需要手动安装,但以后你也可以通过 python3 -m pip 命令进行安装。

OfflineIMAP 依赖于 imaplib2 库,这个库也在努力开发当中,所以我更喜欢手动安装。同样地,也是通过 Git 将代码库克隆到本地,进入目录后使用 pip 安装。

首先安装 rfc6555 依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python3 -m pip install --user rfc6555

然后从源码安装 imaplib2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git clone git@github.com:jazzband/imaplib2.git
$ pushd imaplib2.git
$ python3 -m pip install --upgrade --user .
$ popd

最后从源码安装 OfflineIMAP:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git clone git@github.com:OfflineIMAP/offlineimap3.git
$ pushd offlineimap3.git
$ python3 -m pip install --upgrade --user .
$ popd

如果你使用的是 Windows 上的 Cygwin,那么你还需要安装 Portlocker

配置 OfflineIMAP

OfflineIMAP 默认使用 ~/.offlineimaprc 这个配置文件,在它的代码库中会有一个名为 offlineimap.conf 的配置模板,可以直接将其移动到家目录下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mv offlineimap3.git/offlineimap.conf ~/.offlineimaprc`

你可以使用任何文本编辑器打开浏览这个配置文件,它的注释很完善,便于了解各个可用的配置项。

以下是我的 .offlineimaprc 配置文件,为了清晰起见,我把其中的注释去掉了。对于你来说其中有些配置项的值可能会略有不同,但或许会为你的配置带来一些启发:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[general]
ui = ttyui
accounts = %your-gmail-username%
pythonfile = ~/.mutt/password_prompt.py
fsync = False

[Account %your-gmail-username%]
localrepository = %your-gmail-username%-Local
remoterepository = %your-gmail-username%-Remote
status_backend = sqlite
postsynchook = notmuch new

[Repository %your-gmail-username%-Local]
type = Maildir
localfolders = ~/.mail/%your-gmail-username%-gmail.com
nametrans = lambda folder: {'drafts':  '[Gmail]/Drafts',
                            'sent':    '[Gmail]/Sent Mail',
                            'flagged': '[Gmail]/Starred',
                            'trash':   '[Gmail]/Trash',
                            'archive': '[Gmail]/All Mail',
                            }.get(folder, folder)

[Repository %your-gmail-username%-Remote]
maxconnections = 1
type = Gmail
remoteuser = %your-gmail-username%@gmail.com
remotepasseval = '%your-gmail-API-password%'
## remotepasseval = get_api_pass()
sslcacertfile = /etc/ssl/certs/ca-bundle.crt
realdelete = no
nametrans = lambda folder: {'[Gmail]/Drafts':    'drafts',
                            '[Gmail]/Sent Mail': 'sent',
                            '[Gmail]/Starred':   'flagged',
                            '[Gmail]/Trash':     'trash',
                            '[Gmail]/All Mail':  'archive',
                            }.get(folder, folder)
folderfilter = lambda folder: folder not in ['[Gmail]/Trash',
                                             '[Gmail]/Important',
                                             '[Gmail]/Spam',
                                             ]

配置文件里有两个可以替换的值,分别是 %your-gmail-username%%your-gmail-API-password%。其中第一个值需要替换为 Gmail 用户名,也就是邮件地址中 @gmail.com 左边的部分。而第二个值则需要通过双因素身份验证(2FA)后从 Google 获取(即使你在查收邮件时不需要使用 2FA)。

为 Gmail 设置双因素身份验证(2FA)

Google 希望用户通过 Gmail 网站收发电子邮件,因此当你在 Gmail 网站以外操作电子邮件时,实际上是被 Google 作为“开发者”看待(尽管你没有进行任何开发工作)。也就是说,Google 会认为你正在创建一个应用程序。要获得开发者层面的应用程序密码,就必须设置双因素身份验证。完成了这个过程以后,就可以获得一个应用程序密码,Mutt 可以通过这个密码在浏览器以外的环境登录到你的电子邮箱中。

为了安全起见,你还可以在 Google 的 账号安全 页面中添加一个用于找回的电子邮件地址。

在账号安全页面中,点击“ 两步验证(2-step Verification)”开始设置 2FA,设置过程中需要用到一部手机。

激活 2FA 之后,账号安全页面中会出现“ 应用程序密码(App Passwords)”选项,点击就可以为 Mutt 创建一个新的应用程序密码。在 Google 生成密码之后,将其替换 .offlineimaprc 配置文件中的 %your-gmail-API-password% 值。

直接将应用程序密码记录在 .offlineimaprc 文件中,这种以纯文本形式存储的做法有一定的风险。长期以来我都是这样做的,而且感觉良好,因为我的家目录是加密的。但出于安全考虑,我现在已经改为使用 GnuPG 加密应用程序密码,这部分内容不在本文的讨论范围,关于如何设置 GPG 密码集成,可以参考我的 另一篇文章

在 Gmail 启用 IMAP

在你永远告别 Gmail 网页界面之前,还有最后一件事:你必须启用 Gmail 账户的 IMAP 访问。

在 Gmail 网站页面中,点击右上角的“cog”图标,选择“ 查看所有设置(See all settings)”。在 Gmail 设置页面中,点击“POP/IMAP”标签页,并选中“ 启用 IMAP(enable IMAP)”,然后保存设置。

现在就可以在浏览器以外访问你的 Gmail 电子邮件了。

配置 Mutt

Mutt 的配置过程相对简单。和 .bashrc.zshrc.emacs 这些配置文件一样,网络上有很多优秀的 .muttrc 配置文件可供参照。我自己的 .muttrc 配置文件则借鉴了 Kyle RankinPaul Frields 等人的配置项和想法。下面列出我的配置文件的一些要点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set ssl_starttls=yes
set ssl_force_tls=yes

set from='tux@example.com'
set realname='Tux Example'

set folder = imaps://imap.gmail.com/
set spoolfile = imaps://imap.gmail.com/INBOX
set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"
set smtp_url="smtp://smtp.gmail.com:25"
set move = no
set imap_keepalive = 900
set record="imaps://imap.gmail.com/[Gmail]/Sent Mail"

# Paths
set folder           = ~/.mail
set alias_file       = ~/.mutt/alias
set header_cache     = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = ~/.mutt/certificates
set mailcap_path     = ~/.mutt/mailcap
set tmpdir           = ~/.mutt/temp
set signature        = ~/.mutt/sig
set sig_on_top       = yes

# Basic Options
set wait_key = no
set mbox_type = Maildir
unset move               # gmail does that

# Sidebar Patch
set sidebar_visible = yes
set sidebar_width   = 16
color sidebar_new color221 color233

## Account Settings
# Default inbox
set spoolfile = "+example.com/INBOX"

# Mailboxes to show in the sidebar.
mailboxes +INBOX \
          +sent \
          +drafts

# Other special folder
set postponed = "+example.com/drafts"

# navigation
macro index gi "<change-folder>=example.com/INBOX<enter>" "Go to inbox"
macro index gt "<change-folder>=example.com/sent" "View sent"

整个配置文件基本是开箱即用的,只需要将其中的 Tux Exampleexample.com 替换为你的实际值,并将其保存为 ~/.mutt/muttrc 就可以使用了。

启动 Mutt

在启动 Mutt 之前,需要先启动 offlineimap 将远程邮件服务器上的邮件同步到本地。在首次启动的时候耗时可能会比较长,只需要让它整晚运行直到同步完成就可以了。

在同步完成后,启动 Mutt:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mutt

Mutt 会提示你打开用于管理电子邮件的目录权限,并展示收件箱的视图。

学习使用 Mutt

在学习使用 Mutt 的过程中,你可以找到最符合你使用习惯的 .muttrc 配置。例如我的 .muttrc 配置文件集成了使用 Emacs 编写邮件、使用 LDAP 搜索联系人、使用 GnuPG 对邮件进行加解密、链接获取、HTML 视图等等一系列功能。你可以让 Mutt 做到任何你想让它做到的事情,你越探索,就能发现越多。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
傻瓜式配置mutt
介绍 mutt是什么?用一句话介绍就是:它是linux终端有名的邮件客户端,它运行在终端,受到很多linux狂热分子和无限最求效率的人的热捧,我当然没有那么geek,也没有追求效率到什么事都要在命令行搞定,但是mutt有时候真的很方便。 比如我经常要向另一台电脑发送数据,或者只是通过邮件发送几句话,几个小文件,这时就是发挥mutt优势的时候了。例如,我可以像下面这样给自己发送文件: echo -e "Hi\n\tthis email come from terminal" |mutt -s "just fo
小小科
2018/05/02
4.1K0
我的个人电子邮件系统设置:notmuch、mbsync、Postfix 和 dovecot
我使用个人电子邮件系统已经相当长的时间了,但是一直没有记录过文档。最近我换了我的笔记本电脑(职业变更导致的变动),我在试图重新创建本地邮件系统时迷茫了。所以这篇文章是一个给自己看的文档,这样我不用费劲就能再次搭建出来。
用户8639654
2021/10/18
1.2K0
用Emacs接收Exchange邮件
基本思路,首先安装DavMail server版本,将exchange服务转换成标准服务,比如smtp, pop3, imap。
星哥玩云
2022/07/03
1.8K0
用Emacs接收Exchange邮件
Python 自动化指南(繁琐工作自动化)第二版:十八、发送电子邮件和短信
例如,您可能有一个充满客户记录的电子表格,并希望根据每个客户的年龄和位置信息向他们发送不同的套用信函。商业软件可能无法为你做到这一点;幸运的是,您可以编写自己的程序来发送这些电子邮件,从而节省大量复制和粘贴表单电子邮件的时间。
ApacheCN_飞龙
2023/04/04
11.5K0
Python 自动化指南(繁琐工作自动化)第二版:十八、发送电子邮件和短信
Python接收邮件的几种方式
工作中,我们基本上都用过电子邮件的客户端,比如说 OutLook,Foxmail,从配置项可以知道,SMTP 协议用于发送邮件,POP3 和 IMAP 协议用于接收邮件。其实很多编程语言都有这类协议的实现,Python 自然也不例外,标准库 smtplib、poplib、imaplib 是对应协议的实现。
somenzz
2021/07/01
2.9K0
Python接收邮件的几种方式
在CentOS 6上使用Postfix,Dovecot和MySQL发送电子邮件
Postfix 邮件传输代理(MTA)是一种高性能的开源电子邮件服务器系统。本指南将帮助你在CentOS 6 Linode上运行 Postfix,使用 Dovecot 运行 IMAP / POP3 服务,使用 MySQL 存储有关虚拟域名和用户的信息。
FesonX
2018/08/31
2.6K0
使用CentOS 7上的Postfix,Dovecot和MariaDB发送电子邮件
Postfix邮件传输代理(MTA)是一种高性能的开源电子邮件服务器系统。本指南将帮助您在CentOS 7 Linode上运行Postfix,使用Dovecot进行IMAP / POP3服务,并使用MariaDB(MySQL的替代品)来存储虚拟域和用户的信息。
大大刺猬
2018/08/28
3.6K0
使用CentOS 7上的Postfix,Dovecot和MariaDB发送电子邮件
使用Postfix,Dovecot和MySQL发送电子邮件
在本指南中,您将学习如何在Debian或Ubuntu上使用Postfix,Dovecot和MySQL设置安全的虚拟用户邮件服务器。我们将解释如何创建新的用户邮箱以及如何在配置的域中发送或接收电子邮件。
Techeek
2018/09/18
3.9K0
使用Postfix,Dovecot和MySQL发送电子邮件
Linux 下命令行CURL的15种常见示例!
在本教程中,我们将介绍Linux中的cURL命令。我们会给出一些示例来指导您了解这个强大的实用程序的功能,帮助您理解它所能实现的所有功能。
用户6543014
2019/12/17
9.9K0
Linux 下命令行CURL的15种常见示例!
SMTP/POP3/IMAP 命令简介
什么是 SMTP SMTP (Simple Mail Transfer Protocol) : 电子邮件从客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议。 SMTP 是请求/响应协议,命令和响应都是基于 ASCII 文本,并以 CR 和 LF 符结束。响应包括一个表示返回状态的三位数字代码。SMTP 在 TCP 协议 25 端口监听连接请求。
py3study
2020/01/07
2.8K0
想要解析邮件?IMAP协议轻松助你,不再烦恼!
电子邮件在现代通信中依然扮演着重要的角色。为了提升邮件处理的效率,使用编程语言进行自动化处理变得尤为重要。
南山竹
2024/08/02
3360
想要解析邮件?IMAP协议轻松助你,不再烦恼!
如何在 Debian 下配置邮件服务器
本教程将讨论如何在Debian(或Ubuntu)配置一个可工作的邮件服务器。我们知道在邮件服务器使用的主要协议有SMTP、POP和IMAP。在本教程中,SMTP协议使用postfix,POP/IMAP协议使用dovecot。两者都是开源的、稳定的和高度可定制的。本教程中不会介绍邮件服务器的安全性,这超出了本文的范围。
Debian中国
2018/12/21
5.4K0
21个Python脚本自动执行日常任务(1)
作为编程领域摸爬滚打超过十年的老手,我深刻体会到,自动化那些重复性工作能大大节省我们的时间和精力。
数据科学工厂
2024/12/30
2920
21个Python脚本自动执行日常任务(1)
Python—利用邮件控制电脑关机
因此需要准备两个邮箱,而且接收邮箱要开通imap,以qq邮箱为例,在设置中找到账户,然后下面有这么一个模块
sjw1998
2019/09/28
9100
linux安装邮箱服务
在Linux系统上安装邮件服务器可以提供电子邮件服务,为企业或个人提供电子邮件的发送和接收功能。邮件服务器通常使用SMTP协议进行电子邮件传输,并支持IMAP或POP协议用于电子邮件的访问。本文将介绍在Linux系统上安装邮件服务器的步骤。
堕落飞鸟
2023/04/02
1.7K0
Linux两种发邮件的方式
1、下载安装msmtp wget https://marlam.de/msmtp/releases/msmtp-1.6.7.tar.xz tar -xvJf msmtp-1.6.7.tar.xz ls cd msmtp-1.6.7 ./configure --prefix=/usr/local/msmtp make && make install 2、配置msmtp账号 cd /usr/local/msmtp mkdir etc #配置文件目录和配置文件都要自己建 cd etc 手动创建配置文件vi msmtprc # Set default values for all following accounts. defaults logfile /usr/local/msmtp/msmtp.log # The SMTP server of the provider. account default #你的发送邮件服务器 host smtp.126.com port 25 #要从哪个邮箱发出 from xxxx@126.com #这里如果使用on的话会报 "msmtp: cannot use a secure authentication method"错误 auth login tls off #邮箱用户名 user xxxx@126.com #邮箱用户名 #邮箱密码,这里可是明文的,如果你觉得不安全可以把文件改为600属性 password xxxxxxx # Set a default account account default: test Esc,shift+: 进入命令模式,输入x,保存退出。 由于password是明码,所以我们需要修改此文件的权限 chmod 600 etc/msmtprc 3、测试 /usr/local/msmtp/bin/msmtp youremail@test.com 输入任意字符,然后按Ctrl+D退出,查看邮件是否收到。 由于设置了日志,可以到 /usr/local/msmtp/msmtp.log,查看日志,发信成功失败都会有记录。 按ctrl+d结束 但是它不能够发送附件,所以安装mutt 4、安装mutt vi /etc/Muttrc ,编辑mutt的总设置,修改以下几行 set from="发送邮件地址" set sendmail="/usr/local/msmtp/bin/msmtp" set use_from=yes set realname="发件人" set editor="vi" 发件地址最好与msmtp设置的账号相同,否则可能会出错。 5、测试一下mutt是否有效 echo "测试测试" | mutt -s "测试" 测试邮件地址 echo "testmail" |mutt -s "test" [-a /etc/hosts] test@163.com 这里的-a 是指添加附件,如果是多个附件的话就 多加几个 -a 文件名 可以使用mutt进行邮件备份等工作了,结合cron使用,可以实现的功能相当多。
菲宇
2019/06/11
1.6K0
用curl命令通过smtp协议发送邮件
为啥我要用curl来发邮件呢?主要是服务器不是邮件服务器,也没有装sendmail、postfix这类邮件服务,有时写一些脚本会用邮件提醒,这时候用curl就非常方便了。
用户2323866
2021/06/23
5.2K0
【Java】JavaMail实现收发邮件——(一)相关概念概述
JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。
NorthS
2023/03/21
5.2K0
C#进阶-实现邮箱收发功能
在C#中,发送邮件是一项常见的任务,通常用于实现自动化通知、报警和与用户进行交互等场景。C#提供了多种发送邮件的方式,主要方式包括SMTP协议、POP3协议、IMAP协议、Exchange服务器等。使用这些方式,开发人员可以灵活地发送和接收邮件,满足各种应用场景的需求。
Damon小智
2024/03/20
3850
C#进阶-实现邮箱收发功能
Ubuntu 14.04+Mutt+Msmtp 配置Linux 下命令行邮件客户端
配置 msmtp 安装完成之后先配置 msmtp,默认的配置文件根据每个操作系统版本不一样,通过msmtp --version 来查看。
星哥玩云
2022/07/03
1.5K0
推荐阅读
相关推荐
傻瓜式配置mutt
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验