我注意到如果我输入service postfix status,milter 会出现错误:
Jul 01 17:39:01 mail postfix/cleanup[13921]: warning: connect to Milter service inet:127.0.0.1:8891: Connection refused
Run Code Online (Sandbox Code Playgroud)
但这意味着什么,我该如何解决?它与DKIM有关吗?因为我试图设置它,但它仍然无法正常工作。您需要帮助哪些文件?这是我的 opendkim.conf :
## CONFIGURATION OPTIONS
# Specifies the path to the process ID file.
PidFile /var/run/opendkim/opendkim.pid
# Selects operating modes. Valid modes are s (signer) and v (verifier). Default is v.
Mode sv
# Log activity to the system log.
Syslog yes
# Log additional entries indicating successful signing or verification of messages.
SyslogSuccess yes
# If logging is enabled, …Run Code Online (Sandbox Code Playgroud) (如果有更好的地方可以问这个问题,请告诉我。)
许多电子邮件服务器限制传入电子邮件所附加文件的总大小。例如,某些电子邮件服务器可能不允许大于 20MB 的邮件;如果附件为 22MB,则会失败;如果一个附件为 10MB,第二个附件为 12MB,也会失败。大多数电子邮件服务器都会实施某种限制,如本例所示,但允许的总大小因具体情况而异。
这是我不明白的部分 - 该大小限制仅适用于附件吗?或者它是否适用于电子邮件的总大小?例如,假设一封假设的电子邮件有一个大小正好为 19.98MB 的附件。但是,电子邮件正文为 0.03MB。假设接收电子邮件服务器的限制为 20MB,这会到达吗?或未能到达?或者,该特定示例是否成功或失败取决于假设接收它的电子邮件服务器?
我在我的 SMTP 服务器上为我的域和 DKIM 消息签名配置了硬故障 SPF。由于这是唯一应该用于从我的域发出邮件的 SMTP 服务器,因此我没有预见到任何复杂情况。
但是,请考虑以下情况:我通过我的 SMTP 服务器向我同事的大学电子邮件发送了一封电子邮件。问题是我的同事将他的大学电子邮件转发到他的 GMail 帐户。这些是邮件到达他的 GMail 邮箱后的标题:
Received-SPF: fail (google.com: domain of me@example.com 没有指定 192.168.128.100 作为允许的发件人) client-ip=192.168.128.100; 身份验证结果:mx.google.com;spf=hardfail(google.com:me@example.com 的域未将 192.168.128.100 指定为允许的发件人)smtp.mail=me@example.com;dkim=hardfail(测试模式)header.i=@example.com
(标题已被清理以保护非 Google 方的域和 IP 地址)
GMail 根据我的 SPF 和 DKIM 记录检查传送链中的最后一个 SMTP 服务器(理所当然)。由于交付链中的最后一个 STMP 服务器是大学的服务器而不是我的服务器,因此检查会导致 SPF 硬故障和 DKIM 故障。幸运的是,GMail 没有将邮件标记为垃圾邮件,但我担心这可能会在将来引起问题。
我对 SPF hardfail 的实施可能太严格了吗?我应该注意的任何其他建议或潜在问题?或者也许有更理想的大学电子邮件转发程序的配置?我知道转发服务器可能会更改信封发件人,但我看到这变得很混乱。
我们在 EC2 实例中有一个现有的 smtp 环境设置,用于发送密码重置等交易电子邮件。现在我们需要向每天超过 1000 封电子邮件的大型用户群发送系统电子邮件。
第一个问题是:Amazon SES 交付可靠吗?
第二:我们应该使用我们自己的 SMTP 实例还是 SES ?我认为如果我们使用我们的 SMTP 服务器,那么发送大量电子邮件最终会导致邮件进入垃圾邮件。
由于邮件是重要的系统电子邮件,而不是促销批量电子邮件。交付是一个主要问题。
我按照 workaround.org 上的教程(Debian Squeeze 的 ISPmail 教程)在 Debian Squeeze 上设置了带有 Dovecot、Postfix 和 AMaViS 的邮件服务器。它使用虚拟域并将域、电子邮件地址和帐户存储在 MySQL 数据库中。
一切正常——除了我缺少一些电子邮件标题。
(使用“真正的”垃圾邮件并通过 GTUBE 使用sendmail email@example.com < /usr/share/doc/spamassassin/examples/sample-spam.txt)
但是垃圾邮件会改变主题。所以我把一切都设置正确了,不是吗?
如何在我的邮件中获取那些丢失的标题?
这是我的 AMaViS 配置文件 ( /etc/amavis/conf.d/50-user)
use strict;
#
# Place your configuration directives here. They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file …Run Code Online (Sandbox Code Playgroud) 我曾尝试使用本指南为虚拟用户配置 Postfix/Dovecot 组合。
我的服务器在 CentOS 6.5 上运行 Postfix 2.6.6 和 Dovecot 2.0.9。
问题是,当我使用 Outlook 2013 连接到服务器(它在 IMAP+SMTP 上连接得很好)并向自己发送一封测试电子邮件时,我没有收到电子邮件。查看邮件日志我可以看到我收到错误
postfix/virtual[2768]: 9C3D480768: to=<user@domain.net>, relay=virtual, delay=1132, delays=1132/0.02/0/0.02, dsn=4.2.0, status=deferred (delivery failed to mailbox /var/vmail/domain.net/user: cannot open file: Is a directory)
Run Code Online (Sandbox Code Playgroud)
错误消息非常清楚,我想,好吧,这可能是我之前安装的 Cyrus/Postfix 安装的缺陷。我继续删除了 vmail 文件夹,为域创建了一个子文件夹,并将所有内容的所有权更改为 vmail:vmail。我重新启动 postfix 和 dovecot,收件箱目录再次出现。Postfix 继续像以前一样抱怨。然后我尝试删除文件夹,然后创建一个空文件,但这只会使它成为 dovecot 问题而不是后缀问题,所以现在 dovecot 说它需要一个文件而不是目录。
/etc/postfix/main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
inet_interfaces = …Run Code Online (Sandbox Code Playgroud) 我与一个后缀/达夫科特/ Roundcube安装工作,力争虚拟用户的邮件系统,可以通过互联网发送邮件,如记录在这里。
一切似乎都运行良好;Dovecote 显示没有问题,我可以 telnet 到我所有的端口;但是,每当我尝试通过 Roundcube 发送邮件时,都会出现错误:
SMTP Error (220): Authentication failed.
Run Code Online (Sandbox Code Playgroud)
从日志中:
[17-Jan-2015 05:27:31 +0000]: SMTP Error: SMTP error: Authentication failure: STARTTLS failed (Code: ) in /usr/share/webapps/roundcubemail/program/lib/Roundcube/rcube.php on line 1505 (POST /roundcube/?_task=mail&_unlock=loading1421472451594&_lang=en_US&_framed=1?_task=mail&_action=send)
Run Code Online (Sandbox Code Playgroud)
我想既然 Postfix 负责 SMTP,它一定是罪魁祸首。在我的 Postfix 日志中,我看到:
Jan 16 21:14:35 steelhorse postfix/smtpd[18426]: disconnect from localhost.localdomain[127.0.0.1]
Jan 16 21:14:35 steelhorse postfix/smtpd[18426]: lost connection after STARTTLS from localhost.localdomain[127.0.0.1]
Jan 16 21:14:35 steelhorse postfix/smtpd[18426]: warning: TLS library problem: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1293:SSL alert number
Jan 16 21:14:35 …Run Code Online (Sandbox Code Playgroud) 解析发送回我的服务器的退回(无法投递)电子邮件的标头并确定它是软退回还是硬退回的最佳方法是什么?
我只向我的用户发送选择加入的电子邮件,但有时一些电子邮件地址会过时。当电子邮件退回到我的服务器时,我想找出它退回的原因(软/硬)。然后我可以在我的数据库中适当地处理它和/或标记用户在下次登录时更新他们的电子邮件。
我正在使用 Ubuntu 和 Postfix。我已经成功地使用别名和虚拟别名实现了 VERP。因此,退回的电子邮件的返回路径为bolt+OrigEmailAddress@example.com,我可以将它们通过管道传输到脚本。
现在我已经设置了 VERP,我知道原始电子邮件发送给谁,但我需要解析返回的邮件标头以确定它是软退回还是硬退回。
处理这个问题的最佳方法是什么?据我了解,并非所有邮件服务器都遵循相同的规则,并且标头可以具有多种格式。是否有一些开源项目可以跟踪这些类型的事情?我可以实现一些简单的方法来正确地对大多数反弹进行分类?
我正在努力保护我的邮件服务器的声誉,因此非常感谢您的帮助!
我想从我的家庭服务器接收系统电子邮件。所以我试图通过我的公共服务器配置 postfix 来做到这一点。我的公共服务器有一个固定的 IP,而我的家庭服务器在一个私有网络中,由于我的路由器的主机名被包含在主机名中,导致一个完整的主机名“homeserver.blablabla_crappyrouter”。
我的家庭服务器通过具有固定 IP 的 OpenVPN 隧道连接到我的公共服务器,其中我的家庭服务器是客户端。从我的家庭服务器到我的公共服务器(反之亦然),有一个固定的 IP,因此它们可以通过固定地址毫无问题地相互访问。这是一条隧道,可以让我从任何地方访问我的家庭服务器,而不会出现安全问题。
我的公共服务器上的 postfix 配置包括以下内容:
smtpd_recipient_restrictions = reject_invalid_hostname,
reject_unknown_recipient_domain,
reject_unauth_destination,
reject_rbl_client sbl.spamhaus.org,
permit
smtpd_helo_restrictions = reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname
smtpd_client_restrictions = reject_rbl_client dnsbl.sorbs.net
Run Code Online (Sandbox Code Playgroud)
在我的家庭服务器上,我添加了 OpenVPN 的公共服务器的 IP 使用
relayhost = [<public server IP through OpenVPN>]
Run Code Online (Sandbox Code Playgroud)
现在这个配置不发送电子邮件并给我错误:
Helo 命令被拒绝:找不到主机
我对此进行了研究,发现 postfix 会搜索主机名,但显然由于主机名混乱而找不到它。
我的问题:如何告诉我的公共服务器的 postfix 盲目地允许来自我的家庭服务器的所有内容?
谢谢。
更新:
我确实在 main.cf 中设置了选项
smtpd_helo_required = no
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。以下是我发送测试电子邮件后的 /var/log/mail.log 条目:
Sep 2 15:53:53 HomeServer sm-mta[6677]: t82Drr6w006677: from=sys@mydomain.com, size=69, class=0, nrcpts=1, msgid=<201509021353.t82Drr6w006677@HomeServer.blablabla_crappyRouter>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Sep 2 …Run Code Online (Sandbox Code Playgroud) sendmail 允许对 TLS 对话设置一个限制。我想检查发送到 example.com 的消息是否发送到具有 *.messagelabs.com 证书的服务器。我想防范 DNS 欺骗和 MitM。如果 messagelabs 只有一台服务器,那会很容易:
TLS_Rcpt:example.com VERIFY:256+CN:mx.messagelabs.com
Run Code Online (Sandbox Code Playgroud)
然而,messagelabs 有许多服务器和不同服务器的集群,它们具有相同名称的唯一 IP 和证书。一切都很好,我只想检查我向其发送邮件的服务器是否已被认证为属于 messagelabs。
我试过了
TLS_Rcpt:example.com VERIFY:256+CN:messagelabs.com
TLS_Rcpt:example.com VERIFY:256+CN:*.messagelabs.com
TLS_Rcpt:example.com VERIFY:256+CN:.*.messagelabs.com
Run Code Online (Sandbox Code Playgroud)
但我得到了类似的错误
CN mail31.messagelabs.com does not match .*.messagelabs.com
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?这是对我们的经常性请求(主要针对 TLS_Rcpt:example.com VERIFY:256+CN:*.example.com 等配置),所以我准备修改 sendmail.cf,但我无法理解
STLS_req
R $| $+ $@ OK
R<CN> $* $| <$+> $: <CN:$&{TLS_Name}> $1 $| <$2>
R<CN:$&{cn_subject}> $* $| <$+> $@ $>"TLS_req" $1 $| <$2>
R<CN:$+> $* $| <$-:$+> $#error $@ $4 $: $3 " CN " $&{cn_subject} " does not match …Run Code Online (Sandbox Code Playgroud) email-server ×10
email ×4
postfix ×4
dkim ×2
smtp ×2
tls ×2
amavis ×1
amazon-ec2 ×1
amazon-ses ×1
centos ×1
debian ×1
domainkeys ×1
dovecot ×1
openvpn ×1
roundcube ×1
sendmail ×1
spamassassin ×1
spf ×1
tunnel ×1