ASP.NET中常用功能代码总结(1)——发送邮件篇
ASP.NET中常用功能代码总结(1)——发送邮件篇
整理:Terrylee
一. 用Asp.net实现邮件系统
1
/// <summary>
2
/// 功能:实现在Web页面中发送Email
3
/// </summary>
4
private void SendMail()
5
{
6
MailMessage m = new MailMessage();
7
8
///发件人地址
9
m.From = tbFrom.Text;
10
11
///收件人地址
12
m.To = tbTo.Text;
13
14
///邮件主题
15
m.Subject = tbSubject.Text;
16
17
///邮件内容
18
m.Body = tbBody.Text;
19
20
///优先级
21
switch(ddlp.SelectedIndex)
22
{
23
case 0:
24
m.Priority = MailPriority.High;
25
break;
26
case 1:
27
m.Priority = MailPriority.Low;
28
break;
29
default:
30
m.Priority = MailPriority.Normal;
31
break;
32
}
33
34
///设置邮件格式
35
if(ddlp.SelectedIndex==0)
36
m.BodyFormat = MailFormat.Text;
37
else
38
m.BodyFormat = MailFormat.Html;
39
40
///设置服务器
41
if(tbServer.Text!="")
42
{
43
SmtpMail.SmtpServer = tbServer.Text;
44
}
45
46
///以下处理附件
47
string strFileName = FileSelect.PostedFile.FileName;
48
if(strFileName!="")
49
m.Attachments.Add(new MailAttachment(strFileName));
50
51
///发送邮件
52
SmtpMail.Send(m);
53
}

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

二. 利用Socket来接收邮件
1
/// <summary>
2
/// 接收邮件
3
/// </summary>
4
private void SocketPopMail()
5
{
6
POP3 pop = new POP3(tbServer.Text,tbUser.Text,tbPass.Text);
7
int n = pop.GetNumberOfNewMessages();
8
if(n==-1)
9
{
10
Response.Write("<script language='javascript'>alert('服务器连接错误!')</script>");
11
return;
12
}
13
ddlNew.Items.Clear();
14
for(int i=1;i<=n;i++)
15
ddlNew.Items.Add("第"+i.ToString()+"封邮件");
16
if(n>0)
17
{
18
MailMessage msg = pop.GetNewMessages(0);
19
if(msg!=null)
20
tbBody.Text = msg.Body;
21
}
22
}
POP3类的实现如下:
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

1
/// <summary>
2
/// 接收邮件类
3
/// </summary>
4
public class POP3
5
{
6
string POPServer;
7
string user;
8
string pwd;
9
NetworkStream ns;
10
StreamReader sr;
11
12
public POP3(){}
13
14
public POP3(string server, string _user, string _pwd)
15
{
16
POPServer = server;
17
user = _user;
18
pwd = _pwd;
19
}
20
21
/// <summary>
22
/// 连接服务器
23
/// </summary>
24
/// <returns></returns>
25
private bool Connect()
26
{
27
TcpClient sender = new TcpClient(POPServer,110);
28
byte[] outbytes;
29
string input;
30
31
try
32
{
33
ns = sender.GetStream();
34
sr = new StreamReader(ns);
35
36
sr.ReadLine();
37
input = "user " + user + "\r\n";
38
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
39
ns.Write(outbytes,0,outbytes.Length) ;
40
sr.ReadLine();
41
42
input = "pass " + pwd + "\r\n";
43
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
44
ns.Write(outbytes,0,outbytes.Length) ;
45
sr.ReadLine();
46
return true;
47
48
}
49
catch
50
{
51
return false;
52
}
53
}
54
55
/// <summary>
56
/// 断开与服务器的连接
57
/// </summary>
58
private void Disconnect()
59
{
60
string input = "quit" + "\r\n";
61
Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
62
ns.Write(outbytes,0,outbytes.Length);
63
ns.Close();
64
}
65
66
public int GetNumberOfNewMessages()
67
{
68
byte[] outbytes;
69
string input;
70
71
try
72
{
73
Connect();
74
75
input = "stat" + "\r\n";
76
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
77
ns.Write(outbytes,0,outbytes.Length);
78
string resp = sr.ReadLine();
79
string[] tokens = resp.Split(new Char[] {' '});
80
81
Disconnect();
82
83
return Convert.ToInt32(tokens[1]);
84
}
85
catch
86
{
87
return -1;
88
}
89
}
90
public ArrayList GetNewMessages(string subj)
91
{
92
93
int newcount;
94
ArrayList newmsgs = new ArrayList();
95
96
try
97
{
98
newcount = GetNumberOfNewMessages();
99
Connect();
100
101
for(int n=1; n<newcount+1; n++)
102
{
103
ArrayList msglines = GetRawMessage(n);
104
string msgsubj = GetMessageSubject(msglines);
105
if(msgsubj.CompareTo(subj) == 0)
106
{
107
System.Web.Mail.MailMessage msg = new MailMessage();
108
msg.Subject = msgsubj;
109
msg.From = GetMessageFrom(msglines);
110
msg.Body = GetMessageBody(msglines);
111
newmsgs.Add(msg);
112
DeleteMessage(n);
113
}
114
}
115
116
Disconnect();
117
return newmsgs;
118
}
119
catch(Exception e)
120
{
121
return newmsgs;
122
}
123
}
124
125
/// <summary>
126
/// 获取新邮件
127
/// </summary>
128
/// <param name="nIndex"></param>
129
/// <returns></returns>
130
public MailMessage GetNewMessages(int nIndex)
131
{
132
int newcount;
133
System.Web.Mail.MailMessage msg = new MailMessage();
134
135
try
136
{
137
newcount = GetNumberOfNewMessages();
138
Connect();
139
int n = nIndex+1;
140
141
if(n<newcount+1)
142
{
143
ArrayList msglines = GetRawMessage(n);
144
string msgsubj = GetMessageSubject(msglines);
145
146
147
msg.Subject = msgsubj;
148
msg.From = GetMessageFrom(msglines);
149
msg.Body = GetMessageBody(msglines);
150
}
151
152
Disconnect();
153
return msg;
154
}
155
catch
156
{
157
return null;
158
}
159
}
160
private ArrayList GetRawMessage (int messagenumber)
161
{
162
Byte[] outbytes;
163
string input;
164
string line = "";
165
166
input = "retr " + messagenumber.ToString() + "\r\n";
167
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
168
ns.Write(outbytes,0,outbytes.Length);
169
170
ArrayList msglines = new ArrayList();
171
do
172
{
173
line = sr.ReadLine();
174
msglines.Add(line);
175
} while (line != ".");
176
msglines.RemoveAt(msglines.Count-1);
177
178
return msglines;
179
}
180
181
/// <summary>
182
/// 获取邮件主题
183
/// </summary>
184
/// <param name="msglines"></param>
185
/// <returns></returns>
186
private string GetMessageSubject(ArrayList msglines)
187
{
188
string[] tokens;
189
IEnumerator msgenum = msglines.GetEnumerator();
190
while (msgenum.MoveNext() )
191
{
192
string line = (string)msgenum.Current;
193
if(line.StartsWith("Subject:") )
194
{
195
tokens = line.Split(new Char[] {' '});
196
return tokens[1].Trim();
197
}
198
}
199
return "None";
200
}
201
202
/// <summary>
203
/// 获取邮件源地址
204
/// </summary>
205
/// <param name="msglines"></param>
206
/// <returns></returns>
207
private string GetMessageFrom (ArrayList msglines)
208
{
209
string[] tokens;
210
IEnumerator msgenum = msglines.GetEnumerator();
211
while (msgenum.MoveNext() )
212
{
213
string line = (string)msgenum.Current;
214
if(line.StartsWith("From:") )
215
{
216
tokens = line.Split(new Char[] {'<'});
217
return tokens[1].Trim(new Char[] {'<','>'});
218
}
219
}
220
return "None";
221
}
222
223
/// <summary>
224
/// 获取邮件内容
225
/// </summary>
226
/// <param name="msglines"></param>
227
/// <returns></returns>
228
private string GetMessageBody(ArrayList msglines)
229
{
230
string body = "";
231
string line = " ";
232
IEnumerator msgenum = msglines.GetEnumerator();
233
234
while(line.CompareTo("") != 0)
235
{
236
msgenum.MoveNext();
237
line = (string)msgenum.Current;
238
}
239
240
while (msgenum.MoveNext() )
241
{
242
body = body + (string)msgenum.Current + "\r\n";
243
}
244
return body;
245
}
246
247
/// <summary>
248
/// 删除邮件
249
/// </summary>
250
/// <param name="messagenumber"></param>
251
private void DeleteMessage(int messagenumber)
252
{
253
Byte[] outbytes;
254
string input;
255
256
try
257
{
258
input = "dele " + messagenumber.ToString() + "\r\n";
259
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
260
ns.Write(outbytes,0,outbytes.Length);
261
}
262
catch(Exception e)
263
{
264
return;
265
}
266
267
}
268
269
}

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

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

三. 利用Socket来发送邮件
1
/// <summary>
2
/// 功能:利用Socket来发送邮件
3
/// </summary>
4
private void SocketSendMail()
5
{
6
SMTP smtp = new SMTP();
7
bool bSuccess = smtp.Send(tbSmtp.Text,25,tbSend.Text,tbReceive.Text,tbSubject.Text,tbBody.Text);
8
if(bSuccess)
9
Response.Write("<script language='javascript'>alert('邮件发送成功!')</script>");
10
else
11
Response.Write("<script language='javascript'>alert('邮件发送失败!')</script>");
12
}

2

3

4

5

6

7

8

9

10

11

12

SMTP类的实现如下:
1
/// <summary>
2
/// 发送邮件类
3
/// </summary>
4
public class SMTP
5
{
6
public SMTP(){}
7
8
public bool Send(string strSmtpServer,int nPort,string strSend,string strReceive
9
,string strSubject,string strContent)
10
{
11
/// smtp服务器的IP地址
12
string smtpserver=strSmtpServer;
13
TcpClient tcpc = new TcpClient();
14
try
15
{
16
tcpc.Connect(smtpserver, nPort);
17
StreamReader sr ;
18
string strCmd;
19
sr = new StreamReader(tcpc.GetStream(),Encoding.Default);
20
21
///服务器连接成功以后,首先向服务器发送HeLlo命令
22
strCmd="HELO shaozhd";
23
SenSmtpCmd(tcpc,strCmd);
24
25
///然后向服务器发送信件的成员的信箱
26
strCmd="mail from:"+ strSend;
27
SenSmtpCmd(tcpc,strCmd);
28
29
///向服务器发送收件人的信箱
30
strCmd="rcpt to:" + strReceive;
31
SenSmtpCmd(tcpc,strCmd);
32
33
///所有的准备工作都已经作好了,下面开始进行邮件的部分
34
strCmd="data";
35
SenSmtpCmd(tcpc,strCmd);
36
37
///邮件内容
38
strCmd="Date: 1234567\r\n";
39
strCmd=strCmd+"From: " + strSend +"\r\n";
40
strCmd=strCmd+"To: " + strReceive +"\r\n";
41
strCmd=strCmd+"Subject: " + strSubject +"\r\n\r\n";
42
strCmd=strCmd + strContent +"\r\n\r\n";
43
SenSmtpCmd(tcpc,strCmd);
44
strCmd="\r\n.\r\n";
45
SenSmtpCmd(tcpc,strCmd);
46
47
///最后 关闭与smtp 服务器的连接
48
tcpc.Close();
49
return true;
50
}
51
catch
52
{
53
return false;
54
}
55
}
56
57
/// <summary>
58
/// 发送SMTP命令
59
/// </summary>
60
/// <param name="tcpc"></param>
61
/// <param name="strCmd"></param>
62
void SenSmtpCmd(TcpClient tcpc,String strCmd)
63
{
64
65
byte[] arrCmd;
66
string strRet;
67
StreamReader sr;
68
Stream s;
69
s=tcpc.GetStream();
70
strCmd = strCmd + "\r\n";
71
arrCmd= Encoding.Default.GetBytes(strCmd.ToCharArray());
72
s=tcpc.GetStream();
73
s.Write(arrCmd, 0, strCmd.Length);
74
75
///以下用于程序调试,显示服务器回应信息
76
sr = new StreamReader(tcpc.GetStream(), Encoding.Default);
77
strRet=sr.ReadLine();
78
return;
79
}
80
}

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

支持TerryLee的创业产品Worktile
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)