源码程序使用易语言客户组件向QQ邮箱发送消息实现邮件发送功能。
.版本 2
.支持库 spec
.程序集 窗口程序集1
.程序集变量 cishu, 整数型
.子程序 _按钮1_被单击
客户1.连接 (“smtp.qq.com”, 25)
.子程序 _客户1_数据到达
.局部变量 kk, 文本型
.局部变量 pp, 文本型
.局部变量 pp2, 文本型
.局部变量 date, 文本型
kk = 到文本 (客户1.取回数据 ())
调试输出 (到文本 (客户1.取回数据 ()))
.如果 (kk = “220 smtp.qq.com Esmtp QQ Mail Server” + #换行符)
客户1.发送数据 (“HELO smtp.qq.com” + #换行符)
.否则
.如果结束
.如果 (kk = “250 smtp.qq.com” + #换行符)
客户1.发送数据 (“AUTH LOGIN” + #换行符)
.否则
.如果结束
.如果 (kk = “334 VXNlcm5hbWU6” + #换行符)
客户1.发送数据 (BASE64编码 (到字节集 (“[email protected]”)) + #换行符)
.否则
.如果结束
.如果 (kk = “334 UGFzc3dvcmQ6” + #换行符)
客户1.发送数据 (BASE64编码 (到字节集 (“”)) + #换行符)
.否则
.如果结束
.如果 (kk = “235 Authentication successful” + #换行符)
客户1.发送数据 (“MAIL FROM:<[email protected]>” + #换行符)
.否则
.如果结束
调试输出 (cishu)
.如果 (kk = “250 Ok” + #换行符)
.如果 (cishu ≠ 1 或 cishu ≠ 0)
.如果 (cishu = 2)
客户1.发送数据 (“RCPT TO:<[email protected]> ” + #换行符)
.否则
客户1.发送数据 (“MAIL FROM:<[email protected]>” + #换行符)
.如果结束
.如果 (cishu = 3)
客户1.发送数据 (“DATA ” + #换行符)
.否则
.如果结束
.否则
客户1.发送数据 (“RCPT TO:<[email protected]> ” + #换行符)
.如果结束
cishu = 1 + cishu
.否则
.如果结束
.如果 (kk = “354 End data with <CR><LF>.<CR><LF>” + #换行符)
date = BASE64编码 (读入文件 (“E:\2.jpg”))
客户1.发送数据 (“FROM:<[email protected]>” + #换行符 + “to:<[email protected]>” + #换行符 + “subject:hello,you!” + #换行符 + “MIME_Version: 1.0” + #换行符 + “Content-type: text/html” + #换行符 + “Content-Transfer-Encoding: quoted-printable” + #换行符 + “X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157” + #换行符 + #换行符)
pp2 = “<!DOCTYPE HTML>” + #换行符 + “<html>” + #换行符 + “<HEAD>” + #换行符 + “<META HTTP-EQUIV=3D” + #双引号左 + “Content-Type” + #双引号右 + “ ” + “CONTENT=3D” + #双引号左 + “text/html; charset=gb2312” + #双引号右 + “>” + #换行符 + “</HEAD>” + #换行符 + “<body><a href= //www.baidu.com target= _blank>wo ce shi yixia</a> ” + “<img src='data:image/jpeg;base64, ” + date + “' alt='abc.jpg' /> ” + #换行符 + “</body></html>” + #换行符 + “.” + #换行符
客户1.发送数据 (pp2)
.否则
.如果结束
.如果 (kk = “250 Ok: queued as ” + #换行符)
客户1.发送数据 (“quit” + #换行符)
.否则
.如果结束
' “ Content-Type: application/octet-stream;” + #换行符 + “ name=” + #双引号左 + “eeeeee.e” + #双引号右 + #换行符 + “Content-Disposition: attachment; filename='eeeeee.e'” + BASE64编码 (读入文件 (“E:\eeeeee.e”)) + #双引号右
' '最主要的就是 Content-Type: text/html; Content-Transfer-Encoding: base64类型和编码
' 其实完全不用不懂网页的话,你就找网页吧他BASE64编码,然后 个两行 把编码粘进去不过先要声明Content-Type和编码
.子程序 BASE64编码, 文本型
.参数 二进制数据, 字节集, 参考
.局部变量 数据长度
.局部变量 整倍数
.局部变量 X
.局部变量 编码文本, 文本型
.局部变量 行字数
.局部变量 三字节, 字节集
.局部变量 三字节组, 字节型, , "3"
.局部变量 四字节组, 字节型, , "4"
.局部变量 n
.局部变量 编码值
.局部变量 xx
数据长度 = 取字节集长度 (二进制数据)
xx = 取启动时间 ()
整倍数 = 数据长度 \ 3
.如果真 (数据长度 % 3 ≠ 0)
整倍数 = 整倍数 + 1
.如果真结束
.计次循环首 (整倍数, X)
三字节 = 取字节集中间 (二进制数据, (X - 1) × 3 + 1, 3)
.计次循环首 (3, n)
三字节组 [n] = 取字节集数据 (取字节集中间 (三字节, n, 1), #字节型, )
.计次循环尾 ()
四字节组 [1] = 位与 (三字节组 [1], 252) ÷ 4
四字节组 [2] = 位或 (位与 (三字节组 [1], 3) × 16, 三字节组 [2] ÷ 16)
四字节组 [3] = 位或 (位与 (三字节组 [2], 15) × 4, 三字节组 [3] ÷ 64)
四字节组 [4] = 位与 (三字节组 [3], 63)
.计次循环首 (取字节集长度 (三字节) + 1, n) ' 这里循环次数不用3,而用实际长度,考虑到数据长度不总是3的整倍数
编码值 = 四字节组 [n] + 1
四字节组 [n] = 取代码 (“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”, 编码值)
处理事件 ()
.计次循环尾 ()
编码文本 = 编码文本 + 到文本 (四字节组)
行字数 = 行字数 + 4
.如果真 (行字数 = 76)
行字数 = 0
编码文本 = 编码文本 + #换行符
.如果真结束
处理事件 ()
.计次循环尾 ()
.如果真 (n < 5) ' 如果编码文本长度不是4的整倍数,后面补"="
编码文本 = 编码文本 + 取重复文本 (5 - n, “=”)
.如果真结束
输出调试文本 (到文本 (取启动时间 () - xx))
返回 (编码文本)