在 Windows 上设置邮件服务

本教程介绍了如何设置邮件服务器以接收和发送电子邮件。

在 Windows 系统上安装和运行邮件服务器的最低硬件要求是:2 个虚拟 CPU、1 GB 内存和 3 GB 磁盘空间。使用自建邮件服务器的一个优势是,您可以轻松设置 联系表单,并允许用户通过该表单向您发送邮件。

1. 打开端口

要设置邮件服务器,您需要开放特定的端口以允许邮件的收发。需要开放的端口取决于您计划使用的电子邮件协议。最常见的电子邮件协议是用于发送电子邮件的 SMTP(简单邮件传输协议)和用于接收电子邮件的 IMAP(互联网邮件访问协议)或 POP3(邮局协议)。以下是通常与这些协议关联的端口:

SMTP:

端口 25:这是 SMTP 的默认端口。它用于发送邮件。

IMAP:

端口 143:这是 IMAP 的默认端口,用于接收电子邮件。它并不安全,通常与 STARTTLS 或 SSL/TLS 加密一起使用。

端口 993:这是安全的 IMAP 端口,当采用 IMAPS(基于 SSL/TLS 的 IMAP)加密时使用。

POP3:

端口 110:这是 POP3 的默认端口,用于接收未加密的电子邮件。

端口 995:这是安全的 POP3 端口,当采用 POP3S(基于 SSL/TLS 的 POP3)加密时使用。

本教程中,我们将用到所有这些端口,因此需要打开以下端口:

请前往您的网站门户并打开上述端口。此外,请为网络服务打开 HTTP(入站)端口 80 和 HTTPS(入站)端口 443

2. 软件安装

首先,增加虚拟机的虚拟内存(初始大小:1500 MB,最大大小:4000 MB)。在控制面板 > 轻松访问 中,移除“使计算机更易于查看”下的背景图像。

我们需要安装一系列软件:hmailserver、Apache、PHP、PHPMailer 和 Win-ACME。

阿帕奇

1) 安装最新的 Visual Studio 2015-2022 C++ 可再发行组件包:https://aka.ms/vs/17/release/VC_redist.x64.exe

2) 下载 Apache 文件(例如,Windows 系统可从 https://www.apachelounge.com/download/VC15/ 下载),并将其解压缩(archive httpd-2.4.54-win64-VC15.zip)到 C:\ ,使目录为 C:\Apache24\

3) 解压缩后,进入 c:\Apache24\conf\ 文件夹,用文本编辑器打开 httpd.conf 文件。

httpd.conf

4) 改变

#LoadModule rewrite_module modules/mod_rewrite.so

LoadModule rewrite_module modules/mod_rewrite.so

5) 注册 Apache 服务:

cd C:\Apache24\bin\
httpd -k install

输出结果:

    正在安装“Apache2.4”服务
    'Apache2.4' 服务已成功安装。
    正在测试 httpd.conf 文件……
    必须先纠正此处报告的错误,才能启动服务。
        

添加入站防火墙规则,允许端口 80 (HTTP) 和端口 443 (HTTPS) 访问。对于电子邮件服务,添加入站规则,允许端口 25 (SMTP)、110 (POP3)、143 (IMAP)、465 (SMTPS)、587 (SMTP 提交)、993 (IMAPS) 和 995 (POP3S) 访问。添加出站防火墙规则,允许端口 25 (SMTP) 访问。重启服务器。

6) 打开网页浏览器,输入您的 IP 地址 (http://172.173.177.185),您应该会看到“It works!”。

PHP

访问 windows.php.net - /downloads/releases/archives/ 并下载适合您计算机操作系统的 PHP 版本。通常,您可以下载任何稳定版本,本说明基于 Windows 平台的 7.4.33 版本。请务必在以下步骤中修改文件夹名称以匹配您的版本。

1) 下载 PHP 软件包 php-7.4.33-Win32-vc15-x64.zip 并将其解压缩到 C:\php74 目录下。

2) 将 php-ini-development.ini 重命名为 php.ini,然后打开它,删除“;”以取消注释以下行(如果需要,可以更改路径):

extension_dir = "c:/php74/ext/"

3) 将 PHP 添加到系统环境变量中。

setx path “%PATH%; C:\php74” /M

(或者,在 Windows 系统属性、环境变量、系统变量中设置路径)。

4) 再次打开文件 c:\Apache24\conf\httpd.conf,并在文件末尾添加以下行:

AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .html
LoadModule php7_module "C:/php74/php7apache2_4.dll"
PHPiniDir "c:/php74"

5) 重启 Apache 服务。

6) 现在,如果您按照前面的步骤操作,就可以从默认的 Apache 文档根目录(即 c:\Apache24\htdocs)访问您的 PHP 页面。

7) 在 Notepad++ 中,在 c:\Apache24\htdocs 文件夹中创建一个名为 phpinfo.php 的文件,并添加以下代码。

<?php phpinfo(); ?>

8) 然后在网页浏览器中输入 http://172.173.177.185/phpinfo.php。您应该会看到以下页面,这表明您的 PHP 安装正确。

phpinfo.php

9) 打开 php.ini 文件,找到并取消注释以下行:

extension=openssl.dll

如果要添加 PostgreSQL 扩展,需要将 libpq.dll 从 php74\ 复制到 Apache2.2*\bin,然后重启服务。

hMailServer

下载最新版本 的 hMailServer 并安装。安装 hMailServer 之前,必须先安装 .NET 2.0。请转到服务器管理器 > 功能 > .NET Framework 3.5(包含 .NET 2.0 和 3.0),并启用它。之后即可安装 hMailServer。

为您的域指定 A 记录和 MX 记录,以便您可以将域添加到 hMailServer 中。

同时添加两个账户:admin 和 ali。按要求设置密码。

在 hMailServer 中,电子邮件主要存储在 hMailServer 数据目录中,该目录通常位于 C:\Program Files (x86)\hMailServer\Data。每个用户的电子邮件在该目录中的具体位置取决于用户的帐户名和域名,通常位于类似 /data/domain/user 的文件夹结构中。数据库包含邮件的元数据,而实际的邮件文件则存储在数据目录中。

PHPMailer

  1. 要向收件人发送电子邮件,您将使用 PHPMailer 类,这是一个功能齐全的 PHP 邮件创建和发送类。它允许您设置文件附件、SMTP 服务器、抄送 (CC)、密送 (BCC)、HTML 消息、自动换行等功能。
  2. 从Github下载PHPMailer(6.X)(https://github.com/PHPMailer/PHPMailer

雷鸟

它是一款功能齐全的IMAP邮件客户端。它可以显示HTML,对于测试IMAP邮件服务器非常有用。

3. 获取 Let's Encrypt 证书

安装 Let's Encrypt 证书的方法有很多种。以下方法适用于 Windows 系统:

win-acme 下载 Win-acme ::

要获得 Apache 所需的正确格式证书(即 .pem 文件),您需要在每次续订时激活 PemFiles 插件。对于新续订,可能通过命令行使用 --store pemfiles 参数,也可以通过主菜单使用 M 选项来完成此操作,此时系统会询问您“您希望如何存储此证书?”。

获取 .pem 格式的证书

由于我们选择了网络路径,它会要求我们输入路径,在本例中是 C:\Apache24\htdocs。

由于我们要在 Apache Web 服务器上使用 SSL 证书,因此我们将选择选项 2 PEM 编码文件(Apache、nginx 等),然后按回车键。选择 PEM 后,系统会询问您将这些文件存储在哪里。在本例中,存储位置为 C:\Apache24\conf。

配置 Apache

要在 Apache 2.4 服务器上使用通过 WACS 获取的证书,需要在 Apache24\conf\extra\httpd-vhosts.conf 文件中进行设置;如果您愿意,也可以在 \Apache24\conf\extra\httpd-ssl.conf 文件中进行这些更改:

    Define CERTROOT "C:/Apache24/conf/"
    Define SITEROOT "C:/Apache24/htdocs/"
    <VirtualHost *:443>
        ServerName www.example.com
        DocumentRoot "${SITEROOT}"
        SSLEngine on
        SSLCertificateFile "${CERTROOT}/example.com-chain.pem"
        SSLCertificateKeyFile "${CERTROOT}/example.com-key.pem"
    </VirtualHost>
        

显然,请将 example.com 替换为您实际的域名或网站根目录(即您托管文件的位置)。

启用 SSL

取消注释(删除 #) Apache24\conf\httpd.conf 文件中的以下几行:

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-ssl.conf

您还需要添加 Listen 443Listen 80 443.

为新颁发的证书配置 SSL

打开位于此处的 httpd-ssl 配置文件。

C:/Apache24/conf/extra/httpd-ssl.conf

更改 SSL 证书文件:

SSLCertificateFile "${SRVROOT}/conf/server.crt"

SSLCertificateFile "${SRVROOT}/conf/mail.umd.me.uk-chain.pem"

更改 SSLCertificateKeyFile:

SSLCertificateKeyFile "${SRVROOT}/conf/server.key"

SSLCertificateKeyFile "${SRVROOT}/conf/mail.umd.me.uk-key.pem"

更改 SSLCipherSuite:

SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES

SSLCipherSuite ECDH+AESGCM256:ECDH+CHACHA20:DH+AESGCM256:ECDH+AES256:DH+AES256:!aNULL:!MD5:!DSS
SSLProxyCipherSuite ECDH+AESGCM256:ECDH+CHACHA20:DH+AESGCM256:ECDH+AES256:DH+AES256:!aNULL:!MD5:!DSS

更改 SSL 协议

SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLProxyProtocol all -SSLv3 -TLSv1 -TLSv1.1

更改虚拟主机

# 虚拟主机的常规设置
DocumentRoot "${SRVROOT}/htdocs"
ServerName www.example.com:443
ServerAdmin admin@example.com
ErrorLog "${SRVROOT}/logs/error.log"
TransferLog "${SRVROOT}/logs/access.log"

# 虚拟主机的常规设置
DocumentRoot "${SRVROOT}/htdocs"
ServerName mail.umd.me.uk
ServerAdmin admin@umd.me.uk
ErrorLog "${SRVROOT}/logs/error.log"
TransferLog "${SRVROOT}/logs/access.log"

保存更改。在命令提示符下检查 Apache 配置。以管理员权限启动命令提示符。运行以下命令:

cd C:/Apache24/bin
httpd.exe -t

如果一切正常,请通过命令提示符重启 Apache 网络服务器。以管理员权限启动命令提示符。运行以下命令:

cd C:/Apache24/bin
httpd -k restart

验证 SSL 是否正常工作

在浏览器中访问该网站

4. 测试 IMAP

您已完成网站和邮件服务器的配置。因此,通过 IMAP 协议收发邮件应该已经可以正常工作了。让我们尝试使用外部邮箱地址向您的账户发送邮件。

5. 测试电子邮件发送

到目前为止,您已经花费了相当多的时间学习理论和配置。您是否担心您所做的一切是否真的能搭建一个可用的邮件服务器?在进行最后步骤之前,让我们休息一下,验证一下您目前为止所做的一切是否都按预期运行。

此时,C:\Program Files (x86)\hMailServer\Data 目录应该为空,或者如果您之前尝试过外部邮件发送,则可能包含一个名为“example.org”的目录。您可以获取该目录中所有文件和目录的列表:

您可能会获得类似这样的数据:

C:\Program Files (x86)\hMailServer\Data\umd.me.uk\ali\30\{30307BCF-02B7-4BD2-81E5-D8FAFBA4F5C9}.eml

您可以使用 Outlook 或 Thunderbird 打开它。

基本上,您在这里看到的架构是 C:\Program Files (x86)\hMailServer\Data\DOMAIN\USERID\…

再次强调一下您收到电子邮件时会发生什么:

6. 设置服务器以发送电子邮件

到目前为止,我们已经安装了软件并配置了服务器以接收电子邮件。我们还需要配置服务器以发送电子邮件。您可以按如下方式指定 SSL 证书:

Spcecify SSL certificates

同样,您可能还需要为端口 143 和 587 指定 SSL 证书:

Port 143 certificate Port 587 certificate

现在您可以使用 PHP 邮件程序向自己或同一域名下的其他用户发送邮件。向他人发送邮件的设置如下:

$mail->isSMTP(); //使用 SMTP 发送邮件
$mail->Host = 'tls://mail.umd.me.uk'; //设置 SMTP 服务器地址
$mail->SMTPAuth = true; //启用 SMTP 身份验证
$mail->Username = 'ali@umd.me.uk'; //SMTP 用户名
$mail->Password = 'abc'; //SMTP 密码
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //启用显式 TLS 加密
$mail->Port = 587; //连接的 TCP 端口

//收件人
$mail->setFrom('ali@umd.me.uk', 'UMD MSGIS');
$mail->addAddress('admin@umd.me.uk', 'Xin Tao'); //添加收件人

使用电子邮件管理软件,例如 Thunderbird 或 Outlook,并使用您的帐户和密码登录。登录后,您应该能够在邮箱中看到邮件。

下一步

希望这篇教程能帮助你在 Windows 系统上搭建邮件服务器。或者,你也可以在 Linux 系统上搭建邮件服务器。