|
但是这种方式的一个问题就是关于解析信件的格式。如果是附件的话,他也直接给出了二进制,不容易使用。 所以,可以使用一个现成的工具:LumiSoft.Net.POP3.Client。这里面已经给写好了实现,用起来也很简单。 这是一个简单的用法(这里使用了两种处理方式,前一种是不建议使用的) 。。 using (POP3_Client pop3 = new POP3_Client()) { //与Pop3服务器建立连接 pop3.Connect(_popServer, _pop3port,false); //验证身份 pop3.Authenticate(_user, _pwd, false);
//get all messages POP3_MessagesInfo infos = pop3.GetMessagesInfo(); foreach (POP3_MessageInfo info in infos) { byte[] bytes = pop3.GetMessage(info.MessageNumber); Mime mime = Mime.Parse(bytes); HandleMail(mime); //delete it at last //pop3.DeleteMessage(info.MessageNumber); } //the second way to do it //for (int i = 0; i < pop3.Messages.Count; i++) //{ // byte[] bytes = pop3.Messages[i].MessageToByte(); // Mime mime = Mime.Parse(bytes); // HandleMail(mime); // //delete it at last // //pop3.DeleteMessage(pop3.Messages[i].SequenceNumber); //}。 。。。 取得的邮件可以这要给获得。 #region pop3 //string customer = mime.MainEntity.To.ToAddressListString();//cargo company //string sender = mime.MainEntity.From.ToAddressListString();//this is customer who send
#endregion string customer = MailboxesToString(envelope.To);//cargo company string sender = MailboxesToString(envelope.From);//this is customer who send
。。。 除此之外,它提供的另外一个工具是IMAP,它操作起来更加方便。代码如下: 。 IMAP_Client clnt = new IMAP_Client(); try { clnt.Connect("mail.xx.com", 143, false); clnt.Authenticate("user", "password"); string[] folders = clnt.GetFolders();//get all types
string folder = "Inbox"; clnt.SelectFolder(folder);
IMAP_SequenceSet sequence_set = new IMAP_SequenceSet(); // All messages sequence_set.Parse(string.Format("{0}:{1}", 1, clnt.MessagesCount));
IMAP_FetchItem[] fetchItems = clnt.FetchMessages( sequence_set, IMAP_FetchItem_Flags.UID | IMAP_FetchItem_Flags.MessageFlags | IMAP_FetchItem_Flags.Size | IMAP_FetchItem_Flags.Envelope, true, false ); //int count =0; foreach (IMAP_FetchItem fetchItem in fetchItems) { IMAP_Envelope envelope = fetchItem.Envelope; //hanldle it, means read and search and reply try { HandleMail(envelope); //count++; } catch (Exception ex) { Log("Sys", ex.Message); } } //delete it after hanlde clnt.DeleteMessages(sequence_set, false); //disconnect clnt.Disconnect();
//MessageBox.Show(count.ToString() + " of " + fetchItems .Length+ " Success"); } catch (Exception x) { Log("Sys", x.Message); //MessageBox.Show(x.Message); } 。。 上边都是如何收邮件。 关于如何发送邮件是比较简单的。这里提供两种方式。 第一种方式是使用网上的smtp。这种方式必须要提供用户名和密码。这个适合于web应用,使用的smtp也是网上的,我一般使用163的smtp,基本没有问题。 第二种方式是使用本地的smtp。不需要提供密码,用户也可以是不存在的(垃圾邮件是不是就是这么产生的?),但是必要要提供smtp端口号。 第二种方法测试的时候有时候会报错“Mailbox unavailable. The server response was: 5.7.1 Unable to relay for xxx”,查过资料之后(在baidu上没找到,还是google信息多一点),才发现问题原来是IIS里SMTP服务的配置有问题。 这样修改可以解决:到开SMTP属性—>Access页面?Reply Restrictions/ Reply-?Only this Below选项,加上自己的ip:127.0.0.1(允许本机,使用loalhost,如果是允许其他机器,类似设置) 代码如下 public class EMail { static public string accountName; static public string password; static public string smtpServer; static public int smtpPort;
/// <summary> /// need password,username, smtpserver /// </summary> /// <param name="to"></param> /// <param name="subject"></param> /// <param name="body"></param> static public void SendMail(string sendTo, string subject, string body) { //.net smtp System.Web.Mail.MailMessage mailmsg = new System.Web.Mail.MailMessage(); mailmsg.To = sendTo; //mailmsg.Cc = cc; mailmsg.Subject = subject; mailmsg.Body = body;
//sender here mailmsg.From = EMail.accountName; // certify needed mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");//1 is to certify //the user id mailmsg.Fields.Add( "http://schemas.microsoft.com/cdo/configuration/sendusername", EMail.accountName); //the password mailmsg.Fields.Add( "http://schemas.microsoft.com/cdo/configuration/sendpassword", EMail.password);
System.Web.Mail.SmtpMail.SmtpServer = EMail.smtpServer; System.Web.Mail.SmtpMail.Send(mailmsg);
}
#region send mail2 /// <summary> /// need username,smtp,smtp port /// </summary> /// <param name="sendTo"></param> /// <param name="subject"></param> /// <param name="body"></param> static public void SendMail2(string sendTo, string subject, string body) { System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(); msg.To.Add(sendTo); msg.From = new System.Net.Mail.MailAddress(accountName );
msg.Subject = subject; msg.SubjectEncoding = System.Text.Encoding.UTF8; msg.Body = body;// msg.BodyEncoding = System.Text.Encoding.UTF8; msg.IsBodyHtml = false; //msg.Priority = MailPriority.High;//
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(); client.Host = smtpServer; client.Port = smtpPort; //client.Credentials = new System.Net.NetworkCredential("user@xxx.com", "pass"); client.Send(msg);
} #endregion
}
共2页: 上一页 [1] 2 下一页
|