监视文件并希望使用`mail`命令发送电子邮件

时间:2017-03-14 17:11:28

标签: bash shell email mailx

我将使用[-s filename]选项监视文件,当该文件获取数据时,使用适当的信息向我发送电子邮件。我搜索了网站并提出了一些选项,但没有点击给我。

我正在尝试执行以下操作来简单地测试“邮件”我也尝试了mailx。用户未收到该电子邮件,并且mailmailx提供的输出完全相同。

最终,我将使用mail或mailx命令编辑原始bash脚本,假设我可以使用它。

这就是我正在做的和输出 命令行在我点击时返回,输入。

感谢您对此的任何意见,我完全感激。

[user@somehost ~]$ echo "TEST" | mail -s subject user@mail.com

[user@somehost ~]$ send-mail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
send-mail: warning: inet_protocols: configuring for IPv4 support only
postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
postdrop: warning: inet_protocols: configuring for IPv4 support only

1 个答案:

答案 0 :(得分:2)

最好将inotifywait用于您之后的活动(可能是CLOSE_WRITE?)。

您需要使用SMTP服务器配置邮件程序,并且可能(希望)使用某些凭据。

我通常使用mailx包中的heirloom-mailx,并使用以下脚本:

#!/bin/false

function send_email {
  # args are: subject [to] [from_name] [from_address]
  #   subject is required
  #   to and from_* are optional, defaults below

  # stdin takes the message body... don't forget

  # this function uses mailx from heirloom-mailx

  local SMTP_SRVR="${YOUR_SERVER}"
  local SMTP_USER="${YOUR_USERNAME}"
  local SMTP_PASS="${YOUR_PASSWORD}"

  local DEFAULT_TO="${YOUR_RECIPIENT}"
  local DEFAULT_FROM_NAME="${YOUR_SENDER_NAME}"
  local DEFAULT_FROM_ADDR="${YOUR_SENDER_EMAIL}"

  if [ $# -lt 1 ]; then
    echo "${FUNCNAME}(): missing subject (arg 1)..." >&2
    return 1
  fi
  local SUBJECT="$1"
  shift

  if [ $# -lt 1 ]; then
    local TO="${DEFAULT_TO}"
  else
    local TO="$1"
    shift
  fi

  if [ $# -lt 1 ]; then
    local FROM="${DEFAULT_FROM_NAME}"
  else
    local FROM="$1"
    shift
  fi

  if [ $# -lt 1 ]; then
    FROM="${FROM} <${DEFAULT_FROM_ADDR}>"
  else
    FROM="${FROM} <$1>"
    shift
  fi

  mailx -s"${SUBJECT}" -r"${FROM}" -Ssmtp="${SMTP_SRVR}" -Ssmtp-auth-user="${SMTP_USER}" -Ssmtp-auth-password="${SMTP_PASS}" "${TO}"
  return $?
}

然后您可以使用以下其他脚本中的上述内容(例如my_send_email.inc):

#!/bin/bash

source my_send_email.inc

echo "Testing" | send_email "${MY_EMAIL}"