200分求一个C#接收邮件的代码
要求:至少能pop3正常收取163,GMAIL的中文邮件.
-----------------------------------------------
告诉我Google上一大把之类的话,坚决不给这种人分.试过代码的说话.
[解决办法]
http://www.cnblogs.com/jerrie/archive/2006/06/20/430590.html
[解决办法]
下载Aspose.Network组件,csdn下载频道就有
代码
//收 Aspose.Network.Pop3.Pop3Client pc = new Aspose.Network.Pop3.Pop3Client(); pc.Host = "pop.163.com"; pc.Username = "xxx@163.com"; pc.Password = "xxx"; pc.Connect(); pc.Login(); pc.SaveMessage(1,@"c:\1.eml");
[解决办法]
应该需要别的Library
Framework默认只能发邮件,不能接收
[解决办法]
public void ReceiveMails(string Username)
...{
jmail.Message Msg=new jmail.Message();
jmail.POP3 jpop = new jmail.POP3();
jmail.Attachments atts;
jmail.Attachment att;
//username为用户名,该方法通过用户名获取该用户的pop设置,即用户的POP用户名,密码,POP服务器地址以及端口号这四个参数,这四个参数是连接POP服务器的必用参数.
SqlDataReader dataReader = this.ExtGetSetting(Username);
if(dataReader.Read())
...{
if(dataReader["PopServer"].ToString()!=""&&dataReader["PopUsername"].ToString()!="")
...{
//连接POP服务器
jpop.Connect(dataReader["PopUsername"].ToString(),dataReader["PopPassword"].ToString(),dataReader["PopServer"].ToString(),Int32.Parse(dataReader["PopPort"].ToString()));
//如果服务器上有邮件
if(jpop.Count>=1)
...{
for(int i=1;i <=jpop.Count;i++)
...{
Msg = jpop.Messages[i];
atts=Msg.Attachments;
//取数据库中邮件信息中的最大发送时间,即最近接收到的一封邮件的时间
Database dbase=new Database();
DataTable data=dbase.GetDataTable("select max(MailSendDate) as MailSenderDate from TabMailList where MailTypeFlag='1'
if(Msg.Date>Convert.ToDateTime(data.Rows[0][0].ToString()))
...{
//将这封新邮件的信息保存到数据库
this.SaveExtMail(Msg,Username,dataReader["Email"].ToString(),jpop.GetMessageUID(i));
//获取附件上传到服务器并且将信息存入数据库
if(atts.Count>=1)
...{
for(int k=0;k <atts.Count;k++)
...{
att=atts[k];//获得附件
string attname=att.Name;
try
...{
Random TempNameInt = new Random();
string NewMailDirName = TempNameInt.Next(100000000).ToString();
Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath(".")+"AttachFiles"+Username+""+NewMailDirName);
string mailPath="AttachFiles"+Username+""+NewMailDirName+""+attname;
att.SaveToFile(System.Web.HttpContext.Current.Server.MapPath(".")+mailPath);
//获取该封邮件在数据库的ID,以便和附件信息相对应,取邮件表中的最大ID即可
int mailID=this.GetMailID();
//将附件信息存入数据库
this.AttExtSend(mailID,attname,att.Size,mailPath,Msg.From);
}
catch(Exception ex)
...{
throw new Exception(ex.Message);
}
}
}
}
}
}
//删除服务器上的邮件
jpop.DeleteMessages();
//断开连接
jpop.Disconnect();
}
}
参考下,做简单修改就可以搞定啦,之前用过地!
[解决办法]
可以参看一下OpenPOP.NET收信很不错而且是开源的。
提供一下网址:
http://unruledboy.cnblogs.com/archive/2004/05/26/11552.html
http://www.host01.com/article/Net/00020003/0562810415659465.htm
http://sourceforge.net/projects/hpop/
[解决办法]
我以前做过用JMAIL4.4PRO收发邮件的,但是都和转发邮箱有关系,转发邮箱不稳定,或不允许就没用了
[解决办法]
我用Jmail控件做过一个完整的程序!我写在我博客里面了,希望对你有帮助!有什么问题可以随时叫我!
http://blog.csdn.net/chuxue1342/archive/2007/10/15/1825999.aspx
[解决办法]
Imports SystemImports System.NetImports System.Net.SocketsImports System.IOPublic Class Pop3Client Protected Server As TcpClient Protected NetStrm As NetworkStream Protected WrStrm As StreamWriter Protected RdStrm As StreamReader Protected Data As String Protected szData As Byte() ''' <summary> ''' Connect to pop3 server ''' </summary> ''' <param name="PopServer">Pop3 Server</param> ''' <param name="PopPort">Pop3 Server Port</param> ''' <param name="Username">User Name</param> ''' <param name="Password">Password</param> ''' <returns> ''' 0 - success ''' 1 - user invalid ''' 2 - user or pass invalid ''' -1 - other error(server not exsit) '''</returns> ''' <remarks></remarks> Public Function ConnectPopServer(ByVal PopServer As String, ByVal PopPort As Integer, _ ByVal Username As String, ByVal Password As String) As Integer Dim sResult As String Try '用110端口新建POP3服务器连接 Server = New TcpClient(PopServer, PopPort) '初始化 NetStrm = Server.GetStream() WrStrm = New StreamWriter(NetStrm) RdStrm = New StreamReader(NetStrm) sResult = RdStrm.ReadLine() '登录服务器过程 Data = "USER " + Username + vbCrLf szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) sResult = RdStrm.ReadLine() If sResult.Substring(0, 3) = "-ER" Then Return 1 End If Data = "PASS " + Password + vbCrLf szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) sResult = RdStrm.ReadLine() If sResult.Substring(0, 3) = "-ER" Then Return 2 End If Return 0 Catch ex As Exception Return -1 End Try End Function ''' <summary> ''' Disconnect from pop3 server ''' </summary> ''' <returns> ''' 0 - success ''' 1 - quit failed ''' -1 - other error '''</returns> ''' <remarks></remarks> Public Function DisconnectPopServer() As Integer Dim sResult As String Try '向服务器发送QUIT命令从而结束和POP3服务器的会话 Data = "QUIT" + vbCrLf szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) sResult = RdStrm.ReadLine() If sResult.Substring(0, 3) = "-ER" Then Return 1 End If '断开连接 NetStrm.Close() RdStrm.Close() Server.Close() Return 0 Catch ex As Exception Return -1 End Try End FunctionEnd Class
[解决办法]
http://blog.csdn.net/sq_zhuyi/archive/2008/11/11/3274635.aspx
[解决办法]
学习一下!
[解决办法]
学习
[解决办法]
Mark
[解决办法]
Sender.ISOEncodeHeaders=false
Sender.Logging=true
Sender.From=C_Email
Sender.Fromname=C_HostName
sender.addrecipient Email
sender.subject=E_Subject
Sender.AppendHtml "您好,您在www.memay.com已经注册成功,您的用户名是"&user&"密码是:"&randKey
sender.maildomain=C_Smtp
sender.mailserverusername=C_M_User
sender.mailserverpassword=C_M_Pass
sender.Priority = 3
sender.send(C_Smtp)
If Err.Number<>0 Then
Jmail=False
Response.write "邮件发送失败!详细错误原因:"&Err.Description
Else
Jmail=True
%>
[解决办法]
Mark
[解决办法]
markmark
[解决办法]
mark
[解决办法]
可以参看一下OpenPOP.NET收信很不错而且是开源的。
提供一下网址:
http://unruledboy.cnblogs.com/archive/2004/05/26/11552.html
http://www.host01.com/article/Net/00020003/0562810415659465.htm
http://sourceforge.net/projects/hpop/
[解决办法]
.
[解决办法]
我有完整版,但不支持所有解码,纯文本系列的可以完全显示,用我自制的发送邮件系统,则可以随心所欲.需要吗?
[解决办法]
EmailMessage objEmail = objPOP3.GetMessage(i,false); // use true to get headers only
DataRow dr = dt.NewRow();
dr[0]=objEmail.From;
dr[1]=objEmail.To;
dr[2]=objEmail.Cc;
dr[3]=objEmail.Subject;
dr[4]=objEmail.Date;
dr[5]=objEmail.ContentType;
dr[6]=objEmail.Charset;
dr[7]=objEmail.GetCustomHeader("Message-ID");
dr[8]=objEmail.Size;
dr[9]=QPDecode(objEmail.Body,System.Text.Encoding.Default);
string fj="";
if (objEmail.IsAnyAttachments)
{
int sum=0;
for(int a = 0; a < objEmail.Attachments.Count; a++)
{
Attachment objFile = (Attachment)objEmail.Attachments[a];
if (!objFile.IsFileAttachment)
{
if (objFile.TextBody != null)
{
sum++;
fj+=sum.ToString()+":"+objFile.FileName;
if(!System.IO.Directory.Exists(@"d:\pop3\fj"))
{
System.IO.Directory.CreateDirectory(@"d:\pop3\fj");
}
StreamWriter swfj = new StreamWriter(@"d:\pop3\"+sum.ToString()+":"+objFile.FileName);
swfj.Write(objFile.Data);
swfj.Close();
}
}
}
}
dr[10]=fj;
dr[11]=@"d:\pop3\m_" + i.ToString() + ".eml";
dt.Rows.Add(dr);//构建DataTable的数据
if(!System.IO.Directory.Exists(@"d:\pop3"))
{
System.IO.Directory.CreateDirectory(@"d:\pop3");
}
StreamWriter sw = new StreamWriter(@"d:\pop3\m_" + i.ToString() + ".eml");
sw.Write(objEmail.ToString());
sw.Close();
}
objPOP3.Close();
return dt;
}
public static string QPDecode(string data,Encoding encoding)
{
char ch;
string ret="";
byte[] bytes=new byte[data.Length];
int bIdex=0;
try
{
for(int rIndex=0; rIndex<data.Length;rIndex++)
{
ch=data[rIndex];
if(ch=='=')
{
rIndex++;
if( rIndex<data.Length && ( Char.IsDigit(data[rIndex])||Char.IsLetter(data[rIndex])))
{
bytes[bIdex++]=Byte.Parse(data.Substring(rIndex++,2),System.Globalization.NumberStyles.HexNumber);
continue;
}
if( rIndex<data.Length && data[rIndex]=='\r' && (rIndex+1)<data.Length && data[rIndex+1]=='\n')
{
rIndex++;
continue;
}
}
if(ch=='\r'||ch=='\n')
continue;
bytes[bIdex++]=(byte)ch;
}
ret=encoding.GetString(bytes,0,bIdex);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
return ret;
}
}
}
http://www.codes63.net/attachment.aspx?attachmentid=624