邮件SMTP & ESMTP(命令行方式发送)
2013-08-01 21:44
441 查看
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;
}
}
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;
}
}
相关文章推荐
- 采用SmtpClient方式发送邮件,如果服务器的名字中有中文,会报"在邮件标头中找到无效的字符”"错误
- iOS-静默方式发送邮件(SKPSMTPMessage)
- 利用命令行使用smtp发送邮件
- javamail的smtp方式发送邮件实例
- mailx(mail)配置outlook SMTP方式发送邮件
- C# 发送邮件到smtp服务器错误:以一种访问权限不允许的方式做了个访问套接字的尝试
- javamail的smtp方式发送邮件实例
- 一个验证smtp方式发送邮件的php脚本
- C# Smtp方式发送邮件
- smtp&pop3认证邮件发送接收
- IIS+PHP下修改WordPress默认发送邮件方式为SMTP(免插件)
- php邮件发送的两种方式 smtp
- CentOS6.5通过mailx使用外部SMTPSSL的方式发送邮件
- CentOS安装mailx用命令以SMTP方式发送带附件邮件可用SSL
- Laravel 发送邮件(smtp方式最简单的讲解!)-邮件部分
- ASP.net下调用SmtpClient实现smtp方式邮件发送(带附件)
- PHP使用socket方式发送邮件,无需SMTP服务
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- 邮件发送失败( connection failed,Can't send command to SMTP host,Broken pipe)
- 可以支持auth的smtp发送邮件方式-ehlo