SMTP电子邮件格式及源码解析

SMTP协议之电子邮件格式

以下是使用FOXMAIL接收邮件后,得到的邮件源码,包括正文和两个附件(.JPG, .TXT):


----------------------------------------------------------------

以下部分为邮件服务器添加的邮件头

----------------------------------------------------------------

Received:from m15-17.126.com (unknown [220.181.15.17])

         bymx10 (Coremail) with SMTP id PMCowECZWSfPlodRSu6NCw--.779S2;

         Mon,06 May 2013 19:41:03 +0800 (CST)

DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; // 域名密钥识别邮件标准,判断垃圾邮件

         s=s110527;h=Received:Date:From:To:Subject:Content-Type:

         MIME-Version:Message-ID; bh=B57Zfi/+wCVQ61kM9GVkCECk1ax4OZVQDtnW // 不是base64编码

         T4lS0x8=;b=XdeYidC7bR1a1l7x3yGAMiMR5ElDx2O4/db2iPrVc0dZ7Y7ANStu     // 不是base64编码

         6d9o4l9yVysfwk8vifb0eqyxV2wp28pIlfLEGZbDDpKaLMCaLAbVXdW+2hQl4ojd    // 不是base64编码

         sJ7NiAdF1j5X2N87wktFKA8ZK4lPhBYI1yFrNIT+PODg2NzF1CX2FDM=

Received: from zzzzyy91$126.com ( [202.205.103.22] ) by ajax-webmail-wmsvr17

 (Coremail) ; Mon, 6 May 2013 19:41:01 +0800(CST)

X-Originating-IP: [202.205.103.22]                //初始ip地址,同一电脑不同邮箱发邮件,该值相同

---------------------------------------------------------------------------------------------------------

DATA(以下内容由邮件客户端定义,为DATA命令后输入的内容)

灰色高亮为主要内容

--------------------------------------------------------------------------------------------------------

 

Date: Mon, 6 May2013 19:41:01 +0800 (CST)

From: [base64code]<zzzzyy91@126.com>

To: [emailaddress]

Subject: [base64 code]

X-Priority: [integer]                                          // 邮件优先级

X-Mailer: [Coremail Webmail Server Version SP_ntes V3.5 build      // 代理发信客户端

 20130412(21945.5326.5325) Copyright (c)2002-2013 www.mailtech.cn 126com]

X-CM-CTRLDATA: [base64 code]                           // X-邮件服务器自定义的信息段,未知作用

Content-Type:multipart/mixed;                               // 声明邮件内容格式

         boundary="----=_Part_354288_309861106.1367840461937"    // 声明邮件内容boundary

MIME-Version: 1.0                                          // 声明MIME版本

Message-ID: <>                                             // X-邮件服务器自定义的信息段

X-CM-TRANSID:                                             //X-邮件服务器自定义的信息段

X-CM-SenderInfo:                                           // X-邮件服务器自定义的信息段

X-Coremail-Antispam:                                       // X-邮件服务器自定义的信息段

 

---------------------------------------------------------

以下为邮件的内容

黄色高亮部分为内容说明语句和定界符

绿色高亮部分为邮件内容

蓝色高亮部分为附件内容

--------------------------------------------------------

 

------=_Part_354288_309861106.1367840461937                 //邮件内容开始

Content-Type: multipart/alternative;                           //邮件内容格式

         boundary="----=_Part_354290_1105600126.1367840461937" // 邮件正文boundary

 

------=_Part_354290_1105600126.1367840461937              //邮件正文boundary -- 正文开始

Content-Type: text/plain; charset=GBK                        // 邮件正文格式和字符集

Content-Transfer-Encoding: base64

 

[base64]mailcontent (plain)[base64]                         //邮件正文(文本格式)编码(base64

 

------=_Part_354290_1105600126.1367840461937              // 邮件正文boundary  --可选HTML格式

Content-Type: text/html; charset=GBK                        //邮件正文格式和字符集

Content-Transfer-Encoding: base64

 

[base64]mailcontent (html)[base64]                         //邮件正文(html格式)编码(base64

 

------=_Part_354290_1105600126.1367840461937--           // 邮件正文boundary -- 正文结束

 

 

------=_Part_354288_309861106.1367840461937             // 邮件内容boundary -- 附件1开始

Content-Type: image/jpeg; name="20130324_224528_982.jpg" // 附件格式及文件名

Content-Transfer-Encoding: base64

Content-Disposition: attachment;filename="20130324_224528_982.jpg"

 

[base64](.jpg)image attachment[base64]                         //附件-图片内容编码(base64

 

------=_Part_354288_309861106.1367840461937                  // 邮件内容boundary -- 附件2开始

Content-Type: text/plain; name="window data type.txt"            // 附件格式及文件名

Content-Transfer-Encoding: base64

Content-Disposition: attachment; filename="window datatype.txt"

 

[base64](.txt)plain attachment[base64]                         // 附件-文本内容编码(base64

 

------=_Part_354288_309861106.1367840461937--                // 邮件内容boundary  -- 附件结束

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。<br>第1章 Java基础 <br>1.1 转换基本数据类型 <br>1.2 Java的运算符 <br>1.3 控制程序的流程 <br>1.4 计算阶乘 <br>1.5 实现命令行程序 <br>第2章 Java面向对象程序设计 <br>2. 1 复数类 <br>2. 2 equals.chashCode和clone方法 <br>2. 3 Java的参数传递 <br>2. 4 自定义形状类 <br>2. 5 类的加载顺序 <br>2. 6 方法和变量在继承时的覆盖与隐藏 <br>2. 7 排序类 <br>2. 8 Singleton单例模式 <br>2. 9 Factory工厂模式 <br>2. 10 Adapter适配器模式 <br>第3章 数字 <br>3. 1 数字与数字封装类 <br>3. 2 格式化数字 <br>3. 3 数字的舍入 <br>3. 4 转换数字的进制 <br>3. 5 生成随机数 <br>3. 6 处理大数字 <br>第4章 数组与集合 <br>4. 1 使用Arrays <br>4. 2 求质数. <br>4. 3 动态调整数组长度 <br>4. 4 矩阵 <br>4. 5 ArrayList. Vector和LinkedList <br>4. 6 生成不重复的随机数序列 <br>4. 7 自定义队列 <br>4. 8 对List排序 <br>4. 9 HashSet. LinkedHashSet和TreeSet <br>4. 10 列表. 集合与数组的互相转换 <br>4. 11 HashMap. Hashtable. LinkedHashMap和TreeMap <br>4. 12 对Map排序 <br>4. 13 Properties属性文件 <br>第5章 字符串 <br>5. 1 使用String <br>5. 2 基本数据类型与字符串的转化 <br>5. 3 判断Java标识符 <br>5. 4 使用StringBuffer <br>5. 5 IP地址转化成整数 <br>5. 6 18位身份证格式验证 <br>5. 7 表达式解析器 <br>5. 8 字符串编码的转换 <br>5. 9 字符串对齐器 <br>5. 10 密码加密与验证 <br>5. 11 制作命令行程序 <br>5. 12 使用StringTokenizer <br>5. 13 使用正则表达式操作字符串 <br>5. 14 使用正则表达式验证电话号码的格式 <br>第6章 Java异常处理 <br>6. 1 throw. throws. try和catch <br>6. 2 自定义异常类 <br>6. 3 使用finally <br>6. 4 使用异常的技巧与原则 <br>第7章 IO——输入输出流 <br>7. 1 获取文件的属性信息 <br>7. 2 列出指定目录下的文件 <br>7. 3 创建文件和目录 <br>7. 4 删除文件和目录 <br>7. 5 移动文件和目录 <br>7. 6 复制文件和目录 <br>7. 7 一个简单的文件搜索器 <br>7. 8 读文件 <br>7. 9 写文件 <br>7. 10 添加内容到文件尾 <br>7. 11 文件的分割与合并 <br>7. 12 从键盘接收数据并输出到文件 <br>7. 13 使用StreamTokenizer统计文件的字符数 <br>7. 14 序列化和反序列化对象 <br>7. 15 控制对象的序列化和反序列 <br>7. 16 读jar包的资源文件 <br>7. 17 用Zip格式压缩和解压缩文件 <br>7. 18 操作Excel文件 <br>7. 19 操作PDF文件 <br>7. 20 自定义日志文件类 <br>第8章 线程 <br>8. 1 定义和启动线程 <br>8. 2 停止线程 <br>8. 3 线程的互斥 <br>8. 4 线程的协作 <br>8. 5 线程join <br>8. 6 生产者. 消费者问题 <br>8. 7 线程优先级 <br>8. 8 列出虚拟机中所有的线程 <br>8. 9 守护线程Daemon <br>8. 10 线程池 <br>8. 11 一个死锁的例子 <br>8. 12 定时器Timer <br>第9章 Java GUI <br>9. 1 日历 <br>9. 2 开窗户游戏 <br>9. 3 标准型计算器 <br>9. 4 更改组件的外观 <br>9. 5 自定义对话框 <br>9. 6 制作欢迎画面 <br>9. 7 一个简单的编辑器 <br>9. 8 Swing的Drag和Drop <br>第10章 Java图形 <br>10. 1 一个圆形的按钮 <br>10. 2 捕捉屏幕 <br>10. 3 缩放图片 <br>10. 4 2D图形 <br>10. 5 3D图形.. <br>10. 6 一个时钟程序 <br>第11章 Java多媒体 <br>11. 1 滚动的消息 <br>11. 2 三维弹球 <br>11. 3 贪吃蛇游戏 <br>11. 4 Java声音处理 <br>11. 5 媒体播放器 <br>第12章 反射 <br>12. 1 instanceof操作符 <br>12. 2 获取类的信息 <br>12. 3 动态调用类的方法 <br>第13章 网络编程 <br>13. 1 获取URL的信息 <br>13. 2 Web浏览器 <br>13. 3 获取IP地址和域名 <br>13. 4 HTTP客户端 <br>13. 5 基本的Socket编程 <br>13. 6 HTTP服务器 <br>13. 7 一个支持多线程的服务器框架 <br>13. 8 代理服务器 <br>13. 9 Telnet客户端 <br>13. 10 UDP编程 <br>13. 11 聊天室服务器端 <br>13. 12 聊天室客户端 <br>13. 13 FTP客户端 <br>第14章 数据库 <br>14. 1 连接各种数据库 <br>14. 2 获得数据库和表的元数据 <br>14. 3 查询和更新数据库 <br>14. 4 批处理 <br>14. 5 提交与回滚事务 <br>14. 6 使用PreparedStatement <br>14. 7 读写二进制数据 <br>14. 8 读写Blob数据 <br>14. 9 使用ResultSet更新数据库 <br>14. 10 使用RowSet <br>14. 11 调用存储过程 <br>14. 12 一个数据库连接池 <br>第15章 Applet <br>15. 1 Applet时钟 <br>15. 2 处理鼠标和键盘事件 <br>15. 3 英文打字游戏 <br>15. 4 Applet间通信 <br>15. 5 汉诺塔游戏 <br>第16章 J2SE 5. 0新特性 <br>16. 1 自动装箱和拆箱 <br>16. 2 新的for循环 <br>16. 3 枚举类型 <br>16. 4 静态导入 <br>16. 5 可变长参数Varargs <br>16. 6 格式化输出 <br>16. 7 使用ProcessBuilder执行本地命令 <br>16. 8 泛型编程 <br>16. 9 注释功能Annotation <br>16. 10 监控与管理虚拟机 <br>16. 11 线程——Callable和Future <br>16. 12 线程——任务执行架构 <br>16. 13 线程——锁Lock <br>16. 14 线程——条件Condition <br>16. 15 线程——Semaphore <br>16. 16 线程——CountDownLatch <br>16. 17 线程——Cycli Barrier <br>16. 18 线程——Exchanger <br>16. 19 线程——BlockingQueue <br>第17章 Java与XML <br>17. 1 用DOM处理XML文档 <br>17. 2 用SAX处理XML文档 <br>17. 3 用XSLT转换XML <br>17. 4 对象与XML的转换 <br>第18章 Java Mail <br>18. 1 使用SMTP协议发送简单邮件 <br>18. 2 发送带附件的邮件 <br>18. 3 给多人发送邮件 <br>18. 4 使用POP3接收邮件 <br>第19章 JSP与Servlet <br>19. 1 获取客户端的真实IP地址 <br>19. 2 设置矛口读取Cookie <br>19. 3 JSP无刷新聊天室 <br>19. 4 上传文件 <br>19. 5 用Servlet生成图形验证码 <br>19. 6 用Servlet实现分页查看数据库 <br>
Moodle 2.8.2 更新日志:2015-01-12 亮点 •MDL-40241 - 默认经理和教师的作用是能够手动标记当然已完成 •MDL-46442 - 关于分配重新提交发送通知 •MDL-43462 - EditPDF正确显示PDF文件景观 •MDL-43679 - 点击链接的Moodle在MS Word不再结果“你已经登录”消息 功能变化 •MDL-42717 - 确保自动备份文件被删除时出现错误时,因为目录的权限 •MDL-47601 - 确保旧的自动备份删除,包括案件时,文件名是从语言的字符串改名 •MDL-48023 - 改变“缓存控制:私人”到“公开”的公共静态文件,以提高性能 •MDL-48224 - 在任务API,每个即席和预定的任务,现在有它自己的SMTP的缓冲区,而传统的cron有一个缓冲的所有任务。此前预定的任务没有缓冲区,而传统的cron有一个缓冲区只用于活动模块的任务。 •MDL-33606 - 让所有的部分课程观,单节过程中查看日志条目之间的区别 API的变化 •MDL-44657 - 当窗体类被命名空间没有更多的javascript错误 •MDL-22309 - get_role_users()正常工作,当用户分配多个角色 •MDL-48697 - 完成目录由Moodle的识别为有效成分目录 •MDL-48495 - 支持卷曲默认限制协议 UI变化 •MDL-35078 - 结束日期自登记大宗报名表上现在还包含时间 •MDL-42501 - 增加了关于删除成绩在使用过程中的复位形式帮助 •MDL-48206 - 在注释块中的注释文本域更宽 安全问题 许多与安全相关的问题得到解决。这些问题的细节将被释放一段大约一周后,使系统管理员能够安全地更新到最新版本。 修复和改进 •MDL-40097 - 课程完成角色的标准不再导致致命错误 •MDL-35494 - 当他们自己只有一门课程的用户能够连恢复活动 •MDL-20304 - 实践课没有出现在成绩册[补丁] •MDL-45324 - 分级通知的成绩被释放到学生之前都不会发送 •MDL-47133 - 阿托中的键盘快捷键不与区域键盘设置干扰 •MDL-37704 - 可能锁定在用户的配置文件说明字段 •MDL-36240 - 从活动日历事件没有用户数据,甚至恢复 •MDL-14908 - 家长角色可以查看课程的学生在组 •MDL-46472 - 造成不可删除的主题固定循环升级 •MDL-31822 - 非默认段名显示在网站级别 •MDL-47475 - PDF批注是所有学生在团队中可见,而不是仅由谁做了一个提交一个 •MDL-47993,MDL-48088 - 正确地从微软日历导入时解析日期与时区 •MDL-48150 - 修正了一个错误即只有在一个论坛上的第一个职位是正确的标题上发送的cron每次运行 •MDL-48288,MDL-48191 - 平地机报告的浮动头正常工作时,电子邮件或平均行被隐藏 •MDL-48179 - 备份进度不再超时,压缩大型备份时, •MDL-48164 - “回复电子邮件”不会导致外出的答复张贴在论坛   Moodle是一个开源课程管理系统,也被称为学习管理系统(LMS)或虚拟学习环境(VLE)。它已成为深受世界各地教育工作者喜爱的一种为学生建立网上动态网站的工具。     相关阅读 同类推荐:站长常用源码
Golang提供了smtp包,可以用于构建SMTP邮件解析服务。SMTP(简单邮件传输协议)是用于电子邮件传输的标准协议。使用SMTP包,我们可以编写一个程序,用于接收和解析传入的电子邮件。 首先,我们需要导入smtp包,并创建一个监听SMTP服务器的实例。使用Listen函数,我们可以指定监听的端口和地址。然后,我们可以调用Accept方法,等待客户端连接。 一旦接收到连接,我们可以使用来自smtp包的Parse方法解析传入的邮件。Parse方法接收一个io.Reader类型的参数,我们可以使用它来从连接中读取邮件内容。解析后的邮件将被返回为Mail类型的结构体,其中包含发件人、收件人、主题和正文等信息。 我们可以根据需要对解析出的邮件进行处理。例如,可以提取发件人、收件人和主题等信息,以进行进一步的逻辑操作。我们还可以从Mail类型的结构体中获取正文和附件等内容。 在处理完邮件后,我们可以通过调用Close方法来关闭与客户端的连接。 在实际使用中,我们可以将这个SMTP邮件解析服务与其他功能结合起来,例如自动回复、自动转发或将邮件保存到数据库中等。通过利用Golang的并发特性,我们可以实现同时处理多个邮件的能力,从而提高邮件处理的效率。 总之,利用Golang的smtp包,我们可以快速搭建一个SMTP邮件解析服务。无论是构建自己的邮件系统,还是对接第三方服务,该解析服务都可以帮助我们方便地处理和管理传入的电子邮件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值