Nextcloud 可以发送密码重置邮件,通知用户新文件分享、文件变化及活动。用户在个人页面选择希望接收哪些通知。Nextcloud 本身不包含完整的邮件服务器,而是连接现有邮件服务器;因此必须先有可正常运行的邮件服务器,可以与 Nextcloud 在同一台机器,也可以是远程服务器。
以管理员账号登录,点击头像,再点击设置。在左侧“管理”区域进入“基本设置”,即可访问下面的配置页。
配置向导让连接邮件服务器变得方便快捷。它会填写 config/config.php 中的参数,因此你可以按需要使用向导、配置文件,或同时使用两者。向导支持 SMTP、qmail 与 Sendmail 三类连接。远程邮件服务器使用 SMTP 配置;本机邮件服务器可使用 Sendmail。
邮件服务提供器
此功能从版本 30 开始加入。邮件服务提供器是提供出站邮件服务的应用,让 Nextcloud 能通过用户个人配置的邮件账号,而不是系统邮件账号,发送系统邮件。目前仅限日历邀请。发送系统消息时,它会自动将用户邮箱与配置的提供器账号匹配。目前只有 Nextcloud Mail 4.1 或更高版本支持此功能,并且需要已经配置邮件账号。
配置 SMTP 服务器
连接远程 SMTP 服务器前,需要向邮件服务器管理员取得以下信息。
- 加密类型:None/STARTTLS 或 SSL。
- 出站 Nextcloud 邮件使用的 From 发件地址。
- 是否需要认证。
- 需要认证时,底层邮件库依次尝试 CramMd5、Login、Plain、XOAuth2。
- 服务器 IP 地址或完整域名,以及 SMTP 端口。
- 登录凭据(如果需要)。
注意:config.php 中的 overwrite.cli.url 参数会用于 SMTP EHLO。
修改会立即保存。点击 Send Email 可测试配置,测试邮件发送到个人页面设置的邮箱。邮件文本如下:
If you received this email, the settings seem to be correct.
--
Nextcloud
a safe home for all your data
配置 Sendmail/qmail
只需用 Sendmail 或 qmail 替换 SMTP 选项,再输入所需的回信地址。多数情况下,SMTP 是更合适的选择,因为邮件服务器的选项可以集中在邮件服务器配置中管理。
使用邮件模板
Nextcloud 提供一种生成邮件的机制,使邮件遵循主题设置,并在不同邮件客户端中呈现一致外观。
说明:如果需要纯文本邮件,可在客户端设置,或让接收端、发送端邮件服务器丢弃 HTML 部分。原文指出,发送 HTML 邮件本身没有安全影响,显示邮件才涉及安全风险,因此只能通过客户端禁用 HTML 显示,或由服务器删除 HTML 部分来缓解这类风险。
超出主题应用能力的邮件外观修改
可编写实现模板接口的类,或继承现有实现,覆盖模板。最便捷的方式是把类放进应用并加载,这样每次更新时就不必重新修改核心文件。
需要实现的接口是 IEMailTemplate.php;可参考或继承的实现是 EMailTemplate.php。
原文给出 Nextcloud 支持门户文章中的示例:先查看 OC\Mail\EMailTemplate::class 的源码,再在自己的继承类中覆盖需要的部分。假设覆盖邮件头:
<?php
namespace \OCA\MyApp;
use OC\Mail\EMailTemplate;
class MyClass extends EMailTemplate
{
protected string $header = <<<EOF
<table align="center" class="wrapper">
// your theme email header modification
</table>
EOF;
}
然后在 config/config.php 中,将 mail_template_class 改为类的命名空间:
'mail_template_class' => 'OCA\\MyApp\\MyClass',
详细逐步说明参见原文链接的 支持门户指南。
在 config.php 中设置邮件服务器参数
也可以直接在 config/config.php 中设置参数。以下分别是 SMTP、Sendmail 与 qmail 的示例。
SMTP
使用本地或远程 SMTP 服务器,需要填写名称或 IP 地址;也可以在其后加冒号与端口,例如 :425。不指定端口时默认使用 TCP 25,除非另行设置 mail_smtpport。
"mail_smtpmode" => "smtp",
"mail_smtphost" => "smtp.server.dom:425",
或者:
"mail_smtpmode" => "smtp",
"mail_smtphost" => "smtp.server.dom",
"mail_smtpport" => 425,
若 SMTP 服务器运行恶意软件或垃圾邮件扫描器,可能需要增大 SMTP 超时,例如设置为 30 秒:
"mail_smtptimeout" => 30,
如果 SMTP 服务器接受不安全连接,可使用默认设置:
"mail_smtpsecure" => '',
服务器支持 STARTTLS 时,连接会自动升级。如果服务器要求安全 SSL/TLS 连接,可以使用 SMTPS 强制加密,它使用 TCP 465:
"mail_smtphost" => "smtp.server.dom:465",
"mail_smtpsecure" => 'ssl',
最后配置是否需要认证。不需要认证时可保留默认值:
"mail_smtpauth" => false,
"mail_smtpname" => "",
"mail_smtppassword" => "",
需要 SMTP 认证时,必须设置用户名与密码:
"mail_smtpauth" => true,
"mail_smtpname" => "username",
"mail_smtppassword" => "password",
Sendmail
使用常见的 Sendmail 程序,需要在类 Unix 服务器上安装并配置可运行的邮件系统。sendmail 二进制文件通常在 /usr/sbin/sendmail,属于该系统的一部分;配置到位后,Nextcloud 应能直接发送邮件。
"mail_smtpmode" => "sendmail",
"mail_smtphost" => "127.0.0.1",
"mail_smtpport" => 25,
"mail_smtptimeout" => 10,
"mail_smtpsecure" => "",
"mail_smtpauth" => false,
"mail_smtpauthtype" => "LOGIN",
"mail_smtpname" => "",
"mail_smtppassword" => "",
qmail
使用 qmail 时,服务器上必须有安装完毕且可正常运行的 qmail 邮件系统。Nextcloud 会使用本机安装的 qmail 二进制文件发送邮件,配置到位后应能直接发送。
"mail_smtpmode" => "qmail",
"mail_smtphost" => "127.0.0.1",
"mail_smtpport" => 25,
"mail_smtptimeout" => 10,
"mail_smtpsecure" => "",
"mail_smtpauth" => false,
"mail_smtpauthtype" => "LOGIN",
"mail_smtpname" => "",
"mail_smtppassword" => "",
发送测试邮件
先在个人设置中保存邮箱地址,再点击管理员设置“邮件服务器”区域的 Send email 按钮,测试邮件配置。
故障排查
开启调试模式
无法发送邮件时,可启用 mail_smtpdebug,并暂时将 Nextcloud 日志级别设为 DEBUG,以获得更多调试信息:
"mail_smtpdebug" => true,
"loglevel" => 0,
谨慎将 loglevel 设置为 DEBUG(0):它影响实例中的所有活动,不仅影响邮件。排查完成后,记得恢复为合理级别:
"mail_smtpdebug" => false,
"loglevel" => 2,
说明:点击 Send email 后,屏幕上会立即出现若干 SMTP -> get_lines(): … 消息,这是预期行为,可以忽略。
为什么网站域名与邮件域名不同?
默认发件地址使用 Nextcloud 安装所在的网站主机名。如果邮件域名不同,可通过以下参数覆盖:
"mail_domain" => "example.com",
这会让 Nextcloud 发出的每封邮件(例如密码重置邮件)的发件域名变为如下形式:
no-reply@example.com
怎样确认 SMTP 服务器可达?
原文使用 ping 检查服务器是否可达:
ping smtp.server.dom
PING smtp.server.dom (ip-address) 56(84) bytes of data.
64 bytes from your-server.local.lan (192.168.1.10): icmp_req=1 ttl=64
time=3.64ms
静态核验补注:ping 检查的是 ICMP 可达性。回复不等于 SMTP 服务可用;没有回复也可能是 ICMP 被过滤,应与下一节端口检查区分。
怎样确认 SMTP 服务器监听指定 TCP 端口?
最可靠的邮件服务器信息来自其管理员。如果你就是管理员,或急需信息,可使用 netstat。本例列出当前系统中所有活动服务及监听端口。SMTP 服务监听本机回环地址的 25 端口。
# netstat -pant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State ID/Program name
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 4418/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2245/exim4
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1524/mysqld
- 25/tcp:未加密的 SMTP。
- 110/tcp/udp:未加密的 POP3。
- 143/tcp/udp:未加密的 IMAP4。
- 465/tcp:加密的邮件提交(submissions)。
- 587/tcp:机会性加密的邮件提交(submission)。
- 993/tcp/udp:加密的 IMAPS。
- 995/tcp/udp:加密的 POP3S。
怎样确认 SMTP 服务器支持 SMTPS?
监听 submissions 端口 465,是支持 SMTPS 的一个良好迹象。
怎样确认服务器支持哪些认证与加密协议?
SMTP 服务器通常会在建立连接后声明 STARTTLS 能力。可使用 telnet 检查。注意:要输入示例中标出的命令,才能取得相应输出。
telnet smtp.domain.dom 25
Trying 192.168.1.10...
Connected to smtp.domain.dom.
Escape character is '^]'.
220 smtp.domain.dom ESMTP Exim 4.80.1 Tue, 22 Jan 2013 22:39:55 +0100
EHLO your-server.local.lan # <<< enter this command
250-smtp.domain.dom Hello your-server.local.lan [ip-address]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5 # <<< Supported auth protocols
250-STARTTLS # <<< Encryption is supported
250 HELP
QUIT # <<< enter this command
221 smtp.domain.dom closing connection
Connection closed by foreign host.
如何用自签名证书发送邮件,或在 STARTTLS 中使用自签名证书?
原文说明:要禁用对等证书验证,或使用自签名证书,可向 config/config.php 添加以下内容:
"mail_smtpstreamoptions" => array(
'ssl' => array(
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false
)
),
仅有一个邮箱地址无效,为什么全部邮件都被拒绝?
无法部分发送,也就是不能只发送给其余有效邮箱而跳过错误地址。说明:点击 Send email 后立即出现 SMTP -> get_lines(): … 消息,属于预期行为,可忽略。











暂无评论内容