linux shell发送Email邮件的方法详解

发布时间 - 2026-01-10 22:46:11    点击率:

一封最简单的邮件

echo -e "To: handy1989@qq.com\nCC: handy1989@qq.com\nFrom: handy<handy@test.com>\nSubject: test\n\nhello world" | sendmail -t

看上去有点复杂,其实就是sendmail程序从标准输入读取邮件源码,-t参数表示从邮件源码提取收件人信息,然后发送到收件人的邮件服务器,我们稍做整理,将邮件源码保存在email.txt中如下

To: handy1989@qq.com
CC: handy1989@qq.com
From: handy<handy@test.com>
Subject: test

hello world

将以上命令改为cat email.txt | sendmail -t,这样就一目了然了。收到的邮件信息如下

邮件的格式

从前面的邮件源码可以看到,邮件是和http类似的文本协议,由邮件头和邮件内容两部分组成,中间以空行分隔,邮件头每行对应一个字段,和http头类似,比如这里的To,CC,From,Subject,分别代表收件人,抄送人,发件人,标题,如果有多个收件人或抄送人,用逗号分隔,邮件内容才是我们在邮件客户端真正看到的东西

邮件客户端都可以查看邮件源码,比如下面就是我收到的一封邮件的源码


邮件标题使用中文

如果邮件标题直接使用中文字符会导致收到的邮件乱码,为了避免这种情况,应该对中文进行base64编码,而这也是邮件最常用的编码方式,当然,在进行base64编码之前先得对中文字符进行编码(UTF-8或GBK等等),这和html的编码是一样的概念,采用UTF-8和base64编码的格式如下

=?UTF-8?B?xxxxxx?=

其中xxxxxx为编码后的数据,用python可以快速对中文进行编码,比如对中文'测试'先进行utf-8编码再进行base64编码结果为

>>> import base64
>>> base64.standard_b64encode(u'测试'.encode('utf-8'))
'5rWL6K+V'

在From和Subject中使用中文,邮件源码如下

To: handy1989@qq.com
CC: handy1989@qq.com
From: =?UTF-8?B?5rWL6K+V?=<handy@test.com>
Subject: =?UTF-8?B?5rWL6K+V?=

hello world

这里将发件人的名字和邮件标题都改为了'测试',收到的邮件效果为

邮件内容使用html

如果邮件内容是html代码,则需要在邮件头添加Content-type字段来标记文本类型,同时还需要标记邮件内容的字符编码,以下邮件源码发送的正是html内容

To: handy1989@qq.com
CC: handy1989@qq.com
From: =?UTF-8?B?5rWL6K+V?=<handy@test.com>
Subject: =?UTF-8?B?5rWL6K+V?=
Content-type: text/html;charset=utf-8

<h1>hello world</h1>

收到的邮件效果为

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流。


# shell脚本发送邮件  # shell  # 发送邮件  # 发送html邮件  # 5款最佳的免费Linux杀毒软件  # linux脚本实现自动发送和收取邮件的设置方法  # 在 Linux 命令行发送邮件的 5 种方法(推荐)  # Linux安装杀毒工具ClamAV  # 并配置邮件告警  # 一封  # 送人  # 客户端  # 多个  # 才是  # 如有  # 要在  # 就是我  # 可以看到  # 这种情况  # 还需要  # 发送到  # 这篇文章  # 而这  # 最简单  # 为了避免  # 两部分  # 这和  # 最常用  # 可以查看 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何创建自定义Artisan命令?(代码示例)  清除minerd进程的简单方法  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Laravel如何实现API速率限制?(Rate Limiting教程)  javascript中闭包概念与用法深入理解  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  php 三元运算符实例详细介绍  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Java解压缩zip - 解压缩多个文件或文件夹实例  七夕网站制作视频,七夕大促活动怎么报名?  高端建站如何打造兼具美学与转化的品牌官网?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  轻松掌握MySQL函数中的last_insert_id()  HTML 中动态设置元素 name 属性的正确语法详解  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何快速搭建安全的FTP站点?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  javascript基本数据类型及类型检测常用方法小结  Android自定义listview布局实现上拉加载下拉刷新功能  如何注册花生壳免费域名并搭建个人网站?  公司门户网站制作流程,华为官网怎么做?  如何在宝塔面板创建新站点?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Java类加载基本过程详细介绍  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Android仿QQ列表左滑删除操作  详解CentOS6.5 安装 MySQL5.1.71的方法  ,南京靠谱的征婚网站?  JS去除重复并统计数量的实现方法  Laravel怎么上传文件_Laravel图片上传及存储配置  JavaScript实现Fly Bird小游戏  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  如何在景安云服务器上绑定域名并配置虚拟主机?  北京企业网站设计制作公司,北京铁路集团官方网站?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何做网站制作流程,*游戏网站怎么搭建?  如何在万网利用已有域名快速建站?  如何快速搭建高效可靠的建站解决方案?  bootstrap日历插件datetimepicker使用方法  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何在宝塔面板中创建新站点?  Python进程池调度策略_任务分发说明【指导】  Swift中switch语句区间和元组模式匹配