我刚刚使用 CentOS 5.5 构建了一个适度的家庭服务器。我希望服务器能够将电子邮件发送到我的 Gmail 帐户或其他电子邮件帐户,用于各种任务,例如 cron 作业。此外,能够通过我在服务器上运行/开发的 PHP 应用程序发送电子邮件也很好。甚至可以让服务器通过 mail 命令发送电子邮件。
我知道有上百万条关于将 Linux 服务器设置为电子邮件服务器或配置 sendmail 等的 Google 搜索结果。但它们似乎不是我想要的……至少我不这么认为。我不是要设置一些公司服务器,其他客户端可以连接以发送电子邮件或任何类似的复杂内容。
我只希望我的服务器向我发送有关内容的电子邮件。看起来应该很简单......有人能指出我正确的方向吗?
更新
根据下面的用户请求,我尝试了以下命令:
/bin/mail -s "My Subject" "myaddress@gmail.com" < /home/john/test
Run Code Online (Sandbox Code Playgroud)
没有错误或任何东西。但是电子邮件从未出现在我的收件箱中。这是我的maillog
Oct 27 00:52:19 localhost sendmail[13702]: o9R6qJhU013702: from=root, size=10906, class=0, nrcpts=1, msgid=<201010270652.o9R6qJhU013702@localhost.localdomain>, relay=root@localhost
Oct 27 00:52:19 localhost sendmail[13703]: o9R6qJOd013703: from=<root@localhost.localdomain>, size=11209, class=0, nrcpts=1, msgid=<201010270652.o9R6qJhU013702@localhost.localdomain>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
Oct 27 00:52:19 localhost sendmail[13702]: o9R6qJhU013702: to=myaddress@gmail.com, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=40906, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (o9R6qJOd013703 Message accepted for delivery) …Run Code Online (Sandbox Code Playgroud) 我这里有一个很烦人的问题。我一直在测试一个应用程序并创建了一些测试电子邮件到伪造的电子邮件地址(更不用说我的服务器并没有真正设置为发送电子邮件)。当然,sendmail无法发送这些消息,并且它们一直被困在sendmail队列中。我想手动删除队列中堆积的消息,而不是等待sendmail通常需要5 天才能停止重试。
我正在使用 Ubuntu 10.04,并且/var/spool/mqueue/我读过的每个操作方法都在该目录中显示了排队的电子邮件。当我删除此目录中的文件时,sendmail停止尝试处理电子邮件,直到似乎是 cron 脚本运行并使用我不想发送的消息重新填充此目录。以下是我的一些台词syslog:
Jun 2 17:35:19 sajo-laptop sm-mta[9367]: o530SlbK009365: to=, ctladdr= (33/33), delay=00:06:27, xdelay=00:06:22, mailer=esmtp, pri=120418, relay=e.mx.mail.yahoo.com. [67.195.168.230], dsn=4.0.0, stat=Deferred: Connection timed out with e.mx.mail.yahoo.com.
Jun 2 17:35:48 sajo-laptop sm-mta[9149]: o4VHn3cw003597: to=, ctladdr= (33/33), delay=2+06:46:45, xdelay=00:34:12, mailer=esmtp, pri=3540649, relay=mx2.hotmail.com. [65.54.188.94], dsn=4.0.0, stat=Deferred: Connection timed out with mx2.hotmail.com.
Jun 2 17:39:02 sajo-laptop CRON[9510]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] …
背景:如果您为开发目的设置了本地 apache 服务器,您可能会遇到 sendmail 发送电子邮件需要很长时间(至少一分钟)的问题。如果您试图调试已生成的电子邮件的问题,这将非常令人沮丧。
互联网上有几个论坛帖子讨论了这个问题。但是,对于我有限的知识,没有一个主题足够详细地描述要做什么。以下是对我有用的步骤:
1) 使用以下命令找到您的主机名(以防您忘记了):
:~$ cat /hosts/hostname
myhostname
2)编辑文件/etc/hosts并确保第一行如下:
127.0.0.1 localhost.localdomain localhost myhostname
3)编辑sendmail配置文件(/etc/mail/sendmail.cf在Ubuntu中)并取消注释该行#O HostsFile=/etc/hosts
4) 重新启动计算机。计算机现在应该启动得更快,并且 mail() 函数应该几乎立即返回。但是,除非您按照第 5 步操作,否则实际上不会发送电子邮件。
5) 无论何时使用邮件功能,您都必须重新使用 sendmail '-f' 选项。例如:
mail('recipient@somewhere.com', 'the subject', 'the message', null, '-fsender@somewhere.com');
我对我的服务器故障者的问题是:
可以进行哪些进一步更改,以便我不必使用 sendmail -f 选项?虽然添加 -f 选项不是很难,但是当你的 CMS(比如 Drupal)在发送邮件时没有使用 -f 选项时就会出现问题。你需要破解一个核心模块来添加这个选项。
是的,我有
127.0.0.1 localhost myhost.mydomain.eu myhost.domain2.eu localhost.localdomain
127.0.1.1 myhost
Run Code Online (Sandbox Code Playgroud)
在主机文件中。怎么了?Sendmail 开始将此错误记录到日志中。
5 月 9 日 19:08:54 myhost sm-mta[17103]:无法限定我自己的域名 (myhost) -- 使用短名称
这个配置好吗?
我遇到了 NAGIOS 系统向流行的电子邮件到短信服务发送电子邮件的问题。电子邮件到短信服务接收带有文本的电子邮件Subject:,并将它们发送到To:字段中编码的手机号码。到现在为止还挺好。可悲的是,sendmail的(和前后缀)似乎将无偿CRLF到(不一定长)Subject:线,而这造成我的短信,以在CRLF被截断,当且仅当该Subject:行包含一个或多个冒号过去没来由CRLF。
我相信这些消息是正确创建的,但可以肯定的是,这里是我为自己创建了一个完全 noddy 测试消息,Subject:一行很长:
echo "foo" | mail -s "1234567 101234567 201234567 301234567 401234567 501234567 601234567 701234567 801234567 90123456789" reaper@teaparty.net
Run Code Online (Sandbox Code Playgroud)
注意这一Subject:行没有多余的冒号;我在这里所做的只是显示在电线上插入了一个额外的 CRLF。这是结果sudo ngrep -x port 25:
44 61 74 65 3a 20 46 72 69 2c 20 33 31 20 4d 61 Date: Fri, 31 Ma
79 20 32 30 31 33 20 31 30 3a 34 33 3a 35 …
在一些服务器更改之后,我们的 PHP 配置被破坏了,这导致客户端的大型邮件列表在大约 4,000 个或更多地址中部分超时。我们希望尽可能避免发送重复邮件,并且我们有原始邮件列表。
邮件是使用 PHP 的mail()函数发送的,该函数使用sendmail,表示它正在使用Exim. 我见过命令:
sendmail -bp
Run Code Online (Sandbox Code Playgroud)
这给了我一个显示已发送的邮件列表。这个列表不是很大,而且可能是准确的(意味着脚本在只发送了一百封左右的电子邮件后就超时了)
是sendmail -bp获得此列表的最佳方式吗?
编辑:我mail.log在/var/log/mail.log或 via 中找不到任何文件locate mail.log,但 WHM 似乎对此有一些信息。
在 Ubuntu 服务器上设置 Postfix 和 Apache/PHP。邮件现在可以使用正确的域名发送出去,但本地部分显示名称始终为“www-data”,因为我假设 Postfix 默认使用用户名。
在 php.ini 文件中,我能够更改为sendmail_path,sendmail_path = "/usr/sbin/sendmail -t -i -f support@example.com"但电子邮件显示名称仍显示为 www-data 。我尝试以几种不同的方式指定显示名称,但这被忽略了,邮件仍然作为 www-data 发出。
我希望能够做的是默认情况下,将任何缺少 from、return-path 等的邮件作为 发送出去"Example Support" <support@example.com>,但我不确定这是否可能。
我试图了解service --status-allUbuntu 13.10 上命令的输出,因为手册页没有解释它。例如:
[ + ] rsyslog
[ - ] sendmail
[ ? ] sendsigs
[ + ] setvtrgb
[ - ] ssh
Run Code Online (Sandbox Code Playgroud)
什么+,-,?是什么意思?我想不通。我之前安装过 sendmail,但我停止并使用apt-get remove sendmail*. 我想这并没有摆脱 init 脚本/etc/init.d/,这就是它在输出中显示它的原因,但至少它是一个-,所以我认为它没有运行。然后,SSH。我实际上是通过 SSH 连接到服务器,所以我假设 SSH 服务应该正在运行,但-无论如何它都在那里。然后是神秘的?. 有人请阐明这实际上意味着什么。
运行托管大约 10 个 Wordpress 网站的 Ubuntu 服务器
在我的身份验证日志中找到它是否正常?
Oct 26 08:40:01 andre CRON[4737]: pam_unix(cron:session): session opened for user smmsp by (uid=0)
Oct 26 08:40:01 andre CRON[4737]: pam_unix(cron:session): session closed for user smmsp
Oct 26 09:00:01 andre CRON[6874]: pam_unix(cron:session): session opened for user smmsp by (uid=0)
Oct 26 09:00:01 andre CRON[6874]: pam_unix(cron:session): session closed for user smmsp
Run Code Online (Sandbox Code Playgroud)
我不确定为什么像这样为 sendmail 打开和关闭会话。
我看到这是系统日志:
Oct 27 08:20:01 andre CRON[7664]: (smmsp) CMD (test -x /etc/init.d/sendmail && /usr/share/sendmail/sendmail cron-msp)
Oct 27 08:20:01 andre postfix/pickup[1272]: 1F29212C7FF: uid=107 …Run Code Online (Sandbox Code Playgroud) 我运行一个远程管理的简单服务器,我需要它能够在每次发生错误时向我的个人电子邮件地址发送电子邮件。使用 Ubuntu 上的默认设置,sendmail 只是在 /var/spool/mail 中累积要在本地发送的电子邮件,但我需要它转到外部电子邮件。
我发现的教程都在谈论将 postfix/sendmail 设置为成熟的电子邮件服务器,但我只需要传出,无需外部登录。是否有捷径可寻?
sendmail ×10
email ×6
linux ×4
php ×3
postfix ×2
smtp ×2
apache-2.2 ×1
centos ×1
email-server ×1
exim ×1
queue ×1
service ×1
ssh ×1
ubuntu ×1
ubuntu-12.04 ×1
ubuntu-12.10 ×1