温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

易语言如何实现发信

发布时间:2021-08-13 09:04:16 来源:亿速云 阅读:212 作者:小新 栏目:编程语言

小编给大家分享一下易语言如何实现发信,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

众所周知,易语言支持库自带"连接发信服务器()","断开发信服务器()"命令...

但经过实践应用,连接与断开存在不稳定因素,目前暂不得知原由..会导致发信25端口占用卡住,最终切断全部网络连接..

经过查阅资料,得出另外一种发信方式,其原理是用客户组件,连接smtp服务器,一步一步判断返回值并发送数据..具体参看源码!

.版本 2
.支持库 shell
.支持库 spec

.子程序 发送邮件通知
.参数 主题内容, 文本型
.局部变量 返回数据, 文本型

客户1.连接 (smtp, 25)
返回数据 = 到文本 (等待数据 ())
.如果真 (取文本左边 (返回数据, 3) ≠ “220”)
  断开 ()
  信息框 (“发送失败”, 0, )
  返回 ()
.如果真结束
发送字符 (“EHLO ” + smtp + #换行符) ' 服务器地址
返回数据 = 到文本 (等待数据 ())
.如果真 (取文本左边 (返回数据, 3) ≠ “250”)
  断开 ()
  信息框 (“发送失败”, 0, )
  返回 ()
.如果真结束
发送字符 (“auth login” + #换行符)
返回数据 = 到文本 (等待数据 ())
.如果真 (取文本左边 (返回数据, 3) ≠ “334”)
  断开 ()
  信息框 (“发送失败”, 0, )
  返回 ()
.如果真结束
发送字符 (BASE64编码 (到字节集 (id)) + #换行符) ' 邮箱账号
返回数据 = 到文本 (等待数据 ())
.如果真 (取文本左边 (返回数据, 3) ≠ “334”)
  断开 ()
  信息框 (“发送失败”, 0, )
  返回 ()
.如果真结束
发送字符 (BASE64编码 (到字节集 (password)) + #换行符) ' 密码
返回数据 = 到文本 (等待数据 ())
.如果真 (取文本左边 (返回数据, 3) ≠ “235”)
  断开 ()
  信息框 (“发送失败”, 0, )
  返回 ()
.如果真结束
发送字符 (“MAIL FROM: ” + “<” + id + “>” + #换行符) ' 发件人
返回数据 = 到文本 (等待数据 ())
.如果真 (取文本左边 (返回数据, 3) ≠ “250”)
  断开 ()
  信息框 (“发送失败”, 0, )
  返回 ()
.如果真结束
发送字符 (“RCPT TO: ” + “<” + email + “>” + #换行符) ' 收件人
返回数据 = 到文本 (等待数据 ())
.如果真 (取文本左边 (返回数据, 3) ≠ “250”)
  断开 ()
  信息框 (“发送失败”, 0, )
  返回 ()
.如果真结束
发送字符 (“DATA” + #换行符)
返回数据 = 到文本 (等待数据 ())
.如果真 (取文本左边 (返回数据, 3) ≠ “354”)
  断开 ()
  信息框 (“发送失败”, 0, )
  返回 ()
.如果真结束
发送字符 (“Subject: ” + 主题内容 + #换行符) ' 主题
发送字符 (“From:” + “<” + id + “>” + #换行符)
发送字符 (“To:” + “<” + email + “>” + #换行符)
发送字符 (#换行符)
发送字符 (主题内容 + #换行符) ' 正文
发送字符 (#换行符 + “.” + #换行符)
返回数据 = 到文本 (等待数据 ())
.如果真 (取文本左边 (返回数据, 3) ≠ “250”)
  信息框 (“发送失败”, 0, )
.如果真结束
断开 ()


.子程序 _客户1_数据到达

数据 = 客户1.取回数据 ()

.子程序 等待数据, 字节集
.局部变量 数据_, 字节集

.循环判断首 ()
  处理事件 ()
.循环判断尾 (数据 = { })
数据_ = 数据
数据 = { }
调试输出 (到文本 (数据_))
返回 (数据_)

.子程序 _客户1_连接断开

调试输出 (“连接断开” + #换行符)

.子程序 发送字符
.参数 字符, 文本型
.局部变量 i, 整数型

调试输出 (字符)
.计次循环首 (取文本长度 (字符), i)
  客户1.发送数据 (到字节集 (字符 (取代码 (字符, i))))
.计次循环尾 ()

.子程序 断开

发送字符 (“quit” + #换行符)
客户1.断开连接 ()

.子程序 BASE64编码, 文本型
.参数 待编码数据, 字节集, , 待编码字节集
.局部变量 余数
.局部变量 临时, 字节型, , "3"
.局部变量 变量
.局部变量 集合, 字节集
.局部变量 长度, 整数型
.局部变量 字符, 字节集
.局部变量 i

长度 = 取字节集长度 (待编码数据)
.如果真 (长度 < 1)
  返回 (“”)
.如果真结束
余数 = 长度 % 3
.如果真 (余数 > 0)
  待编码数据 = 待编码数据 + 取空白字节集 (3 - 余数)
.如果真结束
长度 = 取字节集长度 (待编码数据)
字符 = 取空白字节集 (长度 × 4 ÷ 3)
i = 1
集合 = 到字节集 (“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”)
.变量循环首 (1, 长度, 3, 变量)
  临时 [1] = 待编码数据 [变量]
  临时 [2] = 待编码数据 [变量 + 1]
  临时 [3] = 待编码数据 [变量 + 2]
  字符 [i] = 集合 [右移 (临时 [1], 2) + 1]
  字符 [i + 1] = 集合 [左移 (位与 (临时 [1], 3), 4) + 右移 (临时 [2], 4) + 1]
  字符 [i + 2] = 集合 [左移 (位与 (临时 [2], 15), 2) + 右移 (临时 [3], 6) + 1]
  字符 [i + 3] = 集合 [位与 (临时 [3], 63) + 1]
  i = i + 4
.变量循环尾 ()
.如果真 (余数 > 0)
  长度 = 取字节集长度 (字符)
  .如果 (余数 = 1)
    字符 [长度 - 1] = 取代码 (“=”, )
    字符 [长度] = 取代码 (“=”, )
  .否则
    字符 [长度] = 取代码 (“=”, )
  .如果结束

.如果真结束
返回 (到文本 (字符))

以上是“易语言如何实现发信”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI