如何在Ubuntu16.04上使用Roundcube安装您自己的Webmail客户端
介绍
如今,许多人使用 Gmail 等基于浏览器的电子邮件客户端来访问他们的电子邮件。 但是,如果您希望在查看电子邮件时不再看到广告,或者如果您已从公共电子邮件服务转移到自己的域,则可以运行自己的网络邮件客户端(也称为 邮件用户代理 [ X206X] 或 MUA)。
Roundcube 是一个现代和可定制的基于 IMAP 的 web 邮件客户端,用 PHP 编写。 它具有大量用于查看、组织和撰写电子邮件的功能,以及对联系人和日历管理的支持。 借助其插件存储库,您可以添加与最流行的基于浏览器的客户端相当的功能。
要了解 Roundcube 在您的电子邮件基础架构中的位置,让我们来看看幕后构成电子邮件的组件:
- 邮件用户代理 (MUA) 是用户与之交互以查看和发送电子邮件的界面。
- 邮件传输代理 (MTA) 将电子邮件从发件人传输到收件人。
- 简单邮件传输协议 (SMTP) 是 MUA 用于向 MTA 发送邮件的协议。
- 邮件传递代理 (MDA) 从 MTA 接收电子邮件并存储它们。
- Internet 消息访问协议 (IMAP) 是 MDA 用来向 MUA 传递邮件的协议。
当您发送电子邮件时,您的 MUA 使用 SMTP 将其传输到您的电子邮件服务器的 MTA。 几跳后,您的收件人的 MTA 将收到电子邮件并使用 IMAP 将其传输到他们的 MDA。 然后您的收件人可以使用他们选择的 MUA 查看电子邮件。
注:换句话说,Roundcube是一个MUA,而不是一个MTA。 这意味着,如果您使用它,您仍然需要有一个服务来管理您的电子邮件。 您可以使用 自己的邮件服务器 ,但如果您 不想运行自己的邮件服务器 ,Roundcube 可以同样适用于 Gmail 等公共电子邮件服务或来自 ISP 的托管电子邮件.
在本教程中,您将设置由 Gmail 支持的 Roundcube。
先决条件
要遵循本教程,您将需要:
- 按照这个Ubuntu 16.04初始服务器设置教程设置一台Ubuntu 16.04服务器,包括sudo非root用户和防火墙。
- 按照 this LAMP on Ubuntu 16.04 教程 安装的 LAMP 堆栈。
- 基于 IMAP 的电子邮件服务器。 为简单起见,本文将使用 Gmail,但任何基于 IMAP 的电子邮件服务器都可以使用。 确保您知道电子邮件服务器的 IMAP 和 SMTP 设置。
第 1 步 — 安装依赖项
设置 Roundcube 的第一步是安装其依赖项和配置 PHP。 安装 Roundcube 后,我们可以使用其有用的依赖项检查页面来验证所有设置是否正确。
这些是开箱即用的 Roundcube 依赖项:
- 几个 PHP 库(它们是下面的
php-*
包,包括对 XML 和多字节字符串的支持) - 支持工具(
zip
和unzip
处理压缩文件) - 用于版本控制的 Git
- PHP插件管理系统(
composer
)
更新您的包索引并立即安装所有这些依赖项。
sudo apt-get update sudo apt-get install php-xml php-mbstring php-intl php-zip php-pear zip unzip git composer
接下来,需要在服务器的 php.ini
文件中启用一些 PHP 库,该文件位于 /etc/php/7.0/apache2/php.ini
。 使用 nano
或您喜欢的文本编辑器打开此文件。
sudo nano /etc/php/7.0/apache2/php.ini
许多必要的更改只是启用已注释掉的选项。 在 php.ini
文件中,注释行以 ;
分号开头(而不是更常见的 #
哈希符号)。 要取消注释一行,请删除这个前导分号; 要评论一行,请添加前导分号。
搜索包含许多以 extension=
开头的注释行的部分。 取消注释 php_mbstring.dll
和 php_xmlrpc.dll
扩展的行。
/etc/php/7.0/apache2/php.ini
. . . ;extension=php_interbase.dll ;extension=php_ldap.dll extension=php_mbstring.dll ;extension=php_exif.dll ; Must be after mbstring as it depends on it ;extension=php_mysqli.dll . . . ;extension=php_sqlite3.dll ;extension=php_tidy.dll extension=php_xmlrpc.dll ;extension=php_xsl.dll . . .
然后将 extension=dom.so
添加到扩展块的底部。
/etc/php/7.0/apache2/php.ini
. . . extension=php_xmlrpc.dll ;extension=php_xsl.dll extension=dom.so . . .
我们需要在此文件中进行一些其他修改。
首先,搜索 date.timezone
设置。 取消注释该行并将您的时区添加到引号中。 要查看如何在 php.ini
文件中格式化您的时区,您可以参考 PHP 的时区页面 。 例如,如果您居住在东部标准时间,您的文件可能如下所示:
/etc/php/7.0/apache2/php.ini
. . . [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = "America/New_York" . . .
接下来,搜索 upload_max_filesize
设置。 此设置主要影响上传附件。 默认情况下,它设置为 2MB。 您可以将其设置为您想要的任何数量,但大多数电子邮件服务器将总附件大小限制为 10MB。 如果多个用户同时添加附件,我们将在此处将其设置为 12MB。
/etc/php/7.0/apache2/php.ini
. . . ; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize = 12M . . .
接下来,搜索 post_max_size
。 upload_max_filesize
设置仅适用于附件,而此设置适用于整个电子邮件(包括附件)的大小。 为了防止死锁,我们将把它设置为稍高的值。
/etc/php/7.0/apache2/php.ini
. . . ; Maximum size of POST data that PHP will accept. ; Its value may be 0 to disable the limit. It is ignored if POST data reading ; is disabled through enable_post_data_reading. ; http://php.net/post-max-size post_max_size = 18M . . .
最后,搜索 mbstring.func_overload
,取消注释,并验证其值是否设置为 0。 这支持多字节字符串函数。
/etc/php/7.0/apache2/php.ini
. . . mbstring.func_overload = 0 . . .
保存并关闭文件。
您的服务器现在设置了 LAMP 堆栈、Roundcube 的依赖项和必要的 PHP 配置。 下一步是下载 Roundcube 软件,安装并配置它。
第 2 步 — 下载 Roundcube
与 Linux 世界中的许多项目一样,有两种方法可以安装 Roundcube:从包或从源代码。 Roundcube 有一个 PPA,但由于该项目正在积极开发中,因此 PPA 经常过时。 (在撰写本文时,PPA 的版本为 1.2.3,但项目本身的版本为 1.3)。 为了确保我们获得最新版本,我们将从源代码安装。
导航到Roundcube下载页面。 查看 Stable version 部分并找到 Complete 包。 右键单击下载按钮并选择复制链接地址。
将此地址与 wget
一起使用以在服务器上下载 Roundcube 压缩包。
wget https://github.com/roundcube/roundcubemail/releases/download/1.3.0/roundcubemail-1.3.0-complete.tar.gz
解压缩 Roundcube 存档。
tar -xvzf roundcubemail-1.3.0-complete.tar.gz
tar 的参数可能有点 吓人 ,所以这里是每个标志的作用:
x
标志代表提取。v
标志代表详细,它告诉tar
打印提取的每个文件的路径和名称。z
标志告诉tar
不仅要删除 tar 包装器,还要使用 gzip 解压缩存档。 我们知道该文件是用 gzip 压缩的,因为文件扩展名末尾有.gz
。f
标志代表文件。 这必须是最后一个标志,因为tar
使用紧随其后的任何内容作为要提取的文件。
接下来,将解压后的目录移动到/var/www
,重命名为roundcube
。 确保在目录名称中省略结尾的 /
,因为我们要移动和重命名整个目录,而不是目录中的内容。
sudo mv roundcubemail-1.3.0 /var/www/roundcube
最后,更改权限以允许 Apache 创建和编辑文件(如配置文件和日志)。 具体来说,将所有者和组更改为www-data,并更改所有者和组的读写权限,但其他所有人只读。
sudo chown -R www-data:www-data /var/www/roundcube/ sudo chmod 775 /var/www/roundcube/temp/ /var/www/roundcube/logs/
我们已经下载了 Roundcube 的代码并更新了它的位置和权限,但此时它只是部分安装。 为了完成安装,我们需要通过 Roundcube 的 GUI 将 Roundcube 连接到我们的数据库。 在我们这样做之前,我们需要告诉 Apache Roundcube 在哪里,以便它可以加载网站。
第 3 步 — 配置 Apache
我们需要编辑配置 Apache 的文件是 虚拟主机文件 。 虚拟主机是一项允许 Apache 在同一服务器上托管多个站点的功能。 即使这是 Apache 托管的唯一站点,使用虚拟主机配置文件也比编辑主要 Apache 配置更简单、更清晰。
/etc/apache2/sites-available/
下的每个 .conf
文件代表一个不同的站点。 我们将在这里为 Roundcube 创建一个虚拟主机文件,然后告诉 Apache 以便它可以通过浏览器使用它。
首先,复制默认配置文件以用作新文件的起点。
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/roundcube.conf
使用文本编辑器打开文件。
sudo nano /etc/apache2/sites-available/roundcube.conf
我们需要对此文件进行一些更改。 我们将首先浏览它们中的每一个,然后提供整个文件以进行复制和粘贴。
在现有的 VirtualHost
块中,您将修改以下指令:
ServerName
告诉 Apache 监听哪个域。 这应该是您的服务器 IP 地址或域名(如果您正在使用)。DocumentRoot
指定流量进来时发送到哪里。 在我们的例子中,我们应该将它发送到/var/www/roundcube
的 Roundcube。ServerAdmin
允许您为 Apache 的任何问题指定联系电子邮件地址。 在本教程中,我们不会配置 Apache 来执行此操作,但最好还是将其包含在内。- 两条日志记录行
ErrorLog
和CustomLog
定义了保存此站点的成功连接日志和错误日志的位置。 我们需要为错误日志指定特定名称,以便在出现问题时很容易找到特定于该站点的日志。
然后,您将添加一个新的 Directory
块,它告诉 Apache 如何处理 Roundcube 目录。 Directory
块的每一行中的第一个单词是配置名称,后跟实际的配置选项。
Options -Indexes
告诉 Apache 在找不到index.html
或index.php
文件时显示警告。 默认情况下,它将列出目录的内容。AllowOverride All
告诉 Apache 如果找到本地.htaccess
文件,该文件中的任何选项都会覆盖该文件中的全局设置。Order allow,deny
告诉 Apache 首先允许匹配的客户端访问该站点,然后拒绝任何不匹配的客户端。allow from all
是Order
行的后续。 它定义了允许的客户端类型,在我们的例子中是任何类型。
进行这些更改后,文件将如下所示。 为简洁起见,评论已被删除。
/etc/apache2/sites-available/roundcube.conf
<VirtualHost *:80> ServerName your_server_ip_or_domain DocumentRoot /var/www/roundcube ServerAdmin sammy@example.com ErrorLog ${APACHE_LOG_DIR}/roundcube-error.log CustomLog ${APACHE_LOG_DIR}/roundcube-access.log combined <Directory /var/www/roundcube> Options -Indexes AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
保存并关闭文件。
接下来,告诉 Apache 停止托管默认站点。
sudo a2dissite 000-default
然后告诉 Apache 开始托管 Roundcube 站点。 启用站点时,请确保不要包含 .conf
; a2ensite
想要不带扩展名的配置文件名。
sudo a2ensite roundcube
启用 Roundcube 需要的 mod_rewrite
Apache 模块。
sudo a2enmod rewrite
最后,重新启动 Apache,这将使 Roundcube 安装可以访问。
sudo apache2ctl restart
webmail 客户端几乎可以使用了。 安装过程的最后一步是配置数据库,以便 Roundcube 可以存储其特定于应用程序的数据。
第 4 步 — 配置 MySQL
此时,如果您打开 Web 浏览器并尝试访问您的服务器(通过 IP 地址或域名,如果您正在使用的话),您将看到一个配置错误页面。 这是因为 Roundcube 正在检查配置设置期间生成的文件,但我们还没有完成配置设置。 在我们完成该设置之前,我们需要准备数据库。
连接到 MySQL 交互式 shell。 此命令告诉 MySQL 以用户 (-u
) root 身份进行身份验证,并且我们将指定密码 (-p
)。
mysql -u root -p
输入命令后,系统会提示您输入安装 MySQL 时创建的 root 密码。
现在我们在 MySQL shell 中,我们将创建一个数据库和一个数据库用户,然后授予该用户在该新数据库上执行命令的权限。
首先创建数据库。 此命令创建一个名为 roundcubemail
的数据库,然后提供数据库选项,例如要使用的字符集 (utf8
)。
CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
与许多其他身份验证系统不同,MySQL 通过名称和连接位置来定义用户。 此命令创建一个名为 roundcube 的用户,并定义该用户从 localhost
连接。 对于访问数据库的应用程序,定义用户将从何处发出请求有助于加强安全性。
创建此用户,确保将密码更改为安全的密码。
CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'password';
授予 roundcube 用户对 roundcubemail
数据库及其所有表的所有权限。
GRANT ALL PRIVILEGES ON roundcubemail.* to 'roundcube'@'localhost';
然后保存您的更改并退出 MySQL 交互式 shell。
FLUSH PRIVILEGES; EXIT;
我们创建了一个空白数据库 roundcubemail
和一个用户 roundcube@localhost
,然后授予该用户对数据库的完全权限。 现在我们需要设置数据库的结构,以便 Roundcube 知道将其信息保存在哪里。 Roundcube 安装提供了一个为我们配置数据库的文件,因此我们不必手动进行。
以下命令告诉 MySQL 使用我们新创建的用户读取文件 /var/www/roundcube/SQL/mysql.initial.sql
并将配置应用于数据库 roundcubemail
。
mysql -u roundcube -p roundcubemail < /var/www/roundcube/SQL/mysql.initial.sql
系统将提示您输入 roundcube 用户的密码。
以这种方式设置数据库为 Roundcube 的使用做好了准备,还允许我们验证我们是否拥有正确的权限。 如果一切顺利,您将不会收到任何反馈并返回命令提示符。 然后我们准备告诉 Roundcube 我们的电子邮件设置并完成安装。
第 5 步 — 配置 Roundcube
如前所述,如果您现在尝试访问 Roundcube 安装,您将收到一个错误页面。 要完成安装,我们需要访问http://your_server_ip_or_domain/installer
。
如果一切设置正确,每个行项目的右侧都会有一个绿色的 OK,除了少数:可选的 LDAP 设置和除 MySQL 之外的每个数据库行。 如果在刚才提到的行之外的任何其他行旁边有 NOT AVAILABLE,则您需要安装这些依赖项。 Roundcube 为任何缺少的依赖项提供了一个链接,以便您找出要安装的内容。
一切设置正确后,向下滚动到页面底部并单击 NEXT 按钮。
下一页上的表单分为七个部分,演示如何生成 Roundcube 配置文件。 以下是我们需要填写的表格部分,按部分划分。 如果以下部分中排除了表单中的某行,您可以跳过该行并将其保留为默认设置。
一般配置
常规配置部分提供了一些用于自定义的装饰选项和一些常规设置。 您应该在此处更改一个选项:
- 确保勾选 ip_check 以获得更高的安全性。 它在会话授权中检查客户端的 IP。
您还可以进行更多可选更改:
- 您可以更改 产品名称 。 这可以是您希望的任何内容,并且文本中对“Roundcube”的所有引用都将替换为此名称。
- support_url 是一个 URL,用户可以在其中获得对其 Roundcube 安装的支持。 它不是严格需要的,但如果为可能需要帮助的一群人提供 Roundcube,那就太好了。 如果您没有专门的帮助台站点,您可以使用电子邮件地址,例如
mailto:sammy@example.com
。 - 您可以将 Roundcube 徽标替换为 skin_logo,它采用 PNG 文件的 URL(178 像素 x 47 像素)。 如果您要启用 HTTPS(强烈推荐,本教程稍后会介绍),请确保图像 URL 是 HTTPS URL。
所有其他选项都可以保留其默认值。
记录和调试
将此部分中的所有内容保留为默认设置。
数据库设置
Roundcube 使用 MySQL 存储运行 Web 客户端的信息(而不是您的电子邮件)。 在本节中,您需要告诉 Roundcube 如何访问您在步骤 4 中设置的数据库。 您将需要之前创建的数据库用户、用户密码和数据库名称。
- 它应该已经设置好了,但是从数据库类型下拉菜单中选择
MySQL
。 - 为 数据库服务器 输入
localhost
。 - 在 数据库名称 字段中输入数据库名称
roundcubemail
。 - 在 数据库用户名 字段中输入数据库用户
roundcube
。 - 对于 数据库密码 字段,输入您在步骤 4 中创建数据库时定义的密码。
- 最后一个选项 db_prefix 不是必需的,除非您与其他应用程序使用共享数据库。 如果是这样,请输入类似
rc_
的内容。
IMAP 设置
对于本部分,您需要电子邮件服务器的 IMAP 和 SMTP 设置。 由于本教程使用 Gmail 作为示例,Gmail 设置包含在下面,但如果您有自己的电子邮件提供商,他们应该为您提供所需的详细信息。 大多数电子邮件提供商都支持带或不带加密的连接。 确保通过使用 SSL IMAP/SMTP URL 和端口来避免使用非安全连接。
- 在 default_host 字段中输入 IMAP 服务器 URL。 使用 SSL 连接时,请在 URL 前加上
ssl://
而不是https://
。 对于 Gmail,输入ssl://imap.gmail.com
。
- 接下来是设置 default_port,即 IMAP 服务器端口。 SSL 和非 SSL 连接将使用不同的端口,因此请确保使用 SSL 端口。 Gmail 的 SSL IMAP 端口使用
993
。 - username_domain 字段是使用完整电子邮件地址作为用户名的电子邮件提供商的便利选项。 此字段是可选的。 输入域(而不是完整的电子邮件)将允许您在
@
之前仅使用您的姓名登录 Roundcube,而不是整个电子邮件。 例如,在字段中输入gmail.com
将允许user@gmail.com
使用user
登录 Roundcube。 - 确保选中 auto_create_user 复选框。 如果未选中,Roundcube 不会在自己的数据库中创建用户,这将阻止您登录。
- 现在,将所有 *_mbox 字段(如 sent_mbox)保留为默认值。 这可以稍后在 Roundcube UI 中更新,并且大多数电子邮件客户端仍然使用这些文件夹名称。
SMTP 设置
SMTP 服务器是发送电子邮件的电子邮件部分。 与 IMAP 服务器部分非常相似,我们将使用 SSL URL 和端口以及 Gmail 作为参考。
- 在 smtp_server 字段中输入 SMTP 服务器地址。 Gmail 的 SMTP 服务器是
ssl://smtp.gmail.com
。 - 在 smtp_port 字段中输入 SSL SMTP 服务器端口。 Gmail 的 SSL 端口是
465
。 - 因为 SMTP 和 IMAP 是两个独立的服务,所以它们都需要用户名和密码。 Roundcube 为我们提供了使用上面设置的 IMAP 用户名和密码的选项,因此我们不必在这里再次设置。 这意味着您需要将 smtp_user/smtp_pass 下的字段留空,并选中 使用当前 IMAP 用户名和密码进行 SMTP 身份验证 旁边的框。
- 最后确保选中 smtp_log 的复选框。
显示设置和用户偏好
我们将保留所有这些选项的默认值。 如果您想将 Roundcube 安装自定义为与其运行的操作系统不同的语言,请通过单击配置页面上的 RFC1766 链接并更新 语言 手动设置它场地。
插件
Roundcube 的插件支持真正让这个 webmail 客户端脱颖而出。 以下是您可以安装的一组很好的默认设置。 所有插件都是可选的,即。 他们不是必须使用 Roundcube,但下面的列表是一个很好的设置,可以使体验更轻松或更安全。
查看每个插件的描述并安装您喜欢的任何一个。 如果您没有在此处选择插件,您可以随时安装它。 这只是用这些插件预先配置了 Roundcube。
- archive:给你一个存档按钮,类似于 Gmail 的工作方式。
- 表情:简单地让在电子邮件中使用表情更容易。
- enigma:允许 GPG 电子邮件加密。 我们将在 我们的 Roundcube 安全教程 中详细介绍如何配置它。
- filesystem_attachments:一个核心插件,允许在撰写或保存草稿电子邮件时临时将附件保存到 Roundcube 服务器。
- hide_blockquote:隐藏回复电子邮件的引用部分以保持 UI 更简洁。
- identity_select:如果您有多个电子邮件地址(身份),它可以让您在撰写电子邮件时轻松选择它们。
- markasjunk:允许将电子邮件标记为垃圾邮件并将其移至您的垃圾邮件文件夹。
- newmail_notifier:使用您的浏览器通知系统提醒您有新电子邮件。
最后,这就是所有的配置。 按页面底部的 UPDATE CONFIG 按钮保存您的设置。 接下来让我们测试一切正常。
第 6 步 — 测试 Roundcube 配置
更新配置后,页面将刷新,您会在页面顶部看到一个黄色信息框,上面写着 配置文件已成功保存到 Roundcube 安装的 RCMAIL_CONFIG_DIR 目录中。
在此处,单击 CONTINUE 按钮以测试您的配置。 就像依赖检查页面一样,如果没有错误,您会在每一行看到一个绿色的 OK 标记。 如果没有,请返回并仔细检查您输入的内容。
要测试其余配置,请在 Test SMTP config 和 Test IMAP config 部分中输入您的 IMAP 和 SMTP 用户名和密码,然后单击 Send test email[X190X ]和分别检查登录。 如果测试成功,页面将重新加载,您将在您测试的部分下看到绿色的“OK”。
注意:如果您使用Gmail并且启用了两步验证,则需要生成应用专用密码,因为Roundcube不知道如何提示您两步验证令牌。
一旦你检查了 SMTP 和 IMAP 连接并且两者都是绿色的,那么是时候跳回你的 SSH 会话并删除安装程序目录了。 这将防止其他人生成新配置并覆盖正确的设置。
sudo rm -rf /var/www/roundcube/installer/
现在您可以使用您的服务器 IP 或您的域名访问您的 Roundcube 实例,登录并查看您的电子邮件。
结论
使用 Roundcube,您可以拥有本地桌面客户端的功能集和外观以及 Web 邮件客户端的灵活性。 您现在拥有一个功能齐全的安装,但您应该采取一些额外的步骤来确保您完全安全(例如添加 HTTPS 支持和为您的电子邮件使用 GPG 加密)。 您可以按照 如何在 Ubuntu 16.04 上保护 Roundcube 来做到这一点。
此外,您可以安装新主题以增强客户端和插件的外观以添加新功能。 与 plugins 不同,没有一个中心站点来查找主题,但您可以找到 Roundcube Skins 或 Roundcube 论坛 作为查找主题的地方。