【问题标题】:Mail sending with shell Scipt is not working使用 shell 脚本发送邮件不起作用
【发布时间】:2014-10-13 12:16:02
【问题描述】:

我需要发送一封关于使用 shell 脚本部署应用程序的邮件。 为此,我刚刚创建了一个 shell 脚本并使用

进行了测试
#!/bin/bash

TO_ADDRESS="to.person@domain.com"
FROM_ADDRESS="from.me@domain.com"
SUBJECT="Test mail"
BODY="hai friend, this mail is automated from shell script for Release automation."

echo ${BODY}| mail -s ${SUBJECT} ${TO_ADDRESS} -- -r ${FROM_ADDRESS}

但是在运行这个脚本时,它会打印如下:

You have new mail in /var/spool/mail/jaykay

并且在/var/spool/mail/中创建了一个名为jaykay的文件

  • 为什么会这样?

  • 如何使用 shell 脚本发送邮件?

输出文件看起来像

From jaykay Wed Aug 20 04:08:53 2014
Return-Path: <jaykay>
Received: (from jaykay@localhost)
    by e7021.com (8.14.4/8.14.4/Submit) id s7K98rdu004168;
    Wed, 20 Aug 2014 04:08:53 -0500
From: Jini K Johny <jaykay>
Message-Id: <201408200908.s7K98rdu004168@e7021.com>
Date: Wed, 20 Aug 2014 04:08:53 -0500
To: to.person@domain.com, -r, --, from.me@domain.com
Subject: Test mail
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

hai friend, this mail is automated from shell script for Release automation.

【问题讨论】:

  • 您在${FROM_ADDRESS 的最后一行中缺少}
  • 您设置邮件服务器了吗?例如OpenSmtpdcise.ufl.edu/~bn0/mail_tutorial.html
  • @ÉdouardLopez 这是一个错字,现已更新。感谢您的评论。

标签: shell email sh


【解决方案1】:

您的根本问题是您必须使用正确的引用。这基本上是每天都会在这里提出的问题的重复。

没有引号,$SUBJECT 中的第二个标记被解释为要发送到的地址。

  • 一封电子邮件已提交至mail"Test mail" 中的第二个字)。

  • 地址无法投递,因此您会收到退回邮件。

  • 退回邮件已发送到您的收件箱。

  • 您的 shell 会通知您您的收件箱有一条新消息。

此外,您的mail 版本似乎不理解-- 选项,因此它被视为只是要发送到的另一个地址。 (我想你会收到一条退回邮件。)因为-r 选项也被解释为另一个要发送到的地址,所以你会在邮箱中获得一份外发邮件的副本(如Bcc:)尝试在$FROM_ADDRESS中指定。

当然,修复很简单:

#!/bin/bash

TO_ADDRESS="to.person@domain.com"
FROM_ADDRESS="from.me@domain.com"
SUBJECT="Test mail"
BODY="hai friend, this mail is automated from shell script for Release automation."

echo "${BODY}" | mail -s "${SUBJECT}" "${TO_ADDRESS}"  # -- -r "${FROM_ADDRESS}"

(这里的卷曲实际上并不是必需的,但我保留了它们,因为你的代码中有它们。)

例如this recent answer 提供有关何时以及如何准确报价的指导。

mail 程序实际上是一个相当薄的包装器;你可以这样做;

/usr/lib/sendmail -oi -t -f "$FROM_ADDRESS" <<____HERE
From: My Name <$FROM_ADDRESS>
To: Your Name <$TO_ADDRESS>
Subject: $SUBJECT

$BODY
____HERE

.../usr/lib/sendmail 的路径在许多系统上可能是其他内容。

(对于额外的 k00lness 积分,请添加 X-Mailer: Look, I can put anything I like here!

我在这里猜你的意思是sendmail -f "$FROM_ADDRESS",它设置了信封发件人地址(不是-r,我在任何地方都找不到记录)。

【讨论】:

  • 输出没有变化。 :(
  • /var/spool/mail/jaykay 中有什么内容?我猜您会因为其他原因收到退回邮件或自动回复,并且退回邮件会告诉您原因。
  • 猜测-r 选项是错误的,我找不到任何文档。你的意思是-f
  • 我是这个 shell 脚本的新手。 :(
  • 但是 from 和 to 不同,邮件没有投递。
猜你喜欢
  • 2016-11-22
  • 2022-10-08
  • 2010-12-19
  • 1970-01-01
  • 2011-07-06
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
相关资源
最近更新 更多