眾所周知,易語言支持庫自帶"連接發信服務器()","斷開發信服務器()"命令...
但經過實踐應用,連接與斷開存在不穩定因素,目前暫不得知原由..會導致發信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] = 取代碼 (“=”, ) 字符 [長度] = 取代碼 (“=”, ) .否則 字符 [長度] = 取代碼 (“=”, ) .如果結束 .如果真結束 返回 (到文本 (字符)) |
以上就是我們整理的關于發送信件寫法的全部內容,感謝大家對服務器之家的支持。