telnet mail.xxx.com 25
HELO mail.xxx.com

MAIL FROM:sender@xxx.com
RCPT TO: recver@xxx.com
DATA
Subject: =?utf-8?B?6YKu5Lu25rWL6K+V?=
From: "sender" <sender@xxx.com>
To: "recver" <recver@xxx.com>
MIME-Version: 1.0
Content-Type: text/html;
Content-Transfer-Encoding: 8bit

<html>
<head>
<title>Title of page</title>
</head>
<body>
<b>mail<b>
</body>
</html> 
.

=========ESMTP============

参考【http://blog.csdn.net/hsstc/article/details/8936066】

本人测试用的是HW内网的mail.huawei.com

-> 符号代表一个回车,即一次发送

本测试邮件发送发送的是一个加粗的字体

telnet mail.huawei.com 25 ->
EHLO mail.huawei.com ->
AUTH LOGIN ->
YzAwMTgyMzg5 ->
QzM4OS5DT00= ->
MAIL FROM:sender@xxx.com ->
RCPT TO: recver@xxx.com ->
DATA ->
Subject: =?utf-8?B?6YKu5Lu25rWL6K+V?=
From: "sender" <sender@xxx.com>
To: "recv" <recv@xxx.com>
MIME-Version: 1.0
Content-Type: text/html;
Content-Transfer-Encoding: 8bit

<html>
<head>
<title>Title of page</title>
</head>
<body>
<b>mail<b>
</body>
</html> 
.
 ->
quit ->

============SMTP-关于邮件编码的格式 ==============
http://blog.csdn.net/ljmwork/article/details/7871694

最近接触到网易的闪电邮客户端程序,发现它发邮件时,标题的编码方式与Foxmail不一样,如:

网易闪电邮:Subject: =?utf-8?B?6YKu5Lu25rWL6K+V?=
Foxmail: Subject: =?gbk?B?08q8/rLiytQ=?=

从网上收集了一些这方面的一些资源,整理如下:
邮件编码分了3段,=?和?=是开始和结束标记,中间的问号是间隔符
第一段:utf-8或者gbk,表示原来页面的编码方式
第二段:B是表示邮件的编码方式为base64

第三段:08q8/rLiytQ= 或者 6YKu5Lu25rWL6K+V 表示标题的内容,但是经过Base64编码了

================

/**
*   BASE64编码 来自CSDN某个人公布,版权未知
*/
const unsigned char BASE64_PADDING='=';  //输入数据不足3的倍数时输出字符后面填充'='号  
const unsigned char BASE64_CODE[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";  
//使用64字节的表  
void base64_encode(const void* pdata,const unsigned long data_size,void* out_pcode)  
{  
    const unsigned char* input=(const unsigned char*)pdata;  
    const unsigned char* input_end=&input[data_size];  
    unsigned char*       output=(unsigned char*)out_pcode;  
    for(;input+2<input_end;input+=3,output+=4)  
    {  
        output[0]=BASE64_CODE[   input[0] >> 2 ];  
        output[1]=BASE64_CODE[ ((input[0] << 4) | (input[1] >> 4)) & 0x3F];  
        output[2]=BASE64_CODE[ ((input[1] << 2) | (input[2] >> 6)) & 0x3F ];  
        output[3]=BASE64_CODE[   input[2] & 0x3F];  
    }  
    unsigned long bord_width=input_end-input;  
    if (bord_width==1)  
    {  
        output[0]=BASE64_CODE[   input[0] >> 2 ];  
        output[1]=BASE64_CODE[  (input[0] << 4) & 0x3F ];  
        output[2]=BASE64_PADDING;  
        output[3]=BASE64_PADDING;  
    }  
    else if (bord_width==2)
    {  
        output[0]=BASE64_CODE[   input[0] >> 2 ];  
        output[1]=BASE64_CODE[ ((input[0] << 4) | (input[1] >> 4)) & 0x3F ];  
        output[2]=BASE64_CODE[  (input[1] << 2) & 0x3F ];  
        output[3]=BASE64_PADDING;  
    }  
}

邮件SMTP ESMTP(命令行方式发送)相关推荐

  1. openstack云计算平台 2(计算服务、Networking 服务、命令行方式启动实例)

    目录 一.组件3-计算服务 1.简介 2.安装并配置控制节点 3.安装并配置计算节点 4.验证操作 二.组件4-Networking 服务 1.简介 2.安装并配置控制节点 3.控制节点配置网络选项- ...

  2. Ubuntu安装GVM-11并使用gvm-tools命令行方式通讯

    Ubuntu安装GVM-11并使用gvm-tools命令行方式通讯 很感谢这位大哥提供的帮助:[https://www.cnblogs.com/blueyunchao0618/p/11475339.h ...

  3. 使用SMTP协议命令行发送邮件

    使用SMTP协议命令行发送邮件 SMTP命令不区分大小写 SMTP界面字母输错后,只能回车,重新输入 一.使用telnet远程登录到邮件服务器 这里以网易邮箱(smtp.163.com)为例 teln ...

  4. 达梦数据库数据守护集群搭建(命令行方式)

    文章目录 达梦数据守护集群介绍 一.前提 二.环境准备 1.数据守护集群搭建 2.配置过程 达梦数据守护集群介绍 达梦数据守护集群软件(DM Data Watch)是一种集成化的高可靠性解决方案,该方 ...

  5. ECS(Linux)连接RDS,使用命令行方式连接实例

    使用命令行方式连接实例 通过命令行连接RDS MySQL数据库,连接方式如下: mysql -h<连接地址> -P<端口> -u<用户名> -p -D<数据库 ...

  6. 如何使用cmd进入打印机选项_怎样用命令行方式添加打印机端口? (已解决)

    命令行方式添加打印机是比较简单的,现在我的问题是这样的, 有一台网络打印机,用下面附录的方式安装驱动程序是没有问题的, 一个DOS命令就可以搞定,但是需要创建一个TCP/IP 的端口,即不是 用的LP ...

  7. centos oracle命令,CentOS7命令行方式搭建Oracle11gR2

    CentOS7命令行方式搭建Oracle11gR2 CentOS7命令行方式搭建Oracle11gR2 准备工作 vim /etc/selinux/config SELINUX=disabled sy ...

  8. mysql命令行方式添加用户及设置权限

    以前总是喜欢通过phpmyadmin去添加用户和数据库,这次装完系统后,配置了一大堆东东,实在不想安装phpmyadmin了,就通过命令行方式创建了数据库和设置权限,记录一下,免得以后总是百度 关键步 ...

  9. shp2sde命令行方式向arcsde批量导入数据脚本的生成步骤

    shp2sde命令行方式向arcsde批量导入数据脚本的生成步骤  作者:半块点心  出处:GIS动力站原 1.在dos提示符下执行: FOR /F "eol=; tokens=1,2,3, ...

最新文章

  1. day04_07-三个函数的区别
  2. db2-存储过程word版
  3. 何恺明最新工作:简单实用的自监督学习方案MAE,ImageNet-1K 87.8%
  4. mysql只能查询出1000条数据_MySQL SELECT语句中只能输出1000行数据的原因
  5. [转载]ios简单sqlite使用
  6. KPI总结模板:How
  7. ZOJ 3735 Josephina and RPG
  8. Spring Boot –如何跳过缓存thyemeleaf模板,js,css等以每次绕过重启服务器
  9. echarts的tree怎么控制位置_自动化考研保研面试—线性系统控制器设计
  10. python递归查找_[Python]递归查找文件(最简洁)
  11. php给一个参数布尔值,php – 布尔值和字符串条件
  12. 【编译器】VSCode配置Go语言开发环境
  13. 一次redis乱用导致的事故现场
  14. 调用虚拟内存编译时的error处理
  15. 在线常用正则表达式可视化生成与测试工具与示例 Regular Expression
  16. windows系统下itunes的备份路径修改
  17. 【Python】简单判定身份证是否合法、性别
  18. 针式打印机偏移测试软件,精打教程(3)打印机打印偏移设置
  19. HTML5 CSS3初学者指南(2) – 样式化第一个网页
  20. 毗邻华尔街,哥伦比亚大学、纽约大学如何将金融科技的理论与实践结合?

热门文章

  1. dpdk pktgen发包工具使用
  2. Qt向MySQL中插入图片
  3. postman与fiddler
  4. Shell攻关之运算符
  5. JAVA父类引用指向子类的对象是什么意思?有什么作用?
  6. linux怎么sftp传文件,Linux 如何使用SFTP命令传输文件
  7. QT QML 与C++ 混合编程
  8. 什么是开发环境、测试环境、UAT环境、仿真环境、生产环境?
  9. java--类单继承多实现,接口多继承
  10. sql内连接、左连接、右连接以及全连接查询