眾所周知,易語言支持庫自帶"連接發(fā)信服務器()","斷開發(fā)信服務器()"命令...
但經過實踐應用,連接與斷開存在不穩(wěn)定因素,目前暫不得知原由..會導致發(fā)信25端口占用卡住,最終切斷全部網絡連接..
經過查閱資料,得出另外一種發(fā)信方式,其原理是用客戶組件,連接smtp服務器,一步一步判斷返回值并發(fā)送數據..具體參看源碼!
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 .子程序 發(fā)送郵件通知 .參數 主題內容, 文本型 .局部變量 返回數據, 文本型 客戶1.連接 (smtp, 25) 返回數據 = 到文本 (等待數據 ()) .如果真 (取文本左邊 (返回數據, 3) ≠ “220”) 斷開 () 信息框 (“發(fā)送失敗”, 0, ) 返回 () .如果真結束 發(fā)送字符 (“EHLO ” + smtp + #換行符) ' 服務器地址 返回數據 = 到文本 (等待數據 ()) .如果真 (取文本左邊 (返回數據, 3) ≠ “250”) 斷開 () 信息框 (“發(fā)送失敗”, 0, ) 返回 () .如果真結束 發(fā)送字符 (“auth login” + #換行符) 返回數據 = 到文本 (等待數據 ()) .如果真 (取文本左邊 (返回數據, 3) ≠ “334”) 斷開 () 信息框 (“發(fā)送失敗”, 0, ) 返回 () .如果真結束 發(fā)送字符 (BASE64編碼 (到字節(jié)集 (id)) + #換行符) ' 郵箱賬號 返回數據 = 到文本 (等待數據 ()) .如果真 (取文本左邊 (返回數據, 3) ≠ “334”) 斷開 () 信息框 (“發(fā)送失敗”, 0, ) 返回 () .如果真結束 發(fā)送字符 (BASE64編碼 (到字節(jié)集 (password)) + #換行符) ' 密碼 返回數據 = 到文本 (等待數據 ()) .如果真 (取文本左邊 (返回數據, 3) ≠ “235”) 斷開 () 信息框 (“發(fā)送失敗”, 0, ) 返回 () .如果真結束 發(fā)送字符 (“MAIL FROM: ” + “<” + id + “>” + #換行符) ' 發(fā)件人 返回數據 = 到文本 (等待數據 ()) .如果真 (取文本左邊 (返回數據, 3) ≠ “250”) 斷開 () 信息框 (“發(fā)送失敗”, 0, ) 返回 () .如果真結束 發(fā)送字符 (“RCPT TO: ” + “<” + email + “>” + #換行符) ' 收件人 返回數據 = 到文本 (等待數據 ()) .如果真 (取文本左邊 (返回數據, 3) ≠ “250”) 斷開 () 信息框 (“發(fā)送失敗”, 0, ) 返回 () .如果真結束 發(fā)送字符 (“DATA” + #換行符) 返回數據 = 到文本 (等待數據 ()) .如果真 (取文本左邊 (返回數據, 3) ≠ “354”) 斷開 () 信息框 (“發(fā)送失敗”, 0, ) 返回 () .如果真結束 發(fā)送字符 (“Subject: ” + 主題內容 + #換行符) ' 主題 發(fā)送字符 (“From:” + “<” + id + “>” + #換行符) 發(fā)送字符 (“To:” + “<” + email + “>” + #換行符) 發(fā)送字符 (#換行符) 發(fā)送字符 (主題內容 + #換行符) ' 正文 發(fā)送字符 (#換行符 + “.” + #換行符) 返回數據 = 到文本 (等待數據 ()) .如果真 (取文本左邊 (返回數據, 3) ≠ “250”) 信息框 (“發(fā)送失敗”, 0, ) .如果真結束 斷開 () .子程序 _客戶1_數據到達 數據 = 客戶1.取回數據 () .子程序 等待數據, 字節(jié)集 .局部變量 數據_, 字節(jié)集 .循環(huán)判斷首 () 處理事件 () .循環(huán)判斷尾 (數據 = { }) 數據_ = 數據 數據 = { } 調試輸出 (到文本 (數據_)) 返回 (數據_) .子程序 _客戶1_連接斷開 調試輸出 (“連接斷開” + #換行符) .子程序 發(fā)送字符 .參數 字符, 文本型 .局部變量 i, 整數型 調試輸出 (字符) .計次循環(huán)首 (取文本長度 (字符), i) 客戶1.發(fā)送數據 (到字節(jié)集 (字符 (取代碼 (字符, i)))) .計次循環(huán)尾 () .子程序 斷開 發(fā)送字符 (“quit” + #換行符) 客戶1.斷開連接 () .子程序 BASE64編碼, 文本型 .參數 待編碼數據, 字節(jié)集, , 待編碼字節(jié)集 .局部變量 余數 .局部變量 臨時, 字節(jié)型, , "3" .局部變量 變量 .局部變量 集合, 字節(jié)集 .局部變量 長度, 整數型 .局部變量 字符, 字節(jié)集 .局部變量 i 長度 = 取字節(jié)集長度 (待編碼數據) .如果真 (長度 < 1) 返回 (“”) .如果真結束 余數 = 長度 % 3 .如果真 (余數 > 0) 待編碼數據 = 待編碼數據 + 取空白字節(jié)集 (3 - 余數) .如果真結束 長度 = 取字節(jié)集長度 (待編碼數據) 字符 = 取空白字節(jié)集 (長度 × 4 ÷ 3) i = 1 集合 = 到字節(jié)集 (“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”) .變量循環(huán)首 (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 .變量循環(huán)尾 () .如果真 (余數 > 0) 長度 = 取字節(jié)集長度 (字符) .如果 (余數 = 1) 字符 [長度 - 1] = 取代碼 (“=”, ) 字符 [長度] = 取代碼 (“=”, ) .否則 字符 [長度] = 取代碼 (“=”, ) .如果結束 .如果真結束 返回 (到文本 (字符)) |
以上就是我們整理的關于發(fā)送信件寫法的全部內容,感謝大家對服務器之家的支持。