如何设置exim4在任何地方发送电子邮件,但仅限于授权用户?

exim4configuration中努力探索各种中继控件。

我可以从我的服务器发送电子邮件,我可以发送电子邮件从家里和工作(因为我明确join适当的网块),但我不能得到我写的程序发送电子邮件到谷歌邮箱地址 – 我得到一个550中继不允许。

我的目标是能够从任何服务器发送电子邮件到任何(有效)的电子邮件地址,只要我提供一个合适的用户名和密码。 我怀疑SASL是在这里发挥作用的,但是我现在对于我可以inheritance的领域和我可以inheritance的机器之间感到困惑。

任何人都可以解开这个?

[注:Ubuntu的盒子,所以exim4 Debian风格的分割configuration]

这与我的exim设置类似。 从我的networking中,我可以发送电子邮件到任何域,但从networking外部唯一的邮件exim将交付到我的本地域, 除非用户authentication到第一。 这样,只要我首先进行身份validation,我就可以通过我的邮件服务器从世界任何地方发送邮件。

我的configuration的关键部分是:

domainlist local_domains = @ : example.com domainlist relay_to_domains = hostlist relay_from_hosts = 127.0.0.1 : 192.168.0.0/24 : 2001:111:1111::/64 

这基本上设置我的本地域,exim知道是example.com “家”。 它还列出允许exim转发任何邮件的子网范围。 relay_to_domains是空白的,因为除了example.com之外,没有其他的域可以被我inheritance。

 tls_advertise_hosts = * 

我宣传TLS可用性,以便任何客户端都可以通过TLS进行身份validation。

 acl_check_rcpt: [...] accept hosts = +relay_from_hosts accept authenticated = * require message = relay not permitted domains = +local_domains : +relay_to_domains 

这个acl会对邮件的发送地址进行一些检查,并在决定是否中继之前发送邮件。 第一行传递来自先前定义的内部networking中的主机的邮件。 第二行中继来自任何经过身份validation的用户的邮件。 第三和第四要求,如果任何以前的条件没有得到满足,只有中继为我的本地域。

最后一部分是validation者,所以exim知道validation用户的样子。 我看起来像这样:

 plain_saslauthd_server: driver = plaintext public_name = PLAIN server_condition = ${if saslauthd{{$auth2}{$auth3}}{1}{0}} server_set_id = $auth2 server_prompts = : login_saslauthd_server: driver = plaintext public_name = LOGIN server_prompts = "Username:: : Password::" # don't send system passwords over unencrypted connections server_condition = ${if saslauthd{{$auth1}{$auth2}}{1}{0}} server_set_id = $auth1 

显然这需要编译saslfunction的exim build,以及系统上的SASL守护进程。 我使用Cyrus SASLD,从内存中安装和忘记相当简单。

我实际上在OpenBSD上运行这个,所以不知道这些步骤如何转换成一个拆分configuration的Ubuntu盒子。 但是,它应该足以让你去:)