首页 > 系统相关 >简单的mail发送邮件里面的更多东西-postfix-exim MTA试验以及linux下使用mail发送邮件的简单实现

简单的mail发送邮件里面的更多东西-postfix-exim MTA试验以及linux下使用mail发送邮件的简单实现

时间:2024-08-22 11:27:58浏览次数:12  
标签:slave postfix exim 发送 usr mail mta 邮件

一、简单的mail发送邮件里面的更多东西-postfix-exim MTA试验

     publish:September 27, 2018 -Thursday mail发送邮件应该是一个常用的东西,但是从简单的东西切入,也许你会有更多的收获。今天再看了看mail发邮件的东西,真的一个很小的知识点但要弄透不下功夫真的是不行的。先了解下面两个东西:

邮件用户代理(MUA,Mail User Agent)
邮件传送代理(MTA,Mail Transport Agent)

    还有一个MDA(邮件分发代理Mail Deliver Agent)但一般我们接触不到吧,接触较多的都是MUA和MTA。所以MDA就不列在上面了。通俗的说MUA就是用户使用的客户端,而MTA则是真正发送邮件的发送进程,MUA编写的邮件最终也交由MTA发送至目标端。在linux里发送邮件我们经常使用的mail和mailx即为负责查看、编写邮件和向MTA发送邮件的MUA。其中mailx是mail的功能加强版。qmail,sendmail,postfix都是常用的负责邮件在网络上传输的MTA,将邮件从一个MTA传送至另一个MTA。

#使用mail发送邮件
[root@123 ~]# mail -s "test mail" [email protected]
-bash: mail: command not found
#直接yum安装mail.可发现其自动安装了mailx版本
[root@123 ~]# yum install mail
...
Running Transaction
  Installing : mailx-12.4-8.el6_6.x86_64                                                                                                 1/1 
  Verifying  : mailx-12.4-8.el6_6.x86_64                                                                                                 1/1 
Installed:
  mailx.x86_64 0:12.4-8.el6_6                                                                                                                
Complete!
[root@123 ~]#  echo 'this is test' | mail -s 'test mail from 214' t.com
You have new mail in /var/spool/mail/root
[root@123 ~]# 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

    上面报了些错,但是这是什么报的错呢?mail吗?如上面所说的,mail只是一个MUA,MUA执行后是去找MTA执行发送的,但MTA这么多种,你服务器安装了哪几种知道吗?现在用的是哪几种知道吗?这也是今天我了解了一下之后知道的一点皮毛知识。mail或者mailx能执行不提示此命令不存在,mail的工作就算完成了,后面报错就看你的MTA用的什么,报的什么错。

        在这里需要了解一个命令:alternatives,当然还有一个update-alternatives,和alternatives是一样的。它的功能就是设置默认打开应用,就像我们的windows系统,我们默认打开音乐.mp3文件用酷狗播放器一样,下次直接双击某个mp3文件就会自动启动酷狗播放器来播放一样。alternatives就是这个功能,alternatives在linux里的存放目录是/etc/alternatives,其实就是一系列的软链接文件。所以要查看当前我们发送邮件用的是哪个mta,可以使用命令:alternatives --display mta。如下:显示用的是link currently points to /usr/sbin/sendmail.postfix。里面有个关键词priority优先级,如果不设置,默认就会使用优先级高的程序。

[root@123 ~]# alternatives
alternatives version 1.3.49.5 - Copyright (C) 2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.

usage: alternatives --install <link> <name> <path> <priority>
                    [--initscript <service>]
                    [--slave <link> <name> <path>]*
       alternatives --remove <name> <path>
       alternatives --auto <name>
       alternatives --config <name>
       alternatives --display <name>
       alternatives --set <name> <path>

common options: --verbose --test --help --usage --version
                --altdir <directory> --admindir <directory>
[root@123 ~]# alternatives --display mta
mta - status is manual.
 link currently points to /usr/sbin/sendmail.postfix
/usr/sbin/sendmail.exim - priority 10
 slave mta-pam: /etc/pam.d/exim
 slave mta-mailq: /usr/bin/mailq.exim
 slave mta-newaliases: /usr/bin/newaliases.exim
 slave mta-rmail: /usr/bin/rmail.exim
 slave mta-rsmtp: /usr/bin/rsmtp.exim
 slave mta-runq: /usr/bin/runq.exim
 slave mta-sendmail: /usr/lib/sendmail.exim
 slave mta-mailqman: /usr/share/man/man8/exim.8.gz
 slave mta-newaliasesman: (null)
 slave mta-aliasesman: (null)
 slave mta-sendmailman: (null)
/usr/sbin/sendmail.postfix - priority 30
 slave mta-pam: /etc/pam.d/smtp.postfix
 slave mta-mailq: /usr/bin/mailq.postfix
 slave mta-newaliases: /usr/bin/newaliases.postfix
 slave mta-rmail: /usr/bin/rmail.postfix
 slave mta-rsmtp: (null)
 slave mta-runq: (null)
 slave mta-sendmail: /usr/lib/sendmail.postfix
 slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
 slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
Current `best' version is /usr/sbin/sendmail.postfix.

    知道了我们用的MTA是postfix,现在再回到上面发邮件时的报错,这个warning报错没什么大问题,提示IPv6不支持,只支持IPV4,应该是服务器本身没有支持IPV6。可以通过修改postfix的配置文件:/etc/postfix/main.cf,大约在119行,将all改成ipv4,如下:

118 # Enable IPv4, and IPv6 if supported
119 inet_protocols = ipv4

        注意:ipv4这个要小写,我看上面的提示值里是大写,于是写成大写,但结题是报错。同时vim下大写的IPv4和小写的ipv4颜色也不一样。修改好之后重启postfix,再次执行发送时,发送成功。

[root@123 alternatives]# service postfix restart  
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]
[root@123 ~]# echo 'this is test' | mailx -s 'test mail from 214ee' [email protected]
[root@123 ~]# 

     下面是发送成功后mail日志中的提示:开始我也不理解removed,以为是没有发送成功,发送任务被删除,后来知道有removed表示发送成功了,邮件任务所以被removed,我在中途未收到邮件的原因是被QQ邮件放到了垃圾箱里,所以一下子没有看到邮件。

elays=0.02/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Sep 27 15:10:01 123 postfix/qmgr[24727]: BCA11CB9B1: removed

        所以使用mail走postfix的通路就OK了。我们可再试试使用我这服务器上的exim,之前我看网上只知道qmail,sendmail,postfix,也就是从这里才知道还有一个MTA叫exim,我们先执行一下默认MTA切换:

[root@123 ~]# alternatives --set mta /usr/sbin/sendmail.exim
[root@123 ~]# alternatives --display mta                    
mta - status is manual.
 link currently points to /usr/sbin/sendmail.exim
/usr/sbin/sendmail.exim - priority 10
 slave mta-pam: /etc/pam.d/exim
 slave mta-mailq: /usr/bin/mailq.exim
 slave mta-newaliases: /usr/bin/newaliases.exim
 slave mta-rmail: /usr/bin/rmail.exim
 slave mta-rsmtp: /usr/bin/rsmtp.exim
 slave mta-runq: /usr/bin/runq.exim
 slave mta-sendmail: /usr/lib/sendmail.exim
 slave mta-mailqman: /usr/share/man/man8/exim.8.gz
 slave mta-newaliasesman: (null)
 slave mta-aliasesman: (null)
 slave mta-sendmailman: (null)
/usr/sbin/sendmail.postfix - priority 30
 slave mta-pam: /etc/pam.d/smtp.postfix
 slave mta-mailq: /usr/bin/mailq.postfix
 slave mta-newaliases: /usr/bin/newaliases.postfix
 slave mta-rmail: /usr/bin/rmail.postfix
 slave mta-rsmtp: (null)
 slave mta-runq: (null)
 slave mta-sendmail: /usr/lib/sendmail.postfix
 slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
 slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
Current `best' version is /usr/sbin/sendmail.postfix.
[root@123 ~]# echo 'this is test' | mailx -s 'test mail from 214exim' [email protected] 
You have new mail in /var/spool/mail/root
[root@123 ~]# echo 'this is test' | mailx -s 'test mail from 214exim' [email protected] 
[root@123 ~]# 
[root@123 ~]# ps -ef | grep post
root     24724     1  0 15:03 ?        00:00:00 /usr/libexec/postfix/master
postfix  24726 24724  0 15:03 ?        00:00:00 pickup -l -t fifo -u
postfix  24727 24724  0 15:03 ?        00:00:00 qmgr -l -t fifo -u
postfix  24754 24724  0 15:05 ?        00:00:00 anvil -l -t unix -u
postfix  25137 24724  0 15:21 ?        00:00:00 smtpd -n smtp -t inet -u -o stress=
root     25168 15067  0 15:22 pts/1    00:00:00 grep --color post
[root@123 ~]# ps -ef | grep exim
root     25230 15067  0 15:26 pts/1    00:00:00 grep --color exim

     上面在测试的时候发现,无法发送成功。因为postfix和exim默认都是使用25端口,因此是不能以同一个端口同时启动的,而现在我alternatives设置的默认MTA是exim但exim未启动。只启动了postfix,所以无法发送。我在测试的时候同时看到在上面的情况下,邮件一直在尝试发送,exim未启动,但是邮件并不会丢弃,如果此时将默认MTA切换至postfix,你会发现之前未发送成功的邮件会全部发送成功。说明alternative根本不去管后面的postfix和exim谁启动了,也不去理会25端口是exim启动的还是postfix启动的,它只管alternatives默认的链接是哪个应用程序。

另外除了进行上面的尝试外,我也成功使用了exim进行发送,

注:postfix发送邮件的日志都在/var/log/maillog文件里。而exim发送邮件的日志在:/var/log/exim/main.log

二、linux下使用mail发送邮件的简单实现

    在一篇文章 探讨了邮件发送里MUA与MTA之间的联系,通过mail或者mailx命令调用MTA(postfix,exim甚至sendmail等)执行发送都是可行的方案,但在执行的时候会发现一个情况,那就是发出去的邮件,在收件箱里显示的发件人都是服务器的用户名@主机名,并且使用postfix和exim时这个还不一样。

这是postfix发送时的发件人信息:
发件人:root <[email protected]>
这是exim发送时的信息,这个未带后面的.localdomain
发件人:root <@iZ2eretjiwZ>    
(由 <root@iZ2eretjiwZ> 代发) 

这个后面跟的是服务器的主机名hostname,可以通过hostname命令将其修改,例如:

[root@123 ~]# hostname 007.cn
[root@123 ~]# hostname
007.cn

之后再发送邮件时,收到的就是发件人就是:[email protected],如果不想使用root,在linux系统里切换发送的用户即可。还有一个方法可以直接设置你的发件人,就是修改/etc/mail.rc文件增加下面这行就Ok了。

set  [email protected]

上面的这些方式虽然都能发送邮件,但很多时候都会被目标邮件移到垃圾邮箱,通过配置使用外部smtp发送邮件是一个不错的方法,也是修改配置文件/etc/mail.rc 增加以下几行

from:发送的真实邮件地址,对方显示的发件人
smtp:发生的外部smtp服务器的地址
smtp-auth-user:外部smtp服务器认证的用户名
smtp-auth-password:外部smtp服务器认证的用户密码
smtp-auth:邮件认证的方式

 #另附mail详细参数如下:

-b<地址>:指定密件副本的收信人地址;
-c<地址>:指定副本的收信人地址;
-f<邮件文件>:读取指定邮件文件中的邮件;
-i:不显示终端发出的信息;
-I:使用互动模式;
-n:程序使用时,不使用mail.rc文件中的设置;
-N:阅读邮件时,不显示邮件的标题;
-s<邮件主题>:指定邮件的主题;
-u<用户帐号>:读取指定用户的邮件;
-v:执行时,显示详细的信息。

#常用的发送方式: 

A、在shell命令中使用:mail -s 主题 目标邮箱。然后enter输入正文最后CTRL+D结束输入即可。
B、一般常用管道进行邮件发送,即上上面的格式:echo 邮件正文 | mail -s 主题 目标邮箱
C、使用文件进行邮件发送:mail -s 主题 目标邮箱 < 邮件正文.txt
D、还有带附件的发送方式(需要安装sharutils:yum -y install sharutils)
mail -s 主题  目标邮箱  -a 附件 < 邮件正文.txt

就这么些简单东西,留个笔记。 publish:September 27, 2018 -Thursday

标签:slave,postfix,exim,发送,usr,mail,mta,邮件
From: https://blog.csdn.net/weixin_47792780/article/details/141367200

相关文章

  • 邮件发送案例流的形式文件不落盘
    可以实际使用的publicstaticvoidmain(String[]args){//身份认证Sessionsession=authorUser();//收件人电子邮箱Stringfrom="邮箱";//发件人电子邮箱Stringto="邮箱";send2User(session,from......
  • 【RTT-Studio】详细使用教程十三:UART的DMA 接收及轮询发送
    文章目录一、简介二、RTT配置三、使用信号量接收四、使用消息队列接收五、测试验证一、简介  串口是指数据一位一位地顺序传送,其特点是通讯线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速......
  • Selenium + Python 自动化测试21(PO+HTML+Mail)
            我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。上一篇我们讨论了PO模式并举例说明了基本的思路,今天我们继续学习。        本篇文章我们综合一下之前学习的内容,如先将PO模式和我们生成HTML报告融合起来,综合的灵活的使用之......
  • svnhook---用户提交后,解析用户的提交信息,发送到企业微信机器人
    一:第一篇写到了在用户提交时做检测,不允许不填写提交日志和特定的信息,感兴趣的可以查看  https://www.cnblogs.com/a565810497/p/18369876二:现在来写一个用户成功提交后,我们拿到svn的提交日志,通过企业微信机器人发送到群组里三:下面是具体操作先复制一个脚本,去掉tmpl后缀,并且......
  • tcp与udp的总结+connect阻塞+tcp三次握手、四次挥手+常见的服务器IO(发送数据+接收数
    一,TCP与UDP的基本总结TCP(传输控制协议)和UDP(用户数据报协议)是两种主要的传输层协议。TCP是面向连接的,提供可靠、顺序的传输,适用于需要高可靠性的应用,如网页浏览和文件传输。它通过重传机制和流量控制确保数据完整性。UDP是无连接的,速度快但不保证数据的可靠性和顺序,适用于对实时性......
  • [开源&分享]一个用于单片机IAP自动发送的串口助手,上位机,使用Python+tkinter制作
    使用Python+tkinter制作。功能:这是个给单片机通过串口进行IAP的上位机,与单片机中的BOOT程序配合使用,完成对单片机APP程序的升级。可以完成bin文件的切片,CRC校验(使用Crc32Mpeg2),打包自动发送。界面如下图所示:接收区是显示信息的区域,接收和发送的信息都在这显示串口配置区域......
  • CANoe_UDS-boorloader 自动化测试系列(二)基本功能:CAPL实现UDS协议下的CAN报文接收#解析
    目录一、前言二、CAPL实现1、报文接收接收报文函数:2、报文发送发送报文函数:三、总结展望一、前言halle,大家好,我是小鸟鹏。上篇文章《CANoe_UDS-boorloader自动测试系列(二)基本刷写流程》简单介绍了整Bootloader的基本刷写流程,包括具体使用哪些服务实现哪些功能,对......
  • Python向IP地址发送字符串
    在Python中,向IP地址发送字符串通常意味着你需要通过某种协议来实现通信。最常见的协议包括TCP和UDP。这里,我将分别给出使用TCP和UDP协议向指定IP地址发送字符串的示例代码。1.TCP、UDP协议——示例一1.1使用TCP协议TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协......
  • skynet的消息发送:send和call
    skynet是一个轻量级的游戏服务器框架。skynet的核心是服务,服务之间通过消息来通信,消息的来源主要有:定时器网络服务之间的调用(skynet.send或skynet.call)skynet.send和skynet.call假设我们有两个服务A和B,A发了两条消息给B:这里skynet.send和skynet.call的主要区别,在于c......
  • 谷歌实用Gmail技巧:批量使用多个外贸邮箱技巧
    如果你是外贸营销人员,您是否觉得在多个Gmail帐户之间来回切换、在无数个浏览器标签中搜索关键邮件非常费劲?或者您是否经常误操作导致账号被封?这个问题太常见了,但是其实有一些工具可以简化了管理多个Gmail帐户的过程,并且防止账号关联,下面具体展开说说。如何在Gmail中使用......