【问题标题】:How can I send an email through the UNIX mailx command?如何通过 UNIX mailx 命令发送电子邮件?
【发布时间】:2011-01-17 22:59:48
【问题描述】:

如何通过 UNIX mailx 命令发送电子邮件?

【问题讨论】:

    标签: unix email mailx


    【解决方案1】:

    一个例子

    $ echo "something" | mailx -s "subject" recipient@somewhere.com
    

    发送附件

    $ uuencode file file | mailx -s "subject" recipient@somewhere.com
    

    并发送附件并编写邮件正文

    $ (echo "something\n" ; uuencode file file) | mailx -s "subject" recipient@somewhere.com
    

    【讨论】:

    • 我试过了,但没有任何反应。它既没有给出错误消息,也没有将邮件发送到 myname@gmail.com。是否需要任何服务器配置?
    • 不需要任何配置。检查您的互联网连接。我通过电缆直接连接到互联网,我不使用代理或任何东西,所以它可以在我这边工作。
    • 您还应该检查收件箱中的error messages。 IE。运行mail
    • 但是请注意,uuencode 是过去千年的遗留技术,它不会产生我们今天所说的“附件”。它基本上在消息文本的末尾放置了一段机器可读的混乱。在这个时代,一个正确识别 MIME 的邮件程序会更好地为您服务。不幸的是,没有普遍支持的 mailx 替换 MIME 功能,但如果您有 mutt,那可能是阻力最小的路径。
    • @user269484 Gmail 不接受来自未经授权的 IP 地址的电子邮件。阅读support.google.com/mail/answer/10336
    【解决方案2】:

    你来了:

    echo "Body" | mailx -r "FROM_EMAIL" -s "SUBJECT" "To_EMAIL"
    

    PS。正文和主题应放在双引号内。 删除 FROM_EMAILTo_EMAIL 中的引号,同时替换电子邮件地址。

    【讨论】:

    • 在 Mac 上,如果你使用 -r mailx,你会收到来自 mailx 命令的错误:非法选项 --r 用法:mailx [-EiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [-F] to-addr ... mailx [-EHiInNv] [-F] -f [名称] mailx [-EHiInNv] [-F] [-u 用户] mailx -e [- f 名称] mailx -H
    • 你可以做 -S from=a@b.com
    【解决方案3】:
    mailx -s "subjec_of_mail" abc@domail.com < file_name
    

    通过mailx 实用程序,我们可以将文件从unix 发送到mail server。 在上面的代码中我们可以看到 第一个参数是-s "subject of mail" 第二个参数是mail ID,最后一个参数是我们要附加的文件名

    【讨论】:

    • 这里不附加文件,而是将文件内容放入正文中
    • mailx:无法发送消息:进程以非零状态退出
    【解决方案4】:
    mail [-s subject] [-c ccaddress] [-b bccaddress] toaddress
    

    -c 和 -b 是可选的。

    -s : 指定主题;如果主题包含空格,请使用引号。

    -c : 将抄送副本发送到以逗号分隔的用户列表。

    -b : 将密件抄送至用户列表,以逗号分隔。

    希望我的回答能澄清你的疑问。

    【讨论】:

      【解决方案5】:

      使用 MUTT 命令更快

      echo "Body Of the Email"  | mutt -a "File_Attachment.csv" -s "Daily Report for $(date)"  -c cc_mail@g.com to_mail@g.com -y
      
      1. -c 电子邮件抄送列表
      2. -s 主题列表
      3. -y 发送邮件

      【讨论】:

      • 我必须用“--”分隔附件才能使其像这样工作:echo "" | mutt -s "test" -a ./file -- name@mail.com -y
      【解决方案6】:

      来自手册页:

      发送邮件

      要向一个或多个人发送消息,可以调用 mailx 参数是 将向其发送邮件的人。 然后预计用户输入 他的信息,随后 通过在行首的“control-D”。

      换句话说,mailx 从标准输入读取要发送的内容,并且可以像正常一样重定向。例如:

      ls -l $HOME | mailx -s "The content of my home directory" someone@email.adr
      

      【讨论】:

        【解决方案7】:
        echo "Sending emails ..."
        NOW=$(date +"%F %H:%M")
        echo $NOW  " Running service" >> open_files.log
        header=`echo "Service Restarting: " $NOW`
        
        
        mail -s "$header" abc.xyz@google.com,   \
                      cde.mno@yahoo.com, \ < open_files.log
        

        【讨论】:

          【解决方案8】:

          自定义 FROM 地址

          MESSAGE="SOME MESSAGE"
          SUBJECT="SOME SUBJECT"
          TOADDR="u@u.com"
          FROM="DONOTREPLY"
          
          echo $MESSAGE | mail  -s "$SUBJECT" $TOADDR  -- -f $FROM
          

          【讨论】:

          • an except from man mail: -f [file] 读入用户mbox(或指定文件)的内容进行处理;当 mailx 退出时,它会将未删除的消息写回该文件。字符串文件的处理方式如下面的文件夹命令所述。
          • 这取决于您使用的版本。有多个不兼容的竞争 mailmailx 命令具有不同的选项。
          【解决方案9】:

          这是一个多功能的功能来处理带有多个附件的邮件发送:

          enviaremail() {
          values=$(echo "$@" | tr -d '\n')
          listargs=()
          listargs+=($values)
          heirloom-mailx $( attachment=""
          for (( a = 5; a < ${#listargs[@]}; a++ )); do
          attachment=$(echo "-a ${listargs[a]} ")
          echo "${attachment}"
          done) -v -s "${titulo}" \
          -S smtp-use-starttls \
          -S ssl-verify=ignore \
          -S smtp-auth=login \
          -S smtp=smtp://$1 \
          -S from="${2}" \
          -S smtp-auth-user=$3 \
          -S smtp-auth-password=$4 \
          -S ssl-verify=ignore \
          $5 < ${cuerpo}
          }
          

          函数调用: enviaremail "smtp.mailserver:port" "from_address" "authuser" "'pass'" "destination" "用空格分隔的附件列表"

          注意:去掉调用中的双引号

          另外请记住在使用该功能之前在外部定义电子邮件的$titulo(主题)和$cuerpo(正文)

          【讨论】:

            【解决方案10】:

            如果您要发送两个以上的人或DL:

            echo "Message Body" | mailx -s "Message Title" -r sender@someone.com receiver1@someone.com,receiver_dl@.com
            

            这里:

            • -s = 主题或邮件标题
            • -r = 发件人邮件或 DL

            【讨论】:

            • 你能解释一下为什么使用echo来传递消息体吗?如果我忽略它并从 MailX 执行,光标会闪烁,就像在等待输入一样。
            猜你喜欢
            • 2016-02-21
            • 2014-05-27
            • 2023-03-25
            • 1970-01-01
            • 2010-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多