您的位置:首页 > 编程语言 > ASP

ASP.NET中常用功能代码总结——发送邮件篇

2008-07-23 23:51 746 查看
一. 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

}

二. 利用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类的实现如下:

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

}

三. 利用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

}
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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: