众所周知,易语言支持库自带"连接发信服务器()","断开发信服务器()"命令...
但经过实践应用,连接与断开存在不稳定因素,目前暂不得知原由..会导致发信25端口占用卡住,最终切断全部网络连接..
经过查阅资料,得出另外一种发信方式,其原理是用客户组件,连接smtp服务器,一步一步判断返回值并发送数据..具体参看源码!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
.版本 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] = 取代码 (“=”, )
字符 [长度] = 取代码 (“=”, )
.否则
字符 [长度] = 取代码 (“=”, )
.如果结束
.如果真结束
返回 (到文本 (字符))
|
以上就是我们整理的关于发送信件写法的全部内容,感谢大家对服务器之家的支持。