zoukankan
html css js c++ java
ASP.NET 实现邮件发送和接受的功能(Sockets)
前台代码:html
<%
@ Page language
=
"
c#
"
Codebehind
=
"
SocketMail.aspx.cs
"
AutoEventWireup
=
"
false
"
Inherits
=
"
UseFramework2.MailSys.Mail
"
%>
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
>
<
HTML
>
<
HEAD
>
<
title
>
Mail
</
title
>
<
meta
content
="Microsoft Visual Studio 7.0"
name
="GENERATOR"
>
<
meta
content
="C#"
name
="CODE_LANGUAGE"
>
<
meta
content
="JavaScript"
name
="vs_defaultClientScript"
>
<
meta
content
="http://schemas.microsoft.com/intellisense/ie5"
name
="vs_targetSchema"
>
</
HEAD
>
<
body
MS_POSITIONING
="GridLayout"
>
<
form
id
="Mail"
method
="post"
runat
="server"
>
<
FONT
face
="宋体"
>
<
asp:TextBox
id
="tbServer"
style
="Z-INDEX: 101; LEFT: 143px; POSITION: absolute; TOP: 104px"
runat
="server"
></
asp:TextBox
>
<
asp:TextBox
id
="tbSend"
style
="Z-INDEX: 120; LEFT: 413px; POSITION: absolute; TOP: 223px"
runat
="server"
></
asp:TextBox
>
<
asp:Label
id
="Label10"
style
="Z-INDEX: 119; LEFT: 334px; POSITION: absolute; TOP: 231px"
runat
="server"
>
发件人
</
asp:Label
>
<
asp:Button
id
="btnSend"
style
="Z-INDEX: 118; LEFT: 441px; POSITION: absolute; TOP: 325px"
runat
="server"
Width
="76"
Text
="发送"
Height
="25"
></
asp:Button
>
<
asp:Label
id
="Label9"
style
="Z-INDEX: 117; LEFT: 332px; POSITION: absolute; TOP: 179px"
runat
="server"
>
收件人
</
asp:Label
>
<
asp:Label
id
="Label8"
style
="Z-INDEX: 116; LEFT: 329px; POSITION: absolute; TOP: 278px"
runat
="server"
>
邮件主题
</
asp:Label
>
<
asp:Label
id
="Label7"
style
="Z-INDEX: 115; LEFT: 320px; POSITION: absolute; TOP: 102px"
runat
="server"
>
SMTP服务器
</
asp:Label
>
<
asp:TextBox
id
="tbSubject"
style
="Z-INDEX: 114; LEFT: 415px; POSITION: absolute; TOP: 270px"
runat
="server"
></
asp:TextBox
>
<
asp:TextBox
id
="tbReceive"
style
="Z-INDEX: 113; LEFT: 416px; POSITION: absolute; TOP: 171px"
runat
="server"
></
asp:TextBox
>
<
asp:TextBox
id
="tbSmtp"
style
="Z-INDEX: 112; LEFT: 419px; POSITION: absolute; TOP: 100px"
runat
="server"
></
asp:TextBox
>
<
asp:Label
id
="Label5"
style
="Z-INDEX: 109; LEFT: 54px; POSITION: absolute; TOP: 245px"
runat
="server"
>
密码
</
asp:Label
>
<
asp:Label
id
="Label4"
style
="Z-INDEX: 108; LEFT: 54px; POSITION: absolute; TOP: 181px"
runat
="server"
>
用户名称
</
asp:Label
>
<
asp:label
id
="Label1"
style
="Z-INDEX: 106; LEFT: 414px; POSITION: absolute; TOP: 18px"
runat
="server"
Width
="175px"
Font-Names
="隶书"
Font-Size
="XX-Large"
>
发邮件
</
asp:label
>
<
asp:label
id
="Label2"
style
="Z-INDEX: 105; LEFT: 85px; POSITION: absolute; TOP: 14px"
runat
="server"
Width
="175px"
Font-Names
="隶书"
Font-Size
="XX-Large"
>
收邮件
</
asp:label
>
<
asp:TextBox
id
="tbUser"
style
="Z-INDEX: 102; LEFT: 143px; POSITION: absolute; TOP: 182px"
runat
="server"
></
asp:TextBox
>
<
asp:TextBox
id
="tbPass"
style
="Z-INDEX: 103; LEFT: 143px; POSITION: absolute; TOP: 242px"
runat
="server"
TextMode
="Password"
></
asp:TextBox
>
<
asp:TextBox
id
="tbBody"
style
="Z-INDEX: 104; LEFT: 141px; POSITION: absolute; TOP: 363px"
runat
="server"
Width
="458px"
Height
="87px"
></
asp:TextBox
>
<
asp:Label
id
="Label3"
style
="Z-INDEX: 107; LEFT: 54px; POSITION: absolute; TOP: 103px"
runat
="server"
>
POP3服务器
</
asp:Label
>
<
asp:Button
id
="btnCheck"
style
="Z-INDEX: 110; LEFT: 67px; POSITION: absolute; TOP: 315px"
runat
="server"
Width
="76"
Text
="检查"
Height
="25"
></
asp:Button
>
<
asp:Label
id
="Label6"
style
="Z-INDEX: 111; LEFT: 60px; POSITION: absolute; TOP: 387px"
runat
="server"
Width
="71px"
Height
="27px"
>
邮件正文
</
asp:Label
>
<
asp:DropDownList
id
="ddlNew"
style
="Z-INDEX: 121; LEFT: 200px; POSITION: absolute; TOP: 319px"
runat
="server"
AutoPostBack
="True"
></
asp:DropDownList
></
FONT
></
form
>
</
body
>
</
HTML
>
后台代码:cs
using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Web;
using
System.Web.SessionState;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.HtmlControls;
using
System.Net.Sockets;
using
System.Net;
using
System.IO;
using
System.Web.Mail;
using
System.Text;
namespace
UseFramework2.MailSys
{
/**/
///
<summary>
///
Mail 的摘要说明。
///
</summary>
public
class
Mail : System.Web.UI.Page
{
protected
System.Web.UI.WebControls.TextBox tbServer;
protected
System.Web.UI.WebControls.TextBox tbUser;
protected
System.Web.UI.WebControls.TextBox tbPass;
protected
System.Web.UI.WebControls.Label Label2;
protected
System.Web.UI.WebControls.Label Label1;
protected
System.Web.UI.WebControls.Label Label3;
protected
System.Web.UI.WebControls.Label Label4;
protected
System.Web.UI.WebControls.Label Label5;
protected
System.Web.UI.WebControls.Button btnCheck;
protected
System.Web.UI.WebControls.Label Label6;
protected
System.Web.UI.WebControls.Label Label7;
protected
System.Web.UI.WebControls.TextBox tbSmtp;
protected
System.Web.UI.WebControls.TextBox tbReceive;
protected
System.Web.UI.WebControls.TextBox tbSubject;
protected
System.Web.UI.WebControls.Label Label8;
protected
System.Web.UI.WebControls.Label Label9;
protected
System.Web.UI.WebControls.Button btnSend;
protected
System.Web.UI.WebControls.Label Label10;
protected
System.Web.UI.WebControls.TextBox tbSend;
protected
System.Web.UI.WebControls.TextBox tbBody;
protected
System.Web.UI.WebControls.DropDownList ddlNew;
private
void
Page_Load(
object
sender, System.EventArgs e)
{
//
在此处放置用户代码以初始化页面
}
Web Form Designer generated code
#region
Web Form Designer generated code
override
protected
void
OnInit(EventArgs e)
{
//
//
CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base
.OnInit(e);
}
/**/
///
<summary>
///
设计器支持所需的方法 - 不要使用代码编辑器修改
///
此方法的内容。
///
</summary>
private
void
InitializeComponent()
{
this
.btnSend.Click
+=
new
System.EventHandler(
this
.btnSend_Click);
this
.btnCheck.Click
+=
new
System.EventHandler(
this
.btnCheck_Click);
this
.ddlNew.SelectedIndexChanged
+=
new
System.EventHandler(
this
.ddlNew_SelectedIndexChanged);
this
.Load
+=
new
System.EventHandler(
this
.Page_Load);
}
#endregion
private
void
btnCheck_Click(
object
sender, System.EventArgs e)
{
POP3 pop
=
new
POP3(tbServer.Text,tbUser.Text,tbPass.Text);
int
n
=
pop.GetNumberOfNewMessages();
if
(n
==-
1
)
{
Response.Write(
"
<script language='javascript'>alert('服务器连接错误!')</script>
"
);
return
;
}
ddlNew.Items.Clear();
for
(
int
i
=
1
;i
<=
n;i
++
)
ddlNew.Items.Add(
"
第
"
+
i.ToString()
+
"
封邮件
"
);
if
(n
>
0
)
{
MailMessage msg
=
pop.GetNewMessages(
0
);
if
(msg
!=
null
)
tbBody.Text
=
msg.Body;
}
}
private
void
ddlNew_SelectedIndexChanged(
object
sender, System.EventArgs e)
{
POP3 pop
=
new
POP3(tbServer.Text,tbUser.Text,tbPass.Text);
int
n
=
ddlNew.SelectedIndex;
if
(n
>=
0
)
{
MailMessage msg
=
pop.GetNewMessages(n);
if
(msg
!=
null
)
tbBody.Text
=
msg.Body;
}
}
private
void
btnSend_Click(
object
sender, System.EventArgs e)
{
SMTP smtp
=
new
SMTP();
bool
bSuccess
=
smtp.Send(tbSmtp.Text,
25
,tbSend.Text,tbReceive.Text,tbSubject.Text,tbBody.Text);
if
(bSuccess)
Response.Write(
"
<script language='javascript'>alert('邮件发送成功!')</script>
"
);
else
Response.Write(
"
<script language='javascript'>alert('邮件发送失败!')</script>
"
);
}
}
public
class
POP3
{
string
POPServer;
string
user;
string
pwd;
NetworkStream ns;
StreamReader sr;
public
POP3()
{}
public
POP3(
string
server,
string
_user,
string
_pwd)
{
POPServer
=
server;
user
=
_user;
pwd
=
_pwd;
}
private
bool
Connect()
{
TcpClient sender
=
new
TcpClient(POPServer,
110
);
byte
[] outbytes;
string
input;
try
{
ns
=
sender.GetStream();
sr
=
new
StreamReader(ns);
sr.ReadLine();
input
=
"
user
"
+
user
+
"
\r\n
"
;
outbytes
=
System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,
0
,outbytes.Length) ;
sr.ReadLine();
input
=
"
pass
"
+
pwd
+
"
\r\n
"
;
outbytes
=
System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,
0
,outbytes.Length) ;
sr.ReadLine();
return
true
;
}
catch
{
return
false
;
}
}
private
void
Disconnect()
{
string
input
=
"
quit
"
+
"
\r\n
"
;
Byte[] outbytes
=
System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,
0
,outbytes.Length);
ns.Close();
}
public
int
GetNumberOfNewMessages()
{
byte
[] outbytes;
string
input;
try
{
Connect();
input
=
"
stat
"
+
"
\r\n
"
;
outbytes
=
System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,
0
,outbytes.Length);
string
resp
=
sr.ReadLine();
string
[] tokens
=
resp.Split(
new
Char[]
{
'
'
}
);
Disconnect();
return
Convert.ToInt32(tokens[
1
]);
}
catch
{
return
-
1
;
}
}
public
ArrayList GetNewMessages(
string
subj)
{
int
newcount;
ArrayList newmsgs
=
new
ArrayList();
try
{
newcount
=
GetNumberOfNewMessages();
Connect();
for
(
int
n
=
1
; n
<
newcount
+
1
; n
++
)
{
ArrayList msglines
=
GetRawMessage(n);
string
msgsubj
=
GetMessageSubject(msglines);
if
(msgsubj.CompareTo(subj)
==
0
)
{
System.Web.Mail.MailMessage msg
=
new
MailMessage();
msg.Subject
=
msgsubj;
msg.From
=
GetMessageFrom(msglines);
msg.Body
=
GetMessageBody(msglines);
newmsgs.Add(msg);
DeleteMessage(n);
}
}
Disconnect();
return
newmsgs;
}
catch
(Exception e)
{
return
newmsgs;
}
}
public
MailMessage GetNewMessages(
int
nIndex)
{
int
newcount;
System.Web.Mail.MailMessage msg
=
new
MailMessage();
try
{
newcount
=
GetNumberOfNewMessages();
Connect();
int
n
=
nIndex
+
1
;
if
(n
<
newcount
+
1
)
{
ArrayList msglines
=
GetRawMessage(n);
string
msgsubj
=
GetMessageSubject(msglines);
msg.Subject
=
msgsubj;
msg.From
=
GetMessageFrom(msglines);
msg.Body
=
GetMessageBody(msglines);
}
Disconnect();
return
msg;
}
catch
{
return
null
;
}
}
private
ArrayList GetRawMessage (
int
messagenumber)
{
Byte[] outbytes;
string
input;
string
line
=
""
;
input
=
"
retr
"
+
messagenumber.ToString()
+
"
\r\n
"
;
outbytes
=
System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,
0
,outbytes.Length);
ArrayList msglines
=
new
ArrayList();
do
{
line
=
sr.ReadLine();
msglines.Add(line);
}
while
(line
!=
"
.
"
);
msglines.RemoveAt(msglines.Count
-
1
);
return
msglines;
}
private
string
GetMessageSubject(ArrayList msglines)
{
string
[] tokens;
IEnumerator msgenum
=
msglines.GetEnumerator();
while
(msgenum.MoveNext() )
{
string
line
=
(
string
)msgenum.Current;
if
(line.StartsWith(
"
Subject:
"
) )
{
tokens
=
line.Split(
new
Char[]
{
'
'
}
);
return
tokens[
1
].Trim();
}
}
return
"
None
"
;
}
private
string
GetMessageFrom (ArrayList msglines)
{
string
[] tokens;
IEnumerator msgenum
=
msglines.GetEnumerator();
while
(msgenum.MoveNext() )
{
string
line
=
(
string
)msgenum.Current;
if
(line.StartsWith(
"
From:
"
) )
{
tokens
=
line.Split(
new
Char[]
{
'
<
'
}
);
return
tokens[
1
].Trim(
new
Char[]
{
'
<
'
,
'
>
'
}
);
}
}
return
"
None
"
;
}
private
string
GetMessageBody(ArrayList msglines)
{
string
body
=
""
;
string
line
=
"
"
;
IEnumerator msgenum
=
msglines.GetEnumerator();
while
(line.CompareTo(
""
)
!=
0
)
{
msgenum.MoveNext();
line
=
(
string
)msgenum.Current;
}
while
(msgenum.MoveNext() )
{
body
=
body
+
(
string
)msgenum.Current
+
"
\r\n
"
;
}
return
body;
}
private
void
DeleteMessage(
int
messagenumber)
{
Byte[] outbytes;
string
input;
try
{
input
=
"
dele
"
+
messagenumber.ToString()
+
"
\r\n
"
;
outbytes
=
System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,
0
,outbytes.Length);
}
catch
(Exception e)
{
return
;
}
}
}
public
class
SMTP
{
public
SMTP()
{}
public
bool
Send(
string
strSmtpServer,
int
nPort,
string
strSend,
string
strReceive
,
string
strSubject,
string
strContent)
{
string
smtpserver
=
strSmtpServer;
//
smtp服务器的IP地址
TcpClient tcpc
=
new
TcpClient();
try
{
tcpc.Connect(smtpserver, nPort);
StreamReader sr ;
string
strCmd;
sr
=
new
StreamReader(tcpc.GetStream(),Encoding.Default);
//
服务器连接成功以后,首先向服务器发送HeLlo命令
strCmd
=
"
HELO shaozhd
"
;
SenSmtpCmd(tcpc,strCmd);
//
然后向服务器发送信件的成员的信箱
strCmd
=
"
mail from:
"
+
strSend;
SenSmtpCmd(tcpc,strCmd);
//
向服务器发送收件人的信箱
strCmd
=
"
rcpt to:
"
+
strReceive;
SenSmtpCmd(tcpc,strCmd);
//
所有的准备工作都已经作好了,下面开始进行邮件的部分
strCmd
=
"
data
"
;
SenSmtpCmd(tcpc,strCmd);
//
邮件内容
strCmd
=
"
Date: 1234567\r\n
"
;
strCmd
=
strCmd
+
"
From:
"
+
strSend
+
"
\r\n
"
;
strCmd
=
strCmd
+
"
To:
"
+
strReceive
+
"
\r\n
"
;
strCmd
=
strCmd
+
"
Subject:
"
+
strSubject
+
"
\r\n\r\n
"
;
strCmd
=
strCmd
+
strContent
+
"
\r\n\r\n
"
;
SenSmtpCmd(tcpc,strCmd);
strCmd
=
"
\r\n.\r\n
"
;
SenSmtpCmd(tcpc,strCmd);
//
最后 关闭与smtp 服务器的连接
tcpc.Close();
return
true
;
}
catch
{
return
false
;
}
}
void
SenSmtpCmd(TcpClient tcpc,String strCmd)
{
byte
[] arrCmd;
string
strRet;
StreamReader sr;
Stream s;
s
=
tcpc.GetStream();
strCmd
=
strCmd
+
"
\r\n
"
;
arrCmd
=
Encoding.Default.GetBytes(strCmd.ToCharArray());
s
=
tcpc.GetStream();
s.Write(arrCmd,
0
, strCmd.Length);
//
以下用于程序调试,显示服务器回应信息
sr
=
new
StreamReader(tcpc.GetStream(), Encoding.Default);
strRet
=
sr.ReadLine();
return
;
}
}
}
查看全文
相关阅读:
Logger.getLogger与LogFactory.getLog
log4j详解
游戏史上80重要创新(原资料来自17173)
软件开发工具介绍之 6.Web开发工具
JAVA NIO 简介
Alan Kay 你需要认识的一个天才
大学计算机学习路线
软件开发工具介绍之 5. 计划管理
软件开发工具介绍之 4. 建模工具
关于最近“361强奸360强奸QQ”,且是光天化日之下
原文地址:https://www.cnblogs.com/ghd258/p/259689.html
最新文章
js 优化与调试
初识Ajax
flash 动画
表格与表单
HTML5 Geolocation
Tween 问题
flash 右键菜单
从零开始学wordpress 之二
Flex 新建flash professional 项目
低权重原则——避免滥用子选择器
热门文章
高质量CSS之三 CSS的命名规范
Javascript绝句欣赏
让IE6崩溃的几种方法
CSS 水平居中,垂直居中
如何处理上下margin
挂多个class还是新建class——多用组合,少用继承
高质量CSS之二 模块化CSS
高质量CSS之一 DTD、怪异模式、如何组织CSS
有利于SEO优化的DIV+CSS的命名规则小结
软件开发工具介绍之 3. 原型设计
Copyright © 2011-2022 走看看