Sendmail 转发?

Sendmail 转发?

Sendmail在 Ubuntu 16.04.1 下安装。我的需求很简单:

  • 将发送至 *@domain.com 的所有电子邮件转发到一个特定的 Gmail 地址

除了

  • 如果电子邮件发送至[电子邮件保护],将这些邮件转发到一个特定的 gmail 地址(与上面的 gmail 地址不同)。此用户在服务器上没有帐户。

我知道这很简单,但我不知道如何实现它。

我有一个virtusertable看起来像这样:

[email protected]     [email protected]
@domain.com                 [email protected]

有人能帮我配置一下吗?谢谢!

答案1

安装先决条件

apt-get install sendmail mailutils sendmail-bin

创建 Gmail 身份验证文件

为 auth 文件创建实际目录

mkdir -m 700 /etc/mail/authinfo/
cd /etc/mail/authinfo/

创建身份验证文件本身

vi /etc/mail/authinfo/gmail-auth

将其放入 gmail-auth 的内容中(确保输入正确的用户/gmail/密码(还要保留前缀 U:user I:email P:password))

AuthInfo: "U:root" "I:YOUR GMAIL EMAIL ADDRESS" "P:YOUR PASSWORD"

接下来,您需要为身份验证文件创建哈希图

makemap hash gmail-auth < gmail-auth

配置您的Sendmail

添加以下代码块就在第一个“MAILER”定义行的正上方

define(`SMART_HOST',`[smtp.gmail.com]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/authinfo/gmail-auth.db')dnl

接下来您必须编译 sendmail 配置。

make -C /etc/mail

重新启动 sendmail 以使更改生效

/etc/init.d/sendmail reload

配置测试

echo "Just testing my sendmail gmail relay" | mail -s "Sendmail gmail Relay" [email protected]

此时,中继应该可以正常工作。现在我们将转到 virtusertable。

虚拟用户表

为了创建 virtusertable 映射,您必须首先在服务器的 /etc/mail/ 目录中创建一个文本文件。virtusertable 中的每个条目都应位于一行上。左侧是原始收件人地址,右侧包含目标地址,中间用一个或多个空格或制表符隔开。

例子:

vi /etc/mail/virtusertable

[email protected]    [email protected]
@domain.com        [email protected]

每次对 /etc/mail/virtusertable 文本文件进行更改时,您都需要创建一个 sendmail 可以读取的 db 文件。以下命令将在 root 运行时创建 /etc/mail/virtusertable.db 文件:

makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

现在重新启动 sendmail 并且一切都应该按预期运行。

/etc/init.d/sendmail reload

答案2

你尝试过 ssmtp 吗?

SMTP 是一个将电子邮件从本地计算机传送到已配置的邮件主机(mailhub)的程序

使用 Gmail 设置

http://www.havetheknowhow.com/Configure-the-server/Install-ssmtp.html

https://wiki.archlinux.org/index.php/SSMTP

答案3

您可能需要通过 Gmail 进行身份验证才能发送邮件。否则邮件可能会被视为垃圾邮件。这可以通过配置客户端密码(您的服务器是客户端)条目来完成。

对于 Exim4 安装,我将执行以下操作:

  • 配置服务器以使用 Gmail 的 MX 地址之一作为智能主机(带有身份验证);
  • 为您的域名配置通配符别名;以及
  • 为域设置通配符别名。

默认别名路由器不处理通配符,但可以通过简单的修改来添加通配符。

这些步骤几乎适用于您想要使用的任何服务器软件。有些软件可能默认使用智能主机。

答案4

$=wSendmail 仅向本地电子邮件域( )和列出的域中的电子邮件地址投递邮件时才咨询 virtusertable $={VirtHost}
默认情况下,Sendmail 会自动将一些名称添加到$=w

您可以使用以下命令以 root 身份检查上述列表(类别)

echo '$=w' | sendmail -bt
echo '$={VirtHost}' | sendmail -bt
  1. 您可以将 domain.com 添加$={VirtHost}sendmail.mc

    LOCAL_CONFIG C{VirtHost} domain.com 转移(0)dnl

  2. 您可以允许中继使用以下访问表条目从互联网上的任何地方访问域名:

    to:domain.com RELAY

警告
A) 因为它不会改变信封发件人,所以 gmail 可能会拒绝或将某些转发的邮件视为垃圾邮件
B) 不建议在没有反垃圾邮件过滤的情况下将邮件转发到 gmail
=> 我建议使用(稍微)更复杂的解决方案,通过 procmail 脚本进行中继。它将重写信封发件人并提供反垃圾邮件钩子

相关内容