配置 Postfix 通过端口 587 发送/中继电子邮件 Gmail(smtp.gmail.com)

配置 Postfix 通过端口 587 发送/中继电子邮件 Gmail(smtp.gmail.com)

使用 Centos 5.4,搭配 Postfix。我可以做

mail [email protected] 
subject: blah
 test
.
Cc:

并且消息已发送到 Gmail,但它位于垃圾邮件文件夹中,这是可以预料的。

我的目标是能够生成电子邮件消息,并让它们出现在常规收件箱中!据我了解,Postfix/Gmail 可以将 Postfix 配置为使用端口 587 通过经过身份验证/有效的用户发送/中继邮件,这样邮件就不会再被视为垃圾邮件。

我尝试了基于网络上不同站点/文章的多个参数,但都没有成功。有些文章实际上似乎与其他文章相冲突!我也查看了 stacflow 上关于此问题的帖子,但我仍然遗漏了一些东西... 还在 IRC(Centos/Postfix)上与几个人交谈过,但仍然有问题...

因此,我再次求助于 Serverfault!

如果有人成功做到了这一点,您介意发布您的 main.cf、sasl-passwd 以及您用来实现此功能的其他任何 conf 文件吗?如果我可以查看您的配置文件,我希望能够看到我哪里搞砸了,并找出如何纠正问题。

感谢您阅读本文,以及您提供的任何帮助/指点!

附言:如果我可能错过了与此相关的 stackflow 帖子,请随时向我指出!

—汤姆

答案1

虽然我还没有尝试使用提交端口 (587) 通过提供商进行中继,但应该是可以的。要启用 Postfix 进行中继,您需要设置一个包含要使用的经过身份验证的凭据的文件,并对/etc/postfix/main.cf配置文件进行一些修改。

第一个是身份验证凭据。为此,我只需/etc/postfix/sasl_passwd使用模板添加相应的行即可:

smtp.provider.com    smtp_user:smtp_passwd

您需要确保此文件受到保护,因此我建议设置其root:root所有权和0600权限。然后您需要运行以下命令以 root 身份创建哈希映射版本。

postmap hash:/etc/postfix/sasl_passwd

解决了这个问题后,请注意,/etc/postfix/main.cf您可能会发现一些值已经设置,因此您需要相应地更改它们,但重要的细节如下:

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_tls_security_level = may

这些将使 Postfix 能够在发送邮件时使用 sasl_passwd 文件进行身份验证。然后,您需要通过添加配置来告诉 Postfix 它应该使用提供商来发送邮件

relayhost = smtp.provider.com:port

默认情况下,如果您不指定,Postfix 会假定端口 25,这在过去对我来说是有效的。使用您请求的设置,您需要指定 587 作为端口。话虽如此,我不确定您是否需要修改 sasl_passwd 条目,smtp.provider.com:587而不是简单地smtp.provider.com修改,因为我以前没有尝试过通过非默认端口执行此操作,所以您必须自己尝试一下。

仅这些配置步骤就可以处理我通过中央邮件服务器维护的几台服务器上的邮件转发。

已更新以包含完整工作示例

事实上,我已经将我的 Ubuntu(基于 Debian)笔记本电脑配置为使用我的电子邮件提供商(非 Gmail)上的端口 587,因为我的 DSL 提供商阻止了出站端口 25 流量。我更新为使用我的一个 Gmail 帐户发送邮件。我唯一需要做的更改是

我正在隐藏私人数据,但除此之外粘贴原样Postfix 的工作配置。

首先我们有/etc/postfix/main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = may

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = solitare, localhost.localdomain, , localhost
relayhost = smtp.gmail.com:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =

接下来我们有/etc/postfix/sasl_passwd

smtp.gmail.com:587  [email protected]:mypassword

然后我运行了以下 SMTP 会话:

jbouse@solitare:~$ telnet localhost 25
Trying 127.0.0.1...
Connected to solitare.
Escape character is '^]'.
220 example.com ESMTP Postfix (Ubuntu)
helo localhost
250 example.com
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
To: [email protected]
From: [email protected]
Subject: Testing Postfix smarthost via Gmail
this is just a test
.
250 2.0.0 Ok: queued as 6269B280191
quit
221 2.0.0 Bye
Connection closed by foreign host.

然后我登录我的myotherusernameGmail账户并阅读该消息:

Return-Path: <[email protected]>
Received: from example.com (mydslproviderhostname.net [x.x.x.229])
        by mx.google.com with ESMTPS id 6sm401663ywd.11.2010.03.04.19.19.58
        (version=TLSv1/SSLv3 cipher=RC4-MD5);
        Thu, 04 Mar 2010 19:19:58 -0800 (PST)
Sender: "Jeremy Bouse" <[email protected]>
Received: from localhost (solitare [127.0.0.1])
    by example.com (Postfix) with SMTP id 6269B280191
    for <[email protected]>; Thu,  4 Mar 2010 22:17:39 -0500 (EST)
To: [email protected]
From: [email protected]
Subject: Testing Postfix smarthost via Gmail
Message-Id: <[email protected]>
Date: Thu,  4 Mar 2010 22:17:39 -0500 (EST)

this is just a test

现在,我已经证明我 13 年的系统管理员生涯没有白费,我可以通过 Gmail 从我的笔记本电脑发送电子邮件,而不需要像其他人所说的那样生成自签名 x.509 证书。关键补充/etc/postfix/main.cfsmtp_tls_security_level设置为可能告诉 Postfix 可以发出启动TLS命令。如果您忘记了smtp_tls_security_level设置中你会看到类似这样/var/log/mail.log的条目:

Mar  4 22:10:58 solitare postfix/smtp[19873]: 20E07280191: to=<[email protected]>, relay=smtp.gmail.com[74.125.47.109]:587, delay=38, delays=38/0.03/0.08/0.01, dsn=5.7.0, status=bounced (host smtp.gmail.com[74.125.47.109] said: 530 5.7.0 Must issue a STARTTLS command first. 20sm399188ywh.48 (in reply to MAIL FROM command))

然而,如果设置正确,你应该看到类似这样的内容:

Mar  4 22:20:00 solitare postfix/smtp[20313]: 6269B280191: to=<[email protected]>, relay=smtp.gmail.com[74.125.47.109]:587, delay=141, delays=110/29/0.36/1.9, dsn=2.0.0, status=sent (250 2.0.0 OK 1267759200 6sm401663ywd.11)

相关内容