linux中的sendmail发送邮件

Linux/UNIX 下的老牌邮件服务器。
Sendmail 作为一种免费的邮件服务器软件,已被广泛的应用于各种服务器中,它在稳定性、可移植性、及确保没有 bug 等方面具有一定的特色,且可以在网络中搜索到大量的使用资料。

一、邮件发送原理图

MUA:Mail User Agent,邮件用户代理,用来编写,收发邮件
MTA:Mail Transfer Agent,邮件传输代理,将邮件传输到正确目的地
MDA:Mail Delivery Agent,邮件分发代理,将邮件分发到正确目的用户
 
举例说明,假如A用户使用的是QQ邮箱,B用户使用的是163邮箱,A要向B发送一封邮件。流程如下:
    1、A用户通过MUA编写好邮件,并发送
    2、该邮件通过MTA,首先发送到QQ邮件服务器
    3、QQ邮件服务器分析到目的邮箱地址是163,所以再通过MTA传送到163邮件服务器
    4、163邮件服务器收到该邮件
    5、由于使用163邮箱的用户有很多,再通过MDA把该邮件发送到正确的用户
    6、B用户通过MUA就可以查看A用户发送的邮件。

二、安装

mail是MUA,sendmail是MTA
1. sendmail必须先要安装两个包
    sudo apt-get install sendmail
    sudo apt-get install sendmail-cf   # 配置工具
  
2. ubuntu下最常使用的是mail功能,需要安装mailutils
    sudo apt-get install mailutils
    
3. 若需要使用带“附件”的功能,还需要安装sharutils
    sudo apt-get install sharutils
   
4. 测试
    输入命令:ps aux | grep sendmail
相关文件:

三、配置

默认情况下,sendmail只会为本机用户发送邮件,若要将它扩展到整个Internet,则修改sendmail配置宏文件,路径为/etc/mail/sendmail.mc
sudo vi /etc/mail/sendmail.mc
将Addr=127.0.0.1改为0.0.0.0,表明可以连接到任何服务器上
保存修改的文件,下面备份配置文件:
cd /etc/mail
mv sendmail.cf  sendmail.cf~
然后生成新的配置文件:
m4 sendmail.mc > sendmail.cf
重启sendmail生效:systemctl restart sendmail  或者 /etc/init.d/sendmail restart

四、测试发送邮件

常用的发送邮件方式有以下几种:
    1. 如何写一般的邮件: mail test@qq.com  Cc 编辑抄送对象,Subject:邮件主题,输入回车,邮件正文后,按Ctrl-D结束
    2. 快速发送方式: echo "邮件正文" | mail -s "邮件主题" test@126.com
    3. 以文件内容作为邮件正文来发送: mail -s test test@126.com < test.txt
    4. 发送带附件的邮件: uuencode 附件 附件名| mail -s "邮件标题" 收信人 -b 密送人 -- -f 发信人 -F 发信人名称
查看日志:tail -f /var/log/mail.log

五、邮件发送问题

1、发送失败,日志报错 My unqualified host name (node1) unknown; sleeping for retry
/var/log/mail.log日志有如下报错:
参考 Sendmail: "unqualified hostname unknown; sleeping for retry unqualified hostname - Linux Tutorials - Learn Linux Configuration,
这个错误输出实际上使问题非常清楚。文本的意思正是它所说的。这意味着 Sendmail  无法解析您的完全限定域名 unqualified host name。
在我们的例子中,系统的主机名是node1(hostname命令查看)
要解决此问题,请更改: /etc/hosts
重启服务:systemctl restart sendmail
再次发送邮件:echo '邮件内容' | mail -s '邮件标题' 1162886013@qq.com
tail -f /var/log/mail.log的日志显示:
查看邮箱是否收到:收到了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云对象存储联合DataBend云数仓打通数据湖和数据仓库

随着数字化进程不断深入&#xff0c;数据呈大规模、多样性的爆发式增长。为满足更多样、更复杂的业务数据处理分析的诉求&#xff0c;湖仓一体应运而生。在Gartner发布的《Hype Cycle for Data Management 2021》中&#xff0c;湖仓一体&#xff08;Lake house&#xff09;首次…

性能测试学习阶段性总结

目录 1.前言 2.概念部分 2.1不同角度看软件性能 2.2关键词 2.3测试的方法 2.4应用领域 3.性能测试过程模型&#xff08;PTGM&#xff09; 2.1测试前期准备 2.2测试工具引入 2.3测试计划 2.4测试设计与开发 2.5测试执行和管理 2.6测试分析 总结&#xff1a; 1.前言…

Django admin管理工具TabularInline表格内联

详解 TabularInline 是 Django Admin 中的一个内联模型选项&#xff0c;用于在父模型的编辑页面中以表格形式显示关联的子模型对象。下面是对 TabularInline 的一些详解&#xff1a; 显示方式&#xff1a;TabularInline 以表格的形式显示子模型对象。每个子模型对象将以一行的…

vue实现左右布局(右侧超出的时候换行展示)

目录 vue实现左右布局(右侧超出的时候换行展示)code效果 vue实现左右布局(右侧超出的时候换行展示) code <ul class"body-detail"><li><div class"li-label">姓名</div><div class"li-value">XXXXXXXXXXXXXXXXXX…

SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)

文章目录 1. 环境准备1. 查询全部2. 根据 name 查询 match 分词查询3. 根据 name 和 品牌查询 multiMatch 分词查询4. 根据 brand 查询 match 分词查询5. 按照价格 范围查询6. 精确查询7. boolQuery8. 分页9. 高亮查询9. 公共解析 上一节讲述了 SpringBoot 实现 elasticsearch …

【前端技巧】CSS常用知识碎片(八)

CSS常用知识碎片&#xff08;八&#xff09; CSS混合模式 background-blend-mode 属性用于混合元素背景图案、渐变和颜色&#xff1b;mix-blend-mode 属性用于元素与元素之间的混合&#xff1b;isolation 属性用在祖先元素上&#xff0c;限制mix-blend-mode 属性设置的混合模…

Sentinel整合OpenFegin

之前学习了openFeign的使用&#xff0c;我是超链接 现在学习通过Sentinel来进行整合OpenFegin。 引入OpenFegin 我们需要在当前的8084项目中引入对应的依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sta…

mermaid语言绘制图形

mermaid语言绘制图形 绘制流程图 graph TD; A-->B A-->C B-->D C-->D#mermaid-svg-bENj2N7h8AfGvgYF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bENj2N7h8AfGvgYF .error-icon{fill:#552222;}#me…

栈练习题(逆波兰表达式,有效括号,出入栈次序匹配,最小栈)

目录 基础知识: 中缀表达式和后缀表达式(逆波兰式) 中缀表达式转后缀表达式 后缀表达式求结果 有效括号 栈的压入,弹出序列 最小元素栈 基础知识: 栈:是一种先入后出的数据结构,它的底层是由数组实现的 入栈:push(),出栈pop(),查看栈顶元素peek() 中缀表达式和后缀表…

SpringBoot 集成 EasyExcel 3.x 实现 Excel 导出

目录 EasyExcel官方文档 EasyExcel是什么&#xff1f; EasyExcel注解 springboot集成EasyExcel 简单入门导出 &#xff1a; 实体类 自定义转换类 测试一下 复杂表头一对多导出 &#xff1a; 自定义注解 定义实体类 自定义单元格合并策略 测试一下 EasyExcel官方文档 …

Spring mvc 组件介绍

1. 组件介绍 1.1 DispatcherServlet 统一收口&#xff0c;接收请求&#xff0c;响应结果&#xff0c;相当于转发器&#xff0c;中央处理器。 有了 DispatcherServlet 减少了其它组件之间的耦合度。 1.2 HandlerMapping-处理器映射器 根据请求的url查找Handler&#xff0c;既…

SpringCloud学习路线(5)—— Nacos配置管理

一、统一配置管理 需求&#xff1a; 微服务配置能实现统一的管理&#xff0c;比如希望改动多个配置&#xff0c;但不希望逐个配置&#xff0c;而是在一个位置中改动&#xff0c;并且服务不用重启即用&#xff08;热更新&#xff09;。 &#xff08;一&#xff09;使用配置管理…

AN OVERVIEW OF LANGUAGE MODELS RECENT DEVELOPMENTS AND OUTLOOK

LLM系列相关文章&#xff0c;针对《AN OVERVIEW OF LANGUAGE MODELS: RECENT DEVELOPMENTS AND OUTLOOK》的翻译。 语言模型综述&#xff1a;近年来的发展与展望 摘要1 引言2 语言模型的类型2.1 结构化LM2.2 双向LM2.3 置换LM 3 语言单元3.1 字符3.2 单词和子单词3.2.1 基于统…

Sublime Text 文件采用Unix行尾格式

仅仅设置"default_line_ending": "unix"是不够的&#xff0c;因为这不能自动转换Windows文件。 import sublime_pluginclass SetUnixLineEndingsCommand(sublime_plugin.TextCommand):def run(self, edit):self.view.set_line_endings("unix")c…

十八、Unity游戏引擎入门

1、下载 首先需要下载Unity Hub,下载网址:https://unity.com/cn。 然后在其中下载Unity编辑器并安装,可选择最新版本。 接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件…

CRM排名前三的的系统有哪些特点?

crm经过多年的发展&#xff0c;不仅可以管理好客户关系还是企业重要的战略武器。让企业的销售、市场营销和客服服务部门建立密切联系&#xff0c;在crm一个平台上处理商机&#xff0c;简化业务流程&#xff0c;为组织降本增效。国内crm系统排名哪些技术商更靠前&#xff1f; 1…

微服务sleuth+zipkin——链路追踪

一、链路追踪&#x1f349; 1.什么是链路追踪&#xff1f;&#x1f95d; 在大型系统的微服务化构建中&#xff0c;一个系统被拆分成了许多模块。这些模块负责不同的功能&#xff0c;组合成系统&#xff0c;最终可以提供丰富的功能。在这种架构中&#xff0c;一次请求往往需要…

scrapy----setting配置

基础配置 #1 了解 BOT_NAME "firstscrapy" #项目名字&#xff0c;整个爬虫名字 #2 爬虫存放位置 了解 SPIDER_MODULES ["firstscrapy.spiders"] NEWSPIDER_MODULE "firstscrapy.spiders" #3 记住 是否遵循爬虫协议&#xff0c;一般都设为…

vue或react当中canvas实现电子签名组件和使用canvas进行图片压缩

<template><div><h1>vue3</h1><canvas id"canvasWrite"> 浏览器不支持Canvas,请升级浏览器 </canvas><div><button class"submit" click"submitWrite">提交签名</button><button clas…

jsoncpp源码篇(二)

使用jsoncpp时主要使用到的类有 Json::Value和 Json::Reader; 1. Json::Value类 1.1 提供的转换接口 const char* asCString() const; String asString() const; Int asInt() const; UInt asUInt() const; Int64 asInt64() const; UInt64 asUInt64() const; LargestInt asLarg…