zoukankan      html  css  js  c++  java
  • Linux使用mailx通过第三方SMTP发送邮件,带附件操作

    https://blog.csdn.net/FJDJFKDJFKDJFKD/article/details/87867969

    验证通过

    Ubuntu 18.04 上已经移除了 heirloom-mailx 这个安装包,有新需求的可参看这篇文章 Ubuntu 18.04 中使用 Postfix 发送邮件。

    mail 默认是调用本机 MTA 发送邮件的,这意味着需要在本机上安装 sendmail 或 postfix 等 MTA,配置比较麻烦,而且会带来不必要的资源占用。通过修改配置文件,可以达到不使用 sendmail 而用外部 smtp 服务器发送邮件的目的。

    安装mailx

    $ sudo apt-get install heirloom-mailx

    配置mailx

    如果你不确定你的系统中的 mail/mailx 的配置文件的文件名,可以在终端执行下面的命令来查看:

    strings `which mail` | grep '.rc'
    
    • 1

    我的系统版本是Ubuntu 16.04
    /etc/s-nail.rc中加入配置文本

    set from=User@163.com
    set smtp=smtp.163.com
    set smtp-auth-user=User
    set smtp-auth-password=password
    set smtp-auth=login
    
    ---说明
    from:对方收到邮件时显示的发件人
    smtp:指定第三方发邮件的smtp服务器地址
    set smtp-auth-user:第三方发邮件的用户名
    set smtp-auth-password:用户名对应的密码,有些邮箱填的是授权码
    smtp-auth:SMTP的认证方式,默认是login,也可以改成CRAM-MD5或PLAIN方式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    测试

    关闭系统的 sendmail 服务,如果开启了的话。
    mail [option] [-a file] [-s subject] [-c c_adress] [-b b_adress] to-address ...

    常用命令:
    n:不读入设置文件(本系统中是/etc/s-nail.rc)(这个文件允许用户使用外部邮件传输代理而不是使用系统自带的sendmail发送邮件)。
    s:设置邮件的主题信息。
    c:使用一个抄送列表。
    b:使用一个密送列表。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    无邮件正文

    mail -s "主题" 收件地址
    可以把当前shell当成编辑器来用,编辑完内容后按Ctrl-D结束。

    有邮件正文

    文件内容发送
    mail -s "主题" 收件地址 < 文件路径文件名

    • mail -s "test" xxx@xxx.com < ./xxx/xxx.txt
    • cat 邮件正文.txt | mail -s 邮件主题 xxx@xxx.com

    单内容发送

    • echo "邮件正文内容" | mail -s "邮件主题" xxx@xxx.com
    带附件

    注意-a的位置放置有讲究。
    mail -a 附件 -s "主题" 收件地址 < 文件(邮件正文.txt)

    • mail -a /data/xxx.tar.gz -s "Linux mail test" xxx@xxx.com < ./xxx/xxx.txt

    对于担心邮件内容被非8-bit clean的机器污染,可以使用uuencode进行binary-to-text的转换进行发送。
    首先安装$ sudo apt-get install sharutils

    参数第一个 attachment 是需要编码的文件名,第二个 attachment 是解码时得到的文件名。
    uuencode attachment attachment > attachment_uu 
    mail -a attachment_uu -s "Linux mail attachment" xxx@xxx.com < ./xxx/xxx.txt
    
    • 1
    • 2
    • 3

    接收方接收后使用
    uudecode attachment_uu即可解压得到文件名为 attachment 的文件 (编码时的第二个参数)。

    uuencode 可以使用 -m 选项选择base64的编码方式,对具体原理感兴趣的请自行查阅。

    在 Winows 中,用 Outlook、Foxmail 等客户端能自动识别经过 uuencode 编码的附件。如果附件被收取到 Linux/Unix 等系统下,如果 Linux 下的 MUA 或者客户端不识别,可以手工处理邮件提取相应的部分,用 uudecode 解码即可。

    查看邮件

    mail

    常用命令(邮件命令提示符中常用命令)
    h: 查看邮件标题。
    d: 使用该命令加序号可以删除指定的邮件。
    f: 查看当前光标指向的邮件。
    n: 跳转到指定序号的邮件。
    w: 保存邮件信息到文件,保存附件到单独的文件。
    q: 退出并将已阅读的邮件存入文件~/mbox中。
    x: 退出不保持之前的操作,如删除邮件等。
    !: 允许使用shell命令。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    sendmail

    mailq或者sendmail -bp
    可以查看当前仍在队列里待发送的邮件,如何删除该队列呢?
    删除下面文件夹下的文件即可
    /var/spool/postfix/deferred/
    再次运行检查队列得到: Mail queue is empty
    /var/log/syslog文件中也会保存发送失败的信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    sendmail安装
    $ sudo apt-get install sendmail 
    $ sudo apt-get install sendmail-cf 
    
    其他附件:
    spamassassin, 提供邮件过滤
    
    • 1
    • 2
    • 3
    • 4
    • 5
    sendmail配置
    根据.mc文件生成配置.cf文件
    m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
    
    • 1
    • 2

    输入ps aux | grep sendmail查看是否安装成功,看到信息sendmail: MTA: accepting connections

    关闭并重启sendmail服务
    
    /etc/init.d/sendmail stop
    ps -ef | grep sendmail | awk '{print $2}' | xargs kill -5 
    /etc/init.d/sendmail start
    
    • 1
    • 2
    • 3
    • 4
    • 5

    邮件内容、附件处理

    sudo apt-get install mpack 用于解析 MIME 类型的信息,使用 munpack 即可用于消息里的附件和内容分离。
    sudo apt-get install procmail 用于 MDA,过滤消息等。
    sudo apt-get install getmail4,并配置好 getmail,抓取 mail。

  • 相关阅读:
    spring框架里面处理中文匹配
    日常问题记录--使用fiddler自动响应jsonp结构的响应
    linux命令--pamp
    每天一个linux命令--nice命令
    阿里RAP+fiddler实现app原生应用的cgi数据mock----- (二)添加mock规则,随机返回4中类型(不同长度)的数据
    父子组件之间传递数据
    redux-API(二)
    redux数据流
    Redux 的基础概念-API
    react-redux要点梳理
  • 原文地址:https://www.cnblogs.com/zhoading/p/13857894.html
Copyright © 2011-2022 走看看