I'm starting to provide Chinese / English versions of some posts, switch with the Language menu above. 我开始提供部分文章的中文、英文翻译,请使用顶部语言菜单切换。

Debian VPS 设置 SMTP 发信

在博客中,当博主对访客的评论作出回复,除非访客再次来访,否则很难发现博主已经回复了自己。但是通过评论回复邮件通知功能,在博主或者其他访客回复访客评论的时候,访客会收到邮件,从而及时得知自己收到了回复。

但是在最常用的 WordPress 博客系统中,一般只能通过系统默认的 sendmail 发送邮件,这样的邮件很容易进入垃圾箱,因此我们一般选用腾讯、微软、Google 等提供域名邮箱和他们的邮件服务,这就需要通过 SMTP 发邮件。问题是 sendmail 并不支持 SMTP,我们可以在博客系统中通过插件解决问题。

但是这种方法有局限,如果 VPS 提供商屏蔽了 25 端口(SMTP 标准端口)那么某些不支持通过 SSL 加密的 SMTP 发送的博客系统也发不了邮件。而且如果你的 VPS 上运行好几个网站、不同网站程序,逐个设置非常麻烦也容易出错。

所以我们可以在 VPS 中直接安装 SMTP 邮件发送软件来解决问题。

eSMTP 是一款和 sendmail 语法兼容的软件,它可以把 sendmail 要发送的邮件通过 SMTP 来发送。

登陆你的 VPS,输入以下命令:

sudo apt-get install esmtp
sudo ln -s /usr/bin/esmtp /usr/bin/sendmail
sudo nano /etc/esmtprc

在 hostname = 后填入 SMTP 服务器地址,如果不是 25 端口那么需要指定端口号。Gmail 的 SMTP 服务器地址是 smtp.gmail.com:587

在 username = 后填入邮箱地址,password = 后填入邮箱密码。

如果邮件服务器支持 StartTLS,那么把 starttls = 后面的 disabled 改成 enabled。Gmail 支持这么做。

在 mda = 后填入 "/usr/bin/procmail -d % T"(包括双引号)

最后文件应该看起来像这样:

# Config file for ESMTP sendmail

# The SMTP host and service (port)
hostname=smtp.gmail.com:587

# SECURITY WARNING: Do NOT set username and password in the system wide
# configuration file unless you are the only user of this machine. See
# esmtprc(5).

# The user name
username=邮件地址@gmail.com

# The password
password=密码

# Whether to use Starttls
starttls=enabled

# The certificate passphrase
#certificate_passphrase=

# The Mail Delivery Agent
mda="/usr/bin/procmail -d %T"

Ctrl+X 保存文件并退出。

修改你的 php.ini,查找到 sendmail_path 一行,修改成:

sendmail_path = /usr/bin/esmtp -t -i

保存,输入以下命令:

sudo service apache2 restart #使用Apache2做服务器
sudo service php5-fpm restart #使用nginx或者其它基于php5-fpm的方式做服务器

配置完成,你可以在博客系统里发送一封邮件来进行测试。

本站使用运行在 Vercel 上的 Waline 评论系统,中国大陆访问可能不稳定。