Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 463|回复: 0

[默认分类] L05-Linux部署msmtp+mutt发送邮件

  [复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-3-28 10:32:58 | 显示全部楼层 |阅读模式
    一、前言
    首先,得明白发送一封邮件的流程,下面一段理论摘抄自廖雪峰的官网网站https://www.liaoxuefeng.com/article/00137387674890099a71c0400504765b89a5fac65728976000
    """
    我们通常使用Email都很容易,但是Internet的邮件系统是通过几个复杂的部分连接而成的,对于最终用户而言,我们熟悉的Outlook,Foxmail等都是用来收信和发信的,称之为MUA:Mail User Agent,邮件用户代理。
    MUA并非直接将邮件发送至收件人手中,而是通过MTA:Mail Transfer Agent,邮件传输代理代为传递,Sendmail和Postfix就是扮演MTA的角色。
    一封邮件从MUA发出后,可能通过一个或多个MTA传递,最终到达MDA:Mail Delivery Agent,邮件投递代理,邮件到达MDA后,就存放在某个文件或特殊的数据库里,我们将这个长期保存邮件的地方称之为邮箱。
    一旦邮件到达邮箱,就原地不动了,等用户再通过MUA将其取走,就是用Outlook,Foxmail等软件收信的过程。
    所以一封邮件的流程是:
    发件人:MUA --发送--> MTA -> 若干个MTA... -> MTA -> MDA <--收取-- MUA:收件人
    MUA到MTA,以及MTA到MTA之间使用的协议就是SMTP协议,而收邮件时,MUA到MDA之间使用的协议最常用的是POP3或IMAP。
    需要注意的是,专业邮件服务商都有大量的机器来为用户服务,所以通常MTA和MDA并不是同一台服务器,因此,在Outlook等软件里,我们需要分别填写SMTP发送服务器的地址和POP3接收服务器的地址。
    """
      
    同样对发邮件流程介绍的很清楚的还有这篇博文:https://www.cnblogs.com/DLHe/p/8457393.HTML
    由上面可知,通常我们所熟悉的Outlook、Foxmail等是邮件客户端,提供了MUA的功能;而一些Email服务提供商,如网易、QQ等,则提供了MTA的功能。
    必须弄清楚的一点是,本次部署的msmtp+mutt其实是类似于Foxmail那样的MUA邮件客户端,只不过它是在linux上运行的。而如果在linux上部署的是sendmail或者postfix,那才是邮件服务器,起到的是MTA的功能。
      
    接下来是实施步骤。
    实测成功的部署环境:RHEL6.5和CentOS6.5,当然了,机器得能联网。
      
    二、安装msmtp
    msmtp是一个SMTP客户端,可将邮件发送至SMTP服务端,官网地址为http://msmtp.sourceforge.net/index.html  。
    1.下载msmtp文件
    cd /usr/local/src
    wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download
      
    2.解压文件
    tar jxvf msmtp-1.4.32.tar.bz2
      
    3.进入到解压的文件内,然后就是典型的源码安装的3个步骤./configure,make和make install
    3.1执行./configure,生成 Makefile,为下一步的编译做准备,--prefix=后面接的是想要将msmtp安装到的路径,跟当前mstmp源码所在目录无关
    cd msmtp-1.4.32
    ./configure --prefix=/usr/local/msmtp


    3.2 make && make install,编译并安装,这两步也可以分开执行


      
    4. 在安装目录/usr/local/msmtp/下新建etc目录,并在etc目录下创建msmtp文件,该文件用于配置邮件发送的一些基本信息。
    mkdir –p /usr/local/msmtp/etc
    vim /usr/local/msmtp/etc/msmtprc
    #添加如下内容:
    account default  
    host smtp.163.com                     
    port 25
    from xxx@163.com      //按照实际情况填写真实的163邮箱
    auth login
    tls off
    user  xxx          //邮箱用户名,是xxx而不是xxx@163.com              
    password xxx     //需要注意的是这里的密码有可能是授权码,比如163邮箱的话这里就必须填授权码,如下图           
    logfile /var/log/mmlog

      
    注:正如前面所说的,msmtp+mutt的组合跟Foxmail一样,是邮件客户端。我们知道,Windows下利用Foxmail发送邮件的话,当然首先需要用你的某个账号登录上Foxmail了,然后才能在该客户端下新建邮件发送。那么这一步该文件配置的作用,我的理解就是在linux下用你的某个账号登录msmtp客户端。这里我用的是163网易邮箱,若是想用QQ邮箱,则需要另行修改。
      
    测试时的配置如下:

    (注:截图当中的目录有点混乱,是实际生产环境中部署的安装目录,不是上面执行./configure命令时--prefix参数指定的/usr/local/msmtp,不过没关系,只要记住,该文件实际是在prefix参数指定的安装目录下的!)
      
    5. 给日志文件赋权限:
    chmod 777 /var/log/mmlog
      
    6.给配置文件msmtprc文件赋权限,因为该文件中有邮箱的明文密码,所以要设置成非可读的。
    chmod 600 msmtprc
      
    7.此时可以 /usr/bin/目录做一个关于/usr/local/msmtp/bin/msmtp的软连接,这样在服务器上任意位置都可以直接敲msmtp命令来执行msmtp
    ln -s /usr/local/msmtp/bin/msmtp /usr/bin/msmtp
      
    8.测试msmtp(同样的,邮箱地址视实际情况而定,不过必须得跟上面的/usr/local/msmtp/etc/msmtprc配置文件中的邮箱相同
    (1)若没做第7步的软连接,则是:
    /usr/local/msmtp/bin/msmtp  xxx@163.com hello,test  ctrl d
    (2)若做了软连接,那么测试的命令可以为:
    msmtp  xxx@163.com hello,test  ctrl d
    # 查看日志有无成功 cat /usr/local/msmtp/msmtp.log
    # 查看163邮箱,看看信收到没有。
    如下图,这时候能收到邮件,但是邮件是没有内容的,这是没有问题的。
    至此,msmtp安装已经完成了。

      
      
    三、安装Mutt
    Mutt是一个Email客户端,它不能直接发送邮件,更多的是承担对email的管理功能,与msmtp可搭配使用。官网地址为http://www.mutt.org/  
    若想了解更多Mutt与msmtp的搭配使用,可查看如下地址:http://msmtp.sourceforge.net/doc/msmtp.html#Using-msmtp-with-Mutt  
      
    1.Mutt安装方法一:yum方式安装配置mutt(实测成功)
    1.1yum install -y mutt
      
    1.2编辑/etc/Muttrc文件 注,/etc目录下应该已经存在Muttrc文件,只是在文件末尾追加下面内容)
    vim /etc/Muttrc
    #输入如下内容:
    set sendmail="/usr/bin/msmtp"     #注:之所以能这么写是因为在配置msmtp时做了软连接 #ln -s  /usr/local/msmtp/bin/msmtp /usr/bin/msmtp
    set use_from=yes
    set realname="YOURNAME"         #realname可以任意设置,这样当你发邮件给别人的时候,收件人看到发件人的title就是你这里设置的,具体可以看下面的设置和最后图片展示的结果
    set from=user@163.comset  
    envelope_from=yes
    auto_view text/html
    set charset="utf-8"
    set send_charset="utf-8"
    set locale ="zh_CN.UTF-8"
    set content_type = "text/html\;charset=utf-8"
      
    set rfc2047_parameters=yes
    实测时的配置如下:

    但是做发送邮件测试时粗错了,确实能发邮件,但是执行完发送命令之后报错:source: errors in /etc/Muttrc,因此改成下面
    set sendmail="/usr/bin/msmtp"
    set use_from=yes
    set realname="Zabbix Server"
    set editor="vim"
    set from=182xxxx7782@163.com

      
    1.3 配置完毕,测试:
    (1)简单测试(发给自己):echo  "TEST测试test"|mutt -s "DT_ZABBIX_SERVER_TEST"  182xxxx7782@163.com

      
    (2)添加附件测试(发给自己):echo  "内容:TEST测试test"|mutt -s "主题:DT_ZABBIX_SERVER_TEST" -a /data/suxy_remark.txt 182xxxx7782@163.com
    发送错误,报错:Can"t stat 182xxxx7782@163.com: No such file or directory
    如下图所示,这是因为182xxxx7782@163.com在-a命令后面,所以mutt把182xxxx7782@163.com也当成附件了,因此将-a命令调换个位置,放到末尾(事实上该命令的用法也确实要求-a参数放到命令的最末尾):
    echo  "内容:TEST测试test"|mutt   -s "主题:DT_ZABBIX_SERVER_TEST"    182xxxx7782@163.com -a /data/suxy_remark.txt
    发送成功!
    事实上还可以使用如下命令,即mutt后面先写邮箱,将-s、-a等参数都放到后面去
    echo  "内容:TEST测试test"|mutt 182xxxx7782@163.com -s "主题:DT_ZABBIX_SERVER_TEST" -a /data/readme.txt

      
    (3)当然也可以发送邮件给其他的类型的邮箱,比如qq邮箱,公司邮箱等
    echo  "内容:TEST测试test"|mutt -s "主题:DT_ZABBIX_SERVER_TEST"  98xxxx3649@qq.com -a /usr/local/suxy_remark.txt

      
      
    2.Mutt安装方法二:源码方式安装Mutt(测试时没有成功,不过应该是测试做法不对。。)
    cd /usr/local/src
    wget ftp://ftp.mutt.org/pub/mutt/mutt-1.5.24.tar.gz
    tar xvf mutt-1.5.24.tar.gz
    cd mutt-1.5.24
    ./configure --prefix=/usr/local/mutt


      
    make && makeinstall

      
      
    配置Mutt
    vim /usr/local/mutt/etc/Muttrc
    #在最后添加如下几行:
    set sendmail="/usr/local/msmtp/bin/msmtp"
    set use_from=yes
    set realname="xxx"
    set from=xxx@163.com
    set envelope_from=yes
      
    测试Mutt
    echo "hello,world"|/usr/local/mutt/bin/mutt –s "test mail" xxx@163.com#上述语句将发送一封标题为"test mail",内容为"hello,world",收件人为xxx@163.com的邮件,可检查该邮箱能否收到邮件
    实际测试时使用的命令:
    echo "Test from Zabbix Server"|/usr/local/mutt/bin/mutt –s "zabbixTest" 182xxxx7782@163.com
    但是若是使用上面的命令发送的话则会给-s@zabbix.localhost和zabbixtest@zabbix.localhost和182xxxx7782@163.com都各发一封邮件,改为如下的命令则会只给182发送,但是没有主题
    echo "Test from Zabbix Server"|/usr/local/mutt/bin/mutt 182xxxx7782@163.com
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-21 12:34 , Processed in 0.403874 second(s), 47 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表