• linux mail 发送邮件附件


    在很多场景中我们会使用Shell命令来发送邮件,而且我们还可能在邮件里面添加附件,本文将介绍使用Shell命令发送带附件邮件的几种方式,希望对大家有所帮助。

    文章目录

    使用mail命令

    mail命令是mailutils(On Debian)或mailx(On RedHat)包中的一部分,我们可以使用他在命令行里面发送消息。
    如果你的系统没有安装mail命令,可以使用下面的方式安装:

    $ sudo apt-get install mailutils (On Debian)
    # yum install mailx (On RedHat or CentOS)

    现在我们来使用mail命令来发送带附件的邮件,如下:

    echo "这里输入你邮件内容" | mail -s "邮件标题" -a file.txt hadoop@iteblog.com

    在上面的命令中,-s 参数用于指定消息主题;-a 参数指定需要发送的附件路径,貌似这个不能发送多个附件。
    当然,我们可以将邮件的内容存到一个文件中,比如下面我们把邮件的内容存储到message.txt文件中,然后发送:

    mail -s "邮件标题" -a file.txt hadoop@iteblog.com < message.txt
    我们在发送附件的时候出现下面的错误:
    send-mail: fatal: iteblog(40010): message file too big

    从上面的错误信息可以看出,我们发送的附件太大了,我们可以通过以下两种方法来加大附件大小的限制:
    第一种:

    [root@iteblog.com ~]$ postconf message_size_limit
    message_size_limit = 51200000
    echo "message_size_limit = 102400000" >> /etc/postfix/main.cf && service postfix reload
    Reloading Postfix configuration...done.

    第二种:

    [root@iteblog.com ~]$ postconf -e message_size_limit=302400000
    [root@iteblog.com ~]$ service postfix restart
    Shutting down postfix:                                     [  OK  ]
    Starting postfix:                                          [  OK  ]
    [root@iteblog.com ~]$ postconf message_size_limit
    message_size_limit = 302400000
    [root@iteblog.com ~]$

    两种方法都可以设置。

    使用mutt命令

    mutt是一个流行轻量级的电子邮件客户端命令,我们同样可以使用它发送带附件的邮件,如果你的电脑没有安装这个命令,请使用下面命令安装:

    $ sudo apt-get install mutt
    # yum install mutt

    现在我们可以使用mutt命令发送带附件的邮件了:

    echo "这里输入你邮件内容" | mutt -s "邮件标题"  hadoop@iteblog.com -a file.txt

    从上面可以看出,mutt 的使用和 mail 命令很类似,更多关于它的使用参数可以直接 man mutt 查看。

    使用mailx命令

    mailx命令看起来和mutt命令很类似,如果你电脑没安装这个命令,可以使用下面方法来安装:

    $ sudo apt-get install mailutils
    # yum install mailx

    然后可以使用下面命令发送带附件的邮件:

    echo "这里输入你邮件内容" | mailx -s "邮件标题" -a file.txt hadoop@iteblog.com

    使用mpack命令

    首先使用下面命令安装好这个命令:

    $ sudo apt-get install mpack
    # yum install mpack

    然后可以使用下面命令发送带附件的邮件:

    $ mpack -s "邮件标题" file hadoop@iteblog.com

    使用telnet命令发送邮件

    我们还可以使用telnet来发送邮件,使用起来稍微比直接用 mail 或者 mutt 命令复杂,使用如下:

    [root@iteblog.com ~]$ telnet localhost smtp
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 www.iteblog.com ESMTP Postfix
    HELO iteblog.com
    250 www.iteblog.com
    mail from: hadoop@iteblog.com
    250 2.1.0 Ok
    rcpt to: hadoop@iteblog.com
    250 2.1.5 Ok
    data
    354 End data with <cr><lf>.<cr><lf>
    Subject: 这里输入邮件标题
     
    这里输入邮件内容
    这是内容
    .
    250 2.0.0 Ok: queued as C99B626D
    quit
    221 2.0.0 Bye
    Connection closed by foreign host.

    上面代码加深背景色的就是我们要输入的,我们需要根据要求输入发件人和收件人的Email等信息,然后就可以发送邮件,至于这个如何发送附件我没有去研究。。

    使用sendmail命令发送邮件

    我们还可以根据Email的规范自己构建邮件,如下:

    export MAILFROM="hadoop@iteblog.com"
    export MAILTO="hadoop@iteblog.com"
    export SUBJECT="Your Invoice"
    export BODY="/tmp/t.html"
    export ATTACH_PDF="/tmp/iteblog.pdf"
    export ATTACH_CSV="/tmp/test.csv"
     
    pdf_file=$( basename "$ATTACH_PDF" )
    csv_file=$( basename "$ATTACH_CSV" )
     
    {
            echo "From: $MAILFROM"
            echo "To: $MAILTO"
            echo "MIME-Version: 1.0"
            echo "Subject: $SUBJECT"
            echo "Content-Type: multipart/mixed; boundary="FILEBOUNDARY""
     
            echo "--FILEBOUNDARY"
            echo "Content-Type: multipart/alternative; boundary="MSGBOUNDARY""
     
            echo "--MSGBOUNDARY"
            echo "Content-Type: text/html; charset=iso-8859-1"
            echo "Content-Disposition: inline"
            echo ""
            cat "$BODY"
            echo "--MSGBOUNDARY--"
     
            echo "--FILEBOUNDARY"
            echo "Content-Type: application/pdf"
            echo "Content-Disposition: inline; filename="${pdf_file}""
            echo "Content-Transfer-Encoding: base64"
            base64 $ATTACH_PDF
     
            echo "--FILEBOUNDARY"
            echo "Content-Type: text/csv"
            echo "Content-Disposition: inline; filename="${csv_file}""
            echo "Content-Transfer-Encoding: base64"
            base64 $ATTACH_CSV
            echo "--FILEBOUNDARY--"
    } | /usr/sbin/sendmail -t

    运行上面的代码会生成以下的信息:

    From: hadoop@iteblog.com
    To: hadoop@iteblog.com
    MIME-Version: 1.0
    Subject: Your Invoice
    Content-Type: multipart/mixed; boundary="FILEBOUNDARY"
    --FILEBOUNDARY
    Content-Type: multipart/alternative; boundary="MSGBOUNDARY"
    --MSGBOUNDARY
    Content-Type: text/html; charset=iso-8859-1
    Content-Disposition: inline
     
    <html>
        <body>
        This is content.
        </body>
    </html>
    --MSGBOUNDARY--
    --FILEBOUNDARY
    Content-Type: application/pdf
    Content-Disposition: inline; filename="iteblog.pdf"
    Content-Transfer-Encoding: base64
    JVBERi0xLjYNJeLjz9MNCjE1IDAgb2JqDTw8L0xpbmVhcml6ZWQgMS9MIDk1MTgvTyAxNy9FIDQ4
    ODcvTiAxL1QgOTIxNS9IIFsgNDU3IDE0OF0+Pg1lbmRvYmoNICAgICAgICAgICAgICAgICAgICAg
    OTVCRkY0RkU5RkRFNDk5NEM2MTUzRTMyMzk3RTIyPjxBQkY2QTYzNkY4NDhBRjQzOTA3NERFMzdG
    QkZBQTQ1Qj5dL0luZm8gMTQgMCBSL0xlbmd0aCA0OC9Sb290IDE2IDAgUi9TaXplIDE1L1R5cGUv
    WFJlZi9XWzEgMiAxXT4+c3RyZWFtDQpo3mJiAAImRmFxBiYGhhYgwfcKSDAtBhKMN4ASdxhBEkwg
    goERH8H4CyDAANfsBSUNCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQoxMTYNCiUlRU9GDQo=
    --FILEBOUNDARY
    Content-Type: text/csv
    Content-Disposition: inline; filename="test.csv"
    Content-Transfer-Encoding: base64
    MSwyCg==
    --FILEBOUNDARY--

    然后就可以通过sendmail命令发送出去。

  • 相关阅读:
    Use MusicBrainz in iOS(三)查询专辑的完整信息
    内存寻址一(分段)
    POJ 1018 Communication System (动态规划)
    利用Eclipse中的Maven构建Web项目(二)
    cocos2d-x2.2.3学习
    (排序算法整理)NEFU 30/32
    POJ 1066 昂贵的聘礼
    2014年腾讯暑假实习软件开发笔试题汇总
    Android学习之——自己搭建Http框架(1)
    C 语言之预处理 ---------文件包括
  • 原文地址:https://www.cnblogs.com/youngerger/p/9088581.html
Copyright © 2020-2023  润新知