<summary>
2
/// 功能:实现在Web页面中发送Email3
/// </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
else38
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利用socket接受邮件
/// <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 POP35
{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
try32
{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
catch50
{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
try72
{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
catch86
{87
return -1;88
}89
}90
public ArrayList GetNewMessages(string subj)91
{92

93
int newcount;94
ArrayList newmsgs = new ArrayList();95

96
try97
{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
try136
{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
catch156
{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
do172
{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
try257
{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
}3利用socket发送邮件
/// <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
else11
Response.Write("<script language='javascript'>alert('邮件发送失败!')</script>");12
}smtp类的实现如下:
1
/// <summary>2
/// 发送邮件类3
/// </summary>4
public class SMTP5
{6
public SMTP(){}7

8
public bool Send(string strSmtpServer,int nPort,string strSend,string strReceive9
,string strSubject,string strContent)10
{11
/// smtp服务器的IP地址 12
string smtpserver=strSmtpServer;13
TcpClient tcpc = new TcpClient();14
try15
{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
catch52
{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
} 转自http://Teerylee.cnblogs.com/
