扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
效果截图
成都创新互联公司主营桂平网站建设的网络公司,主营网站建设方案,重庆APP软件开发,桂平h5微信小程序定制开发搭建,桂平网站营销推广欢迎桂平等地区企业咨询
Sendmail :sendmail 是最古老的 MTA(Mail Transfer Agent,电子邮件系统)之一,最早它诞生的时候,Internet 还没有被标准化,当时主机之间使用的是 UUCP 技术来交换邮件。它被设计得比较灵活,便于配置和运行于各种类型的机器。
Qmail :qmail 是新生一代的 MTA 代表,它以速度快、体积小、易配置安装等特性而著称。作者 D.J.Bernstein 是一个数学教授,富有传奇色彩。他于 1995 年开发 qmail,1996 年发布 0.70 版,并使用了多种当时比较先进的 技术,包括 Maildir,与 sendmail 单个 binary 不同的模块化设计,权限分离,以及使用了大量由他编写的配套工具,如 daemontool,ucsip-tcp 等。qmai 迅速成为了 Internet 上最有名的 MTA,使用者众。
postfix :postfix 如今已经独树一帜,流水线、模块化的设计,兼顾了效率和功能。灵活的配置和扩展,使得配置 postfix 变得富有趣味。其主要的特点是速度快、稳定,而且配置/功能非常强大,并和 sendmail 类似,提供了与外部程序对接的 API/protocol。尤其是配置部分,postfix 另一个优势是至今依然保持活跃的开发工作,而且稳步发展,适合高流量大负载的系统,扩充能力较强。本实验也是基于 postfix 服务器软件来实现。
邮件服务器基本的工作原理
MUA(Mail User Agent):向外发送邮件,以及提供用户浏览与编写邮件的功能。
MTA(Mail Transfer Agent):(可以理解为 smtpd 服务器)帮忙将用户的邮件传递出去或接收进来。
MDA(Mail Delivery Agent):将接收下来的邮件存放到对应用户邮筒当中的程序。通过分析 MTA 所收到邮件的表头或内容,来判断此邮件是属于哪个用户,然后决定将此邮件投递给哪个用户的邮筒里。
MRA(Mail Retrieval Agent):通过 MRA 服务器提供的邮政服务协议(POP)来接收自己的邮件。
邮件中继:
SMTPD 要支持邮件路由功能,需要打开 Open Relay 开放式中继。
SMTPD 是根据收件人判断邮件是否需要中继,而且只给指定的客户端中继。
注:当 DNS 上存在多个 MX 记录的主机这时就是根据 DNS 的邮件级判断了。DNS 上定义的值越小,其优先级越高。辅助交换器接受到邮件并不能保存邮件。而是这个辅助交换器会等到主邮件交换器空闲的时候把代替它接受下来的邮件在转给主邮件交换器。所以任何邮件处理都是主邮件交换器处理的。所以我们实际情况下,如果有 2 台服务器做邮件交换器,性能比较高的应该为主的。
安装配置过程中,postfix 通过 Internet 发送和接收 email,并存储在用户邮箱里。同时客户也可以通过 IMAP 或者 POP3 恢复他们的邮件。其中的客户认证是通过 Courier Authdaemon 模块的。下图表示出了这个过程:
出现安装界面时,首先按下 tab 键切换到确定,然后按下回车。
安装 postfix 的时候会问你安装的服务器类型,对于我们的需要,我们选择默认的 Internet Site,这是最符合我们的服务器类型,然后按下回车确认。
使用 vim 编辑配置文件:
大概在第 31 行,编辑 myhostname,修改为 myhostname = shiyanlou.com。
然后我们把 alias_map 参数修改为 alias_maps = hash:/etc/postfix/virtual,之后会讲解 virtual 里面填写什么。
之后设置 mynetworks 段落,它定义可以使用这台服务器的主机,我们这里就用默认的本地地址。你也可设置为其他地址。
编辑完成后按下 Esc 键,输入 :wq 保存退出。
此命令创建了一个用户 master,其中 -d 和 -m 选项用来为登录名 master 产生一个主目录 /usr/master(/usr 为默认的用户主目录所在的父目录)。
我们编写之前设置的 virtual 文件,这些邮箱地址是用来传送邮件的。
在这个文件里,我们将设置一个表,对应相关的邮件地址。
完成后保存关闭文件。
我们可以通过调用下面这个命令来实现我们的映射:
接着我们重启 postfix,完成我们的修改:
我们可以用 shiyanlou 这个账号给 master 这个账号发一封邮件。首先我们需要安装一个命令行收发邮件的软件 mailutils 。
写一封邮件
输入如下内容:
其中 -s 参数是指邮件的标题, 后面是将要发送的邮件内容从 hello.txt 中重定向。这个命令如果正确执行不会有输出。
然后我们切换到 master 用户,查看我们的邮件。
按下回车建可以查看邮件内容,输入 quit 即可退出邮箱。
Linux 邮件服务器原理介绍,编译安装 Postfix 实现本地的邮件服务
Ubuntu 服务器指南-邮件服务-Postfix
how-to-run-your-own-mail-server-with-mail-in-a-box-on-ubuntu-14-04
笔者做过做过使用python发送邮件- Python使用yagmail库发送邮件 ,那么在不同平台都可以完成一些监控报警功能。但是在linux平台下,如果脚本是shell实现的,可以调用python脚本,也可以直接使用shell来发送。
1、按照mailx软件包, 安装后在/usr/bin/mail
sudo yum install mailx -y
2、修改配置文件/etc/mail.rc
直接修改配置文件vim /etc/mail.rc, 在最后追加下面的配置,笔者使用的是163邮箱。需要注意的是,需要进入邮箱开启SMTP服务,然后得到一个授权码,用于登录第三方邮件客户端的专用密码。smtp-auth-password即为授权码,而不是邮箱地方密码。
3、发送邮箱测试
命令行输入: echo "测试邮件" | mail -s "邮件主题" -a ./myshells/clear_buffcache.sh ***@qq.com 。-s添加邮箱主题,并添加附件后将邮箱内容一起发送给***@qq.com 。邮箱里面立马就可以收到了。
也可以使用文件内容进行邮件发送:mail -s "邮件主题" 收件地址 mail.txt 。
也可以在命令行输入邮箱内容:mail -s "邮件主题" 收件地址 ,输入完这行命令后回车,会进入邮件正文的编写,可以输入任何文字。当邮件正文输入完成后,需要按CTRL+D结束输入后发送。
如果发送失败,咋命令行会提示错误: message not sent,并会在用户目录下的dead.letter里面显示具体信息。
《Linux设置定时任务》 一文中,我们学习了使用crontab设置定时任务的方法,并用它来获取ganglia的运行状态。这样还不够,我们想要在ganglia的运行状态出现问题时通知我们,这样,我们就不用每天自己查看日志了。
本文主要参考 Ubuntu mail命令发送邮件 和 如何通过Shell脚本实现发送邮件通知功能? 。
1、安装mailutils
sudo apt-get install mailutils
2、General type of mail configuration选择Internet Site。
3、System mail name输入mail.voidking.com。
命令格式:
mail [OPTION...] [address...]
常用到的选项,一个是s,代表主题;一个是A,代表附件。其他的需要时查看help。
目标:给邮箱 voidking@qq.com 发送邮件,主题为“Hello VoidKing”,内容为“Welcome to mail world!”
mail -s 'Hello VoidKing' voidking@qq.com
提示Cc,这里不需要抄送,就直接回车。然后输入邮件内容“Welcome to mail world!”,回车,ctrl+D,发送邮件。
但是,等待了几分钟,并没有收到邮件,垃圾箱也没有。
mail ,查看email的发送状态为Undelivered Mail Returned,原来没有投递出去。
查看邮件系统日志: tail -n 50 /var/spool/mail/test ,提示host mx3.qq.com[183.57.48.35] said: 550 Mail content denied。看来qq邮箱的垃圾邮件防御机制做的不错,那就换个163邮箱,没想到依然失败。
那就换一台服务器!发送给 voidking@qq.com ,成功!很尴尬。。。
除了上面的方式发送邮件,我们还可以使用:
mail -s 'Hello VoidKing' voidking@qq.com 'Welcome to mail world!'
或者使用:
echo 'Welcome to mail world!' | mail -s "Hello VoidKing" voidking@qq.com
1、从文本读入内容发送邮件
mail -s 'Error report' voidking@qq.com /tmp/log/ganglia/error-20180524.log
2、发送附件
mail -s 'Error report' voidking@qq.com -A /tmp/log/ganglia/ganglia-20180524.log /tmp/log/ganglia/error-20180524.log
3、指定发件人
echo 'Welcome to mail world!' | mail -s "Hello VoidKing" voidking@qq.com -aFrom:haojin@qq.com
失败了,收不到邮件,不知道什么原因,留个坑吧。
目标:每天获取一次ganglia的状态日志,然后通过checkganglia.sh脚本进行审阅。审阅完毕,发送审阅结果到管理员的邮箱。
修改checkganglia.sh脚本为:
至此,大功告成! 《Linux设置定时任务》 配合 《Linux设置邮件提醒》 ,简直完美!两篇文章完成了一个小系统:定时生成ganglia日志,定时审阅ganglia日志,并且把审阅结果通过邮件发送给管理员。
Linux命令大全——LMNOPQ
如何在Ubuntu环境下搭建邮件服务器(一)
linux 常用命令有:
pwd 命令
使用 pwd 命令找出您所在的当前工作目录(文件夹)的路径。该命令将返回一个绝对(完整)路径,该路径基本上是所有以 / 开头的目录的路径。绝对路径的一个示例是 /home/username。
cd 命令
要浏览 Linux 文件和目录,请使用 cd 命令。根据您所在的当前工作目录,它需要目录的完整路径或名称。假设您位于 /home/username / Documents 中,并且想要转到 Documents 的子目录 Photos。为此,只需键入以下命令:cd Photos。另一种情况是,如果您想切换到一个全新的目录,例如 /home/username / Movies。在这种情况下,您必须输入 cd,然后输入目录的绝对路径:cd /home/username / Movies。有一些快捷方式可帮助您快速导航:cd ..(带有两个点)将一个目录向上移动 cd 直接转到主文件夹 cd-(带连字符)移动到上一个目录附带说明一下,Linux 的 shell 是区分大小写的。因此,您必须准确输入名称的目录。
ls 命令
LS 命令用于查看目录的内容。默认情况下,此命令将显示当前工作目录的内容。如果要查看其他目录的内容,请键入 ls,然后键入目录的路径。例如,输入 LS / 家 / 用户名 / 文档查看的内容的文件。您可以使用 ls 命令使用以下变体:ls -R 还将列出子目录中的所有文件 ls -a 将显示隐藏的文件 ls -al 将列出文件和目录以及详细信息,例如权限,大小,所有者等。
cat 命令
cat(连接的缩写)是 Linux 中最常用的命令之一。它用于在标准输出(sdout)上列出文件的内容。要运行此命令,请键入 cat,然后输入文件名及其扩展名。例如:cat file.txt。以下是使用 cat 命令的其他方法:cat filename 创建一个新文件 cat filename1 filename2 filename3 连接两个文件(1 和 2),并将它们的输出存储在新文件中(3)将文件转换为大写或小写使用,cat filename | tr a-z A-Z output.txt
cp 命令
使用 cp 命令将文件从当前目录复制到另一个目录。例如,命令 cp scenery.jpg/home /username/ Pictures 将在您的 Pictures 目录中创建一个 Scene.jpg 副本(来自当前目录)。
mv 命令
mv 命令的主要用途是移动文件,尽管它也可以用于重命名文件。mv 中的参数类似于 cp 命令。您需要输入 mv,文件名和目标目录。例如:mv file.txt/home /username/ Documents。
mkdir 命令
使用 mkdir 命令创建一个新目录 - 如果键入 mkdir Music,它将创建一个名为 Music 的目录。还有一些额外的 mkdir 命令:要在另一个目录中生成新目录,请使用此 Linux 基本命令 mkdir Music / Newfile 使用 p(父级)选项在两个现有目录之间创建一个目录。例如,mkdir -p Music / 2022 / Newfile 将创建新的 “2022” 文件。
rmdir 命令
如果需要删除目录,请使用 rmdir 命令。但是,rmdir 仅允许您删除空目录。
rm 命令
该 RM 命令用于删除目录以及其中的内容。如果只想删除目录(作为 rmdir 的替代方法),请使用 rm -r。注意:使用此命令时要格外小心,并仔细检查您所在的目录。这将删除所有内容,并且没有撤消操作。
touch 命令
该触摸命令允许您创建通过 Linux 命令行新的空白文件。例如,输入 touch /home/username/Documents/Web.html 在 Documents 目录下创建一个名为 Web 的 HTML 文件。
locate 命令
您可以使用此命令来定位文件,就像 Windows 中的搜索命令一样。此外,将 - i 参数与该命令一起使用将使其不区分大小写,因此即使您不记得其确切名称,也可以搜索文件。要搜索包含两个或多个单词的文件,请使用星号(*)。例如,locate -i school * note 命令将搜索包含单词 “school” 和 “ note” 的任何文件,无论它是大写还是小写。
find 命令
在类似定位命令,使用 查找也搜索文件和目录。区别在于,您可以使用 find 命令在给定目录中查找文件。例如,find /home/-name notes.txt 命令将在主目录及其子目录中搜索名为 notes.txt 的文件。使用查找时的其他变化 是:要查找当前目录中使用的文件,请使用 find . -name notes.txt 要查找目录,请使用 /-type d -name notes. txt13. grep 命令无疑对日常使用很有帮助的另一个基本 Linux 命令是 grep。它使您可以搜索给定文件中的所有文本。为了说明这一点,grep blue notepad.txt 将在记事本文件中搜索单词 blue。包含搜索到的单词的行将被完整显示。
sudo 命令
该命令是 “SuperUser Do” 的缩写,使您能够执行需要管理或超级用户权限的任务。但是,建议不要将此命令用于日常使用,因为如果您做错了一些事情,很容易发生错误。
df 命令
使用 df 命令可获取有关系统磁盘空间使用情况的报告,以百分比和 KB 表示。如果要以兆字节为单位查看报告,请输入 df -m。
du 命令
如果要检查文件或目录占用了多少空间,答案是 du(磁盘使用情况)命令。但是,磁盘使用情况摘要将显示磁盘块号,而不是通常的大小格式。如果要以字节,千字节和兆字节为单位查看它,请在命令行中添加 - h 参数。
head 命令
所述头命令用于查看任何文本文件的第一行。默认情况下,它将显示前十行,但是您可以根据自己的喜好更改此数字。例如,如果只想显示前五行,则键入 head -n 5 filename.ext。
tail 命令
该命令与 head 命令具有相似的功能,但是 tail 命令将显示文本文件的最后十行,而不是显示第一行。例如,tail -n filename.ext。
diff 命令
diff 命令是差异的缩写,diff 命令逐行比较两个文件的内容。分析文件后,它将输出不匹配的行。程序员在需要进行程序更改时经常使用此命令,而不是重写整个源代码。此命令最简单的形式是 diff file1.ext file2.ext
tar 命令
该 tar 命令是最常用的命令归档多个文件到一个压缩包。类似于 zip 格式常见的 Linux 文件格式,压缩是可选的。该命令具有很长的功能列表,非常复杂,例如将新文件添加到现有档案中,列出档案内容,从档案中提取内容等等。查看一些实际示例,以了解有关其他功能的更多信息。
chmod 命令
chmod 是另一个 Linux 命令,用于更改文件和目录的读取,写入和执行权限。由于此命令相当复杂,因此您可以阅读完整的教程以正确执行它。
chown 命令
在 Linux 中,所有文件均归特定用户所有。该 CHOWN 命令使您可以更改或文件的所有权转让给指定的用户名。例如,chown linuxuser2 file.ext 将使 linuxuser2 成为 file.ext 的所有者。
Jobs 命令
jobs 命令将显示所有当前作业及其状态。作业基本上是由 Shell 启动的进程。
kill 命令
如果您的程序无响应,则可以使用 kill 命令手动终止它。它将向运行异常的应用发送特定信号,并指示该应用自行终止。您总共可以使用 64 个信号,但是人们通常只使用两个信号:SIGTERM(15) — 请求程序停止运行,并给它一些时间来保存其所有进度。如果在输入 kill 命令时未指定信号,则将使用此信号。SIGKILL(9) - 强制程序立即停止。未保存的进度将丢失。除了知道信号之外,您还需要知道要杀死的程序的进程标识号(PID)。如果您不知道 PID,只需运行命令 ps ux。在知道您要使用什么信号以及程序的 PID 之后,输入以下语法:kill [signal option] PID.
ping 命令
使用 ping 命令检查与服务器的连接状态。例如,只需输入 ping google.com,该命令将检查您是否能够连接到 Google 并测量响应时间。
wget 命令
Linux 命令行非常有用 - 您甚至可以在 wget 命令的帮助下从 Internet 下载文件。为此,只需键入 wget,然后输入下载链接即可。
uname 命令
该 UNAME 命令,短期对于 Unix 名,将打印您的 Linux 系统,如计算机名称的详细信息,操作系统,内核,等等。
top 命令
作为与 Windows 中的任务管理器等效的终端,top 命令将显示正在运行的进程的列表以及每个进程使用的 CPU 数量。监视系统资源使用情况非常有用,尤其是知道哪个进程由于消耗太多资源而需要终止时。
history 命令
当您使用 Linux 一段时间后,您会很快注意到每天可以运行数百个命令。因此,如果您想查看之前输入的命令,运行历史记录命令特别有用。
man 命令
对某些 Linux 命令的功能感到困惑吗?不用担心,您可以使用 man 命令从 Linux 的外壳程序中轻松地学习如何使用它们。例如,输入 man tail 将显示 tail 命令的手动指令。
echo 命令
此命令用于将一些数据移到文件中。例如,如果要将文本 “Hello,我的名字叫 John” 添加到名为 name.txt 的文件中,则可以键入 echo Hello, my name is John name.txt
zip,unzip 命令
使用 zip 命令将文件压缩到 zip 归档文件中,然后使用 unzip 命令从 zip 归档文件中提取压缩文件。
hostname 命令
如果您想知道主机 / 网络的名称,只需键入 hostname。在末尾添加 - I 将显示您的网络的 IP 地址。
useradd,userdel 命令
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流