计网:动手尝试SMTP交互【利用Telnet发送邮件, 带图片】

文章目录

      • 准备工作
      • 发送仅有ascii码的邮件
      • 发送图片附件
      • 后记

准备工作

1.如图,勾选telnet客户端
在这里插入图片描述

2.邮箱开启第三方登录服务

在这里插入图片描述
开启服务后,会给一个授权码。授权码是QQ邮箱用于登录第三方客户端/服务的专用密码,适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务。登录时,请在第三方客户端的密码输入框里面填入授权码进行验证。(不是填入QQ的密码)。发送邮件服务器: smtp.qq.com。

发送仅有ascii码的邮件

win+R打开cmd,输入telnet smtp.qq.com 25。

C:\Users\23209>telnet smtp.qq.com 25(这是cmd命令行)
220 newxmesmtplogicsvrszc5-2.qq.com XMail Esmtp QQ Mail Server.
helo qq.com(向qq.com服务器问好以确认连接)
250-newxmesmtplogicsvrszc5-2.qq.com-30.174.48.222-3289458
250-SIZE 73400320
250 OK
auth login(登录命令)
334 VXNlcm5hbWU6
MjMy██████████████5jb20=(发信邮箱地址232████421@qq.com的base64编码,用黑条隐藏一部分,下同)
334 UGFzc3dvcmQ6
c3hs██████████████FkYQ==(发信邮箱的授权码的base64编码)
235 Authentication successful
mail from: <232████421@qq.com>(发信邮箱)
250 OK
rcpt to: <321████662@qq.com>(收信邮箱)
250 OK
data(告诉服务器我接下来发送的是邮件内容)
354 End data with <CR><LF>.<CR><LF>.
Subject:A Email for You(邮件标题)
From:232████421@qq.com(发信邮箱,必须和刚刚的保持一致)
To:321████662@qq.com(发信邮箱,必须和刚刚的保持一致)
(空一行)
Do one thing at a time, 
and do well.(邮件正文)
.(点号表结束。发完这一行,321████662@qq.com立即收到一封邮件,题名为A Email for You,内容为刚刚的邮件正文,加上一个点号)
250 OK: queued as.
quit(断开与服务器的连接)
221 Bye.遗失对主机的连接。C:\Users\23209>

base64编码转换器

发送图片附件

我们要发送的图片假定就是这张:
在这里插入图片描述
先把它转为base64,网站
在这里插入图片描述

然后把生成的字符串复制下来,它很长,记得去掉开头的data:image/jpeg;base64,,这个前缀用在css中的,Email消息不需要这个前缀。

data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AX……太长了省略一些,完整的在下边有……zCcrgkZhjNsNgwrMBuGFZgNwwr8F6sFx2H1CeEpAAAAAElFTkSuQmCC

在记事本中编辑消息,如下。

Subject:A Picture
From:232████421@qq.com
To:321████662@qq.com
MIME-Version:1.0
Content-Transfer-Encoding:base64
Content-Type:image/jpeg;name="123.jpg"iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAPJElEQVR4Ae3BzcvmdaHA4ev3u59xRket1F7EZhKJokWgRghZmkQUJa0UElzVojbtatc2GAjJFr1A5B8QuGhREIS6kCyhF8sEKUQnTIxGGntGR+eZ+3Omcyg6Hl8mz9zj3Pfzva4JOUddfPHFnn32WcP6mZBhOMNmw7ACs2FYgdm/mabJJpqmyXB2TcgwnGGz4Q0zTZNNNSHDcIbNhmEFZsOwArNhWIHZMKzAbBhWYDYMKzAbhhWYDcMKzIZhBWbDsAKzYViB2WCaJo899phvfOMbFouF4f9vQna5aZosl0v/dOTIEQcPHvTcc88ZXp/Z8H9ceumljh075nvf+57h9ZmQQeXl/PKXv/TBD35QZTh9E7LLTdNkuVx6JZWtrS3L5dJwembDa5qmybFjx5x//vmG0zMbVJ5++mmvZt++fX79618bTs9s+G/f/va3vZb3vve9rrvuOsNrm5DBdddd5+c//7nTMU2T4dXNBtM0+etf/+p0HTp0yPDqJmQwTZMXX3zR1taW11JZLBYqw8ubDf+tcvfddzsd0zS56qqrDK9sNvzLoUOHnK7FYmF4ZbPhXx566CEnTpxwOirDK5sN/1LZu3ev03H06FHDK5sN/0vl4x//uOVy6dX85S9/Mby6EEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCF199dUtl8tezjPPPBNCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhNBseFm/+c1vLBYLR48e9VJ33XWX4dXNhldUefOb3+zrX/+6f/f8888bXlsIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELo8ssv79ixY/3D7bffHkIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEkFNCCCGEEEIIITTPcwghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBaLRQghhNA0TT388MPt2bMnhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgihCRmGM2w2DCswG86YaZpM02RgNpyWaZq81DzPbrzxRnfffbfHH3/ccrm0XC7de++9rrnmGvM8281CCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhKZp6oILLujzn/98r8fzzz/f1tZWCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYScEkIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCE3T1AUXXNCTTz7Zf2pnZ6flctk/Pffcc73rXe8KIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhJwSQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEII/fSnP+2FF17oP3HixImOHz/ekSNHOnHiRP9uZ2ena665JoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhJBTQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEII3Xnnna3K3r17QwghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCyCkhhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIXTnnXe2Svfee28IIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgg5JYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCF03XXXtWqXX355CCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIOSWEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgih888/v+Vy2SrdfPPNIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhJwSQgghhBBCCCGEEEIIIYQQQvM8hxBCCCGEEEIIIYQQQgghhBBCCCGEEELooYcealWWy2XXX399CCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIeSUEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghdO2117ZKt956awghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEnBJCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIITTPc48//nirct9994UQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCE3ILvXud7/bH/7wB2fKyZMnLRYL/7RYLCyXS7vRhJymffv2OX78uE2xs7NjsVhYhYsuusj29rbdavYfOH78uE3x5S9/2WKxsAo//vGPbW9v281mu9Szzz5rFSqf/vSn7XazXWjv3r1uu+02q/D73//ewGwXmufZhz/8YauwXC4NzNbUFVdc4fW65JJLbG1tGVZntqaefPJJr9dVV11lVaZpMjDbha688kqrMk2Tgdku9NnPftawWhOyy2xvb9u/f79VePbZZ73pTW+y2812of3791uViy++2KFDhwyEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQmfDLbfcEkIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhJwSQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCJ0tt912WwghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEkFNCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIobPpi1/8YgghhBBCCCGEEEIIIYQQQtM0hRBCCCGEEEIIIYQQQgghhBBCCCGEEEJOCSGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYTOtm9961shhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGE0ITsMpU3wkUXXWR7e9tuMBvOmr///e/uuusue/bssekmZJepvJF2dnbcc889PvGJT9hUs13k4MGDTpw44Y22tbXlhz/8oU02IbvAgQMHHD582LlimiabbLYL3HTTTQ4fPmw4e2Yb7rbbbnPPPfc4l9xxxx12gxBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCKHrr7++c9HHPvaxEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYRmG+rGG290//33+4fKueT222+36SZkw1x88cWefvpp+/bt8w/L5dI8z84l0zTZZLMN9Mgjj9i3b59/mufZueaJJ56wyWYb5o477nDFFVc41x08eNDb3/52m2pCNsSVV17pj3/8o8ViYR386le/8oEPfMAmmm2QH/zgBxaLhVWqnCnXXnutq6++2iaakA3wtre9zdNPP+1M2NnZsbW15WyozPNs08zeIBdeeKEz6bHHHnOmbG1t2d7edjZM02T//v02zewNsr297Uy55ZZb7N+/35l04YUXOlt+9rOf2TQTsuaOHDnikksusc6mabJJZmvuIx/5iEsuucS6+8IXvmCTTMgae+aZZ7zlLW+xCaZpsikmZE1N02S5XNoUe/bssbOzYxPM1tgnP/lJm2SxWNgUszV255132iRXXHGFTTFbU9M0OXjwoE3y1a9+1aaYkDX0nve8x6OPPmqTnDhxwnnnnWcTzNbUZz7zGZtmz549NsVsTX3qU58y/F/TNDkXTMiamefZiy++aLFY2DTTNNkEszW0WCwsFgub5tixYzbFbA2dPHnSJvr+979vU0zImpnn2cmTJ22aSy+91DPPPGMTzNbQcrn0yCOPWFeVl3Ps2DGbYramHn/8cetqmiYv9fzzz9vZ2bEpZmvqd7/7nU1y8803O3nypE0xW1M/+clPbIo//elP7rnnHptkQtbQNE2OHz/uvPPOs+4+9KEPeeCBB2yS2ZqqPProo9bdn//8Zw888IBNMyFr6uDBg5544gnramdnx2WXXebo0aM2zWyNHT582Pb2tnX1pS99ydGjR22qEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCF06623to6efPLJEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIITQha2yxWHjqqae89a1vtS4efvhh73//+22yCVlz73jHOzz11FPWwZEjR1x55ZW2t7dtsgnZAIvFwt/+9jcXXnihc9ULL7xg3759doPZhjh58qR3vvOdHn74Yeeiw4cPu+yyy+wmIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYTQ5z73uc4l3/zmN1ssFiGEEEIIIYQQQgghhBaLRQghhBBCCCGEEEIIIYQQQgghhBBCCCGEEHJKCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGE9u/f3/33398b5ciRI33lK18JIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBySgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBA6cOBA3/nOdzoblstlDz74YDfddFMIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCE7JLLBYLN9xwg+9+97sOHDjgH5bLpV/84he+9rWvue+++yyXSy/noosu8r73vc9HP/pRN9xwg71793rwwQf99re/9aMf/chzzz1nuVwa/seEDMMZNhuGFZgNwwrMXmKaJsPw/zV7icoqTdNk2HwTMgxn2GwYVmA2DCswG4YVmA3DCsyGYQVmw7ACs2FYgdkwrMBsGFZgNgwrMBuGFZgNwwrMhmEFZsOwArNhWIHZMKzAbBhWYDYMKzAbhhWYDcMKzIZhBWanaWtryzCcrgkZhjNsNgwrMBuGFZgNwwr8F6sFx2H1CeEpAAAAAElFTkSuQmCC
.

还是按照刚刚与服务器交互的方式,直到发送完消息。发现邮箱中立刻收到了这张图片。

在这里插入图片描述
接下来还可以编辑混合消息,就是既有纯文本也有附件。

后记

本文用到的工具

图片转base64

扩展阅读
什么是SMTP/IMAP服务
这篇文章讲解了什么是base64
这篇文章中有文本与附件混合的Email消息代码

参考资料

计算机网络MOOC,哈工大
MIME笔记
利用Telnet登录qq邮箱发送邮件——SMTP协议学习

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

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

相关文章

leetcode-字符串中的第一个唯一字符

387. 字符串中的第一个唯一字符 题解&#xff1a; 首先&#xff0c;我们需要遍历字符串s&#xff0c;统计每个字符出现的次数。然后&#xff0c;我们再次遍历字符串s&#xff0c;找到第一个只出现一次的字符&#xff0c;返回它的索引。如果遍历完字符串s都没有找到只出现一次…

React组件详解

React组件分为两大类 1.函数组件 2.类组件&#xff08;最常用&#xff09; 组件化 import ReactDom from "react-dom";// // 1.通过函数创建一个组件 // 2.函数名字必须大写开头 // 3.函数必须有返回值 function Func1() {return <h2>这是一个基础组件</h…

c语言经典测试题5

1.题1 t0; while(printf("*")) { t; if (t<3) break; }关于上述代码描述正确的是&#xff1f; A: 其中循环控制表达式与0等价 B: 其中循环控制表达式与0等价 C: 其中循环控制表达式是不合法的 D: 以上说法都不对 我们来分析一下&#xff1a;printf的返回值…

你真的了解@Async吗?

你真的了解Async吗&#xff1f; 使用场景&#xff1a; 开发中会碰到一些耗时较长或者不需要立即得到执行结果的逻辑&#xff0c;比如消息推送、商品同步等都可以使用异步方法&#xff0c;这时我们可以用到Async。但是直接使用 Async 会有风险&#xff0c;当我们没有指定线程池…

数学建模资料分享

1. 往年各赛题的优秀论文 可以用来参考一下论文是怎么写的。参考论文的结构&#xff0c;格式&#xff0c;思路等等。 链接&#xff1a;https://pan.baidu.com/s/1WG2t4-x9MjtaSgkq4ue5AQ?pwdnlzx 提取码&#xff1a;nlzx --来自百度网盘超级会员V4的分享 2.论文模板 链接&a…

代码随想录算法训练营Day41 | 0-1背包理论基础、416.分割等和子集

0-1背包理论基础 基础 DP数组与其下标的含义 dp[i][j]&#xff0c;i为物品编号&#xff0c;j为背包容量 dp[i][j]表示从下标为[0-i]的物品里任意取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大是多少。 递推公式 分类&#xff1a;是否要放入下标为i的物品&…

typescript 实现Optional

我们先看下面的这段代码,一个学生接口,里面有成员id,name,age,gender等等成员, 有一个方法graduate,里面要接受一个Student类型的实参 interface Student {id: numbername: stringage: numbergender: string}function graduate(Student: Student) {//...}现在有一个问题,就是学…

LabVIEW燃料电池船舶电力推进监控系统

LabVIEW燃料电池船舶电力推进监控系统 随着全球经济一体化的推进&#xff0c;航运业的发展显得尤为重要&#xff0c;大约80%的世界贸易依靠海上运输实现。传统的船舶推进系统主要依赖于柴油机&#xff0c;这不仅耗能高&#xff0c;而且排放严重&#xff0c;对资源和环境的影响…

vue导致页面加载白屏时间长的原因有哪些,怎么优化

写在前面&#xff1a;vue是单页面应用&#xff0c;默认index.html里只要一个空的div。需要将所有的资源都下载到浏览器端进行解析。当网速较差时会出现一定程度的白屏。 什么是白屏时间 白屏时间是指用户输入内容回车到浏览器开始出现第一个字符,也就是说(页面)开始显示内容的时…

2583. 二叉树中的第 K 大层和

2583. 二叉树中的第 K 大层和 题目链接&#xff1a;2583. 二叉树中的第 K 大层和 代码如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), …

【笔记】【电子科大 离散数学】 2.命题

文章目录 数理逻辑定义 命题定义不是命题的例子 原子命题和复合命题定义约定 命题联结词否定联结词定义例子真值表 合取联结词定义例子真值表 析取联结词定义例子 蕴含联结词定义例子真值表 等价联结词定义例子真值表 命题符号化及其应用速查表格优先级复合命题符号化布尔检索演…

15.4K Star,超强在线编辑器

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 今天推荐一款非常棒的开源实时协作编辑器&#xff0c;可用于多人同时编…

每日OJ题_分治快排①_力扣75. 颜色分类(快排原理)

目录 分治快排算法原理 力扣75. 颜色分类 解析代码 分治快排算法原理 分治就是分而治之&#xff0c;快排在数据结构也学过了&#xff0c;现在来学一学三路划分快排&#xff08;数组划分三块&#xff09;&#xff1a; 前面我们已经实现了三个版本的快速排序的算法&#xff0…

babylonjs中文文档

经过咨询官方&#xff0c;文档已经添加了开源协议。 基于目前babylonjs没有中文文档&#xff0c;为了打造更好的babylonjs生态圈 &#xff0c;特和小伙伴们翻译了官方文档。 相关链接: 欢迎加群&#xff1a;464146715 官方文档 中文文档 Babylonjs案例分享

选座位 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 疫情期间&#xff0c;需要大家保证一定的社交距离&#xff0c;公司组织开交流会议&#xff0c;座位有一排共N个座位&#xff0c;编号分别为[0…N-1]&#xff0c;要…

【SpringBoot】Spring常用注解总结

目录 ⭐spring springmvc和springboot的区别 Autowired 和Resource的区别和联系 1. SpringBootApplication 2. Spring Bean 相关 2.1. Autowired 2.2. Component,Repository,Service, Controller 2.3. RestController 2.4. Scope 2.5. Configuration 3. 处理常见的 HT…

Java客户端调用Websocket服务端(Springboot)

代码示例 步骤1 今天使用Java客户端调用Websocket服务端 以下是客户端代码&#xff1a; import com.sinosoft.springbootplus.lft.business.dispatch.map.application.service.impl.LawEnforceSosServiceImpl; import com.sinosoft.springbootplus.lft.business.dispatch.ma…

Android Gradle 开发与应用 (一) : Gradle基础

1. Gradle是什么 Gradle是一个通用的构建工具&#xff0c;支持诸多主要的 IDE&#xff0c;包括 Android Studio、IntelliJ IDEA、Visual Studio 等 Gradle 的底层实现(核心引擎和框架)其实是用 Java 编写的开发者通常使用 Groovy 或 Kotlin 来编写构建脚本 1.1 那么为什么Gra…

C语言编程风格规范-1

目的 良好的代码编写风格是高质量代码的一部分,统一的、良好的代码编写规范,使代码更具可读性与可维护性。本文综合了国内各大厂的编码规范,各取各大厂的各规范中的要点与精华,汇聚成此文档。 文件 2.1 所有文件统一使用 utf-8 编码 2.2 包含头文件时,建议相同模块的头文件…

Docker的常用命令

Docker的常用命令 Docker是一个开源的应用容器引擎&#xff0c;它使得开发者能够打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间没有任何接口&#xff…