易语言发信写法讲解
众所周知,易语言支持库自带"连接发信服务器()","断开发信服务器()"命令...
但经过实践应用,连接与断开存在不稳定因素,目前暂不得知原由..会导致发信25端口占用卡住,最终切断全部网络连接..
经过查阅资料,得出另外一种发信方式,其原理是用客户组件,连接smtp服务器,一步一步判断返回值并发送数据..具体参看源码!
.版本2
.支持库shell
.支持库spec
.子程序发送邮件通知
.参数主题内容,文本型
.局部变量返回数据,文本型
客户1.连接(smtp,25)
返回数据=到文本(等待数据())
.如果真(取文本左边(返回数据,3)≠“220”)
断开()
信息框(“发送失败”,0,)
返回()
.如果真结束
发送字符(“EHLO”+smtp+#换行符)'服务器地址
返回数据=到文本(等待数据())
.如果真(取文本左边(返回数据,3)≠“250”)
断开()
信息框(“发送失败”,0,)
返回()
.如果真结束
发送字符(“authlogin”+#换行符)
返回数据=到文本(等待数据())
.如果真(取文本左边(返回数据,3)≠“334”)
断开()
信息框(“发送失败”,0,)
返回()
.如果真结束
发送字符(BASE64编码(到字节集(id))+#换行符)'邮箱账号
返回数据=到文本(等待数据())
.如果真(取文本左边(返回数据,3)≠“334”)
断开()
信息框(“发送失败”,0,)
返回()
.如果真结束
发送字符(BASE64编码(到字节集(password))+#换行符)'密码
返回数据=到文本(等待数据())
.如果真(取文本左边(返回数据,3)≠“235”)
断开()
信息框(“发送失败”,0,)
返回()
.如果真结束
发送字符(“MAILFROM:”+“<”+id+“>”+#换行符)'发件人
返回数据=到文本(等待数据())
.如果真(取文本左边(返回数据,3)≠“250”)
断开()
信息框(“发送失败”,0,)
返回()
.如果真结束
发送字符(“RCPTTO:”+“<”+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]=取代码(“=”,)
字符[长度]=取代码(“=”,)
.否则
字符[长度]=取代码(“=”,)
.如果结束
.如果真结束
返回(到文本(字符))
以上就是我们整理的关于发送信件写法的全部内容,感谢大家对毛票票的支持。