`
javasogo
  • 浏览: 1775795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ESMTP邮件发送程序

 
阅读更多

用汇编语言写ESMTP邮件发送程序

下载本节例子程序和源代码 (9.67 KB)

最近在CSDN论坛上看到许多人问着同一个问题——如何编写带服务器验证的 ESMTP 邮件发送程序,回答的人还真不少:有建议用 MAPI 的、有建议使用别人的类库的……其实我对此是颇不以为然的。ESMTP 的编写并不困难,关键是弄清楚了协议——只要严格按照协议来进行,就一定能OK,反而编程的技巧在此倒是无足轻重的。换句话说,写这个程序是Easy job,没有必要用到 MAPI 等“庞然大物”啊。

既然如此,让我们来使用 Win32ASM 编写一个自己的 ESMTP “引擎”,可以用在你的病毒或者木马上哦! :)

我们先来看看 SMTP 的发送协议,在 rfc821(smtp) 和 rfc1521(mime) 里面写得非常清楚,读者请自行参考这两个文档。什么?看不懂英文?……没关系,我给大家整理一下。ESMTP 的整个发送过程如下:

Socket连接后,按 ESMTP 协议通讯(注意每条命令结尾符“回车/换行/./回车/换行”结束):
1、EHLO <Domain>/r/n
这条命令可以不要,但是按照标准的写法,还是加上好。
Example: EHLO smtp.163.net/r/n
2、AUTH LOGIN/r/n
告诉服务器,要进行验证了。
3、Base64_Username/r/n
发送经过 Base64 编码的用户名给服务器。
4、Base64_Password/r/n
发送经过 Base64 编码的密码给服务器。
5、MAIL FROM:<email></email>/r/n
发送者的Email地址。
Example: MAIL FROM: lcother@163.net/r/n
6、RCPT TO:<email></email>/r/n
目标Email地址。
Example: RCPT TO: target@163.net/r/n
7、DATA/r/n
开始传送数据。
8、发送数据/r/n./r/n
注意:SMTP协议只发送信息,至于如何区分CC、BCC、Subject、Body等不属于SMTP的范围,详情请查看RFC文档MAIL格式部分
简单说一下MAIL格式:Sunject:<主题>/r/n/r/n<内容>,还有好多……
返回值为“250 ***”表示正常,同时***里含有MessageID等信息(前面的命令都有相应的返回信息)
9、QUIT/r/n
Over,走人……

上面的是 ESMTP 的协议,如果我们严格按照上面的协议,就可以写出 ESMTP 的发送程序了。大家看出来了吗?其实 ESMTP 与 SMTP 唯一不同的地方,就是在于第三步和第四步——缺少了这两个步骤, ESMTP 就等于 SMTP 了。

至于如何区分正文和附件,其实是在 DATA/r/n 后,通过一个叫做“Boundary”的分隔字符串来分隔开来的,这个“Boundary”可以是任意的字符串,随你喜欢怎么取都行,但是必须注意的是,分隔的时候要按照“--Boundary”的格式,结束的时候要用“--Boundary--”。而附件的内容,是通过 Base64 编码,包含在 DATA 里面进行发送;如果有多个附件,就要进行循环,把每个附件的内容包含进去,直至结束。

这样说会不会太抽象了?好吧,我举个例子:

"EHLO smtp.163.net", 13, 10
"AUTH LOGIN", 13, 10
"lcother", 13, 10
"lcother_password", 13, 10
"MAIL FROM:lcother@163.net", 13, 10
"RCPT TO:target@163.net", 13, 10
"DATA", 13, 10
"From: 老罗", 13, 10,/
"To: Somebody", 13, 10, /
"Subject: 你好吗?", 13, 10, 0
"MIME-Version: 1.0", 13, 10, /
"X-Mailer: LCMailer by LC", 13, 10, /
"Content-type:multipart/mixed;Boundary=www.LuoCong.com", 13, 10, 13, 10, /
"--www.LuoCong.com", 13, 10, /
"Content-type:text/plain;Charset=GB2312", 13, 10, /
"Content-Transfer-Encoding:8bit", 13, 10, 13, 10, /
"好久不见,最近过得好吗?(正文内容)", 13, 10, 13, 10, 0, /
.if (有附件)
"--www.luocong.com", 13, 10, /
.while (files to be sent)
13, 10, /
13, 10, /
"--", 13, 10, /
"Content-Type:application/octet-stream;Name=文件名", 0, /
"Content-Disposition:attachment;FileName=文件名", 0, /
13, 10, /
"Content-Transfer-Encoding:Base64", 13, 10, 13, 10, 0, /
经过 Base64 编码的文件内容, 13, 10, 0/
.endw
.endif
13, 10, /
"--www.luocong.com--", /
13, 10, ".", 13, 10
"QUIT", 13, 10
分享到:
评论

相关推荐

    ESMTP邮件发送器

    ESMTP邮件发送器 asm ;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ;程序作者:asm ;信息来源:红狼安全小组 ;如欲转载,请保持文章的完整性,并且注明作者等版权信息 ;红狼安全小组 ...

    发邮件源码

    用 VC+MFC 编写的 ESMTP 邮件发送程序

    邮件发送系统 v1.3

    ⒑ 支持需要认证的ESMTP邮件服务器 ⒒ 支持自动历史记录 ,电子杂志的好帮手 ⒓ 支持邮件发送等级的设置 ⒔ 支持无组件上传附件* ⒕ 支持.txt文本文件邮件地址发送与导入* ⒖ 支持.txt本本文件地址库直接发送...

    简邮邮件组件 调用一个函数就能实现用VB或VC发送邮件

    你是不是一直为了VC发送邮件或VB发送邮件发愁啊,有了它,简邮邮件发送组件,你就可以轻松的像调用windows api那样来实现或VC发送邮件了。内有详细的VB及VC调用源代码。 本组件(smtp.dll)通过smtp协议发送邮件(严格...

    动感在线邮件发送系统 v1.3.rar

    ⒑ 支持需要认证的ESMTP邮件服务器 ⒒ 支持自动历史记录 ,电子杂志的好帮手 ⒓ 支持邮件发送等级的设置 ⒔ 支持无组件上传附件* ⒕ 支持.txt文本文件邮件地址发送与导入* ⒖ 支持.txt本本文件地址库直接...

    邮件发送程序esmtp验证有详细注解(包含一个类,可以直接调用)

    我的联系方式maya-chen@163.com,需要更详细注释或交流的可以联系我qq:3917537注明编程讨论

    discuz邮件发送成功率提升办法

    3、下载改进后的邮件发送程序(x2版本) 上传到source/function/目录,覆盖原来的程序,如果你对本程序不信任,你可以将原来的function_mail.php改名 为什么?因为原版程序是从多个SMTP中随机选一个,改进后的程序...

    简单邮件协议实现程序

    用SMTP协议实现的邮件发送客户端,C#程序语言,可发送邮件。需要在邮件服务器进行SMTP协议设置。

    邮箱专家1.1正式版(Socket , C++,ESMTP编写)

    3:程序发送邮件的速度是其他类似程序5倍左右,是WEB10倍左右^_^; 4:程序根据你选择的文件夹,自动搜索文件,自动计算每次发送的大小,自动保存配置,邮箱密码加密保存; 5:发送邮箱必须提供SMTP服务,否则,不能...

    Python实现自动发送邮件功能

    Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。 SMTP通讯的基本流程可以概括为以下几点: 1.连接SMTP服务器 2.登陆用户名和密码 3....

    esmtp:Erlang SMTP 库

    esmtp - Erlang 的简单 SMTP 客户端esmtp 是一个简单的 OTP 应用程序,提供了一种从 erlang 系统发送电子邮件(和附件)的方法。配置esmtp 应用程序配置了 OTP 应用程序配置环境变量。 智能主机这是一个元组,给出了...

    精准邮件收集营销系统 v1.0.rar

    ⒑ 支持需要认证的ESMTP邮件服务器。 ⒒ 支持自动历史记录,电子杂志的好帮手。 ⒓ 支持邮件发送等级的设置。 ⒔ 支持无组件上传附件*。 ⒕ 支持.txt文本文件邮件地址发送与导入*。 ⒖ 支持.txt本本文件地址库...

    VC邮件发送类及程序示例

    内容索引:VC/C++源码,网络相关,发邮件 VC++自写的邮件发送类,并配了一个简单的发送邮件的小程序,设置邮件的服务器,用户名及密码、邮件标题及正文,完整邮件发送,esmtp验证有详细注释,这其中包含一个重用类,你...

    KooMail v2.92 简体中文版

    相对路径支持:如果邮件目录与程序目录相同则可以整体搬移到任何路径下 邮件定时发送 邮件源码编辑、邮件头修改等等 写信的邮件文本编辑、HTML网页编辑、HTML源码编辑 安全稳定的邮件存储 强大的邮件模板支持...

    Crypto-and-Stock-Tracker-Bot:加密货币和股票追踪器Bot

    Python提供了smtplib模块,该模块定义了一个SMTP客户端会话对象,该对象可用于通过SMTP或ESMTP侦听器守护程序将邮件发送到任何Internet计算机。SMTP参数: 主机:这是运行SMTP服务器的主机。 您可以指定主机的IP...

    VirtualAssistant

    VirtualAssistant-星期五1.0.0 MARVEL角色IRONMAN的模型虚拟助手 基本要求 任何具有最新版本的操作...smtplib-定义SMTP客户端会话对象,该对象可用于通过SMTP或ESMTP listner守护程序将邮件发送到任何Internet计算机。

    tmail:Golang SMTP服务器

    SMTPAUTH(普通邮件和cram-md5),用于接收/发送邮件 STARTTLS / SSL用于传入/传出连接。 可通过CLI或REST API进行管理。 DKIM支持签署外发邮件。 内置对clamav(开源防病毒扫描程序)的支持。 内置Dovecot...

Global site tag (gtag.js) - Google Analytics