POP3 Client


29 April 2002 @ 15:17

Lav din egen Mail Client. I denne artikel finder du koden til at lave en mail-klient. Og det vil blive vist hvordan du kan bruge den fra en aspx side.


Lav din egen Mail Client

af Anders Bodeval Carlsen

I denne artikel finder du koden til at lave en mail-klient. Og det vil blive vist hvordan du kan bruge den fra en aspx side.

Selvom SmtpMail er så fint understøttet i ASP.net kan der være situationer hvor det er bedre at lave sin egen e-mail klient.
- Nå ja og så er det jo også sjovere, da man får en dybere indsigt i hvad det er der foregår når mail-clientent snakker med mail-serveren.
Jeg har ledt efter noget dokumentation på POP3 (Post Office Protocol 3), men har ikke fundet noget. Så hvis du læser denne artikel og ved hvor der er dokumentation på POP3 protokollen kan du jo droppe en kommentar nederst på siden.  

SendMail.cs

 

namespace abc.SendMail {
 using System;
using System.IO;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Web;
using System.Web.UI;
 public class SendMail { 
 private String _EmailServer;
private String _SendTo;
private String _MailFrom;
private String _Subject;
private String _Body;
  
 public String Body {
    get  {return _Body;}
    set { _Body = value;}
 }
 
 public String EmailServer   {
            get  { return _EmailServer; }

            set  { _EmailServer = value;}
 }
  
 public String SendTo {
            get { return _SendTo;  }

            set { _SendTo = value; }
}
  
 public String MailFrom  {
    get { return _MailFrom; }

            set { _MailFrom = value;}
}
  
 public String Subject  {
    get { return _Subject; }

            set { _Subject = value;}
 }
 
 private void WriteToStream(ref NetworkStream nwstream, string strLine)
 {
   string strString2Send = strLine + "\r\n";
   Byte[] arr2Send = Encoding.Default.GetBytes(strString2Send.ToCharArray());
   nwstream.Write(arr2Send, 0, arr2Send.Length);
 }
 
 private void ReadFromStream(ref NetworkStream nwstream, out string strMessage)
 {
   byte[] readBuffer = new byte[255];
   int nLength = nwstream.Read(readBuffer, 0, readBuffer.Length);
   strMessage = Encoding.ASCII.GetString(readBuffer, 0, nLength);
 }
 
 public String Send() 
{
    String strReturn = "";
TcpClient tcpc = new TcpClient();
tcpc.Connect(_EmailServer, 25);
   NetworkStream nwstream = tcpc.GetStream();
   String strResponse;
   WriteToStream(ref nwstream, "HELO myhost");
   ReadFromStream(ref nwstream, out strResponse);
   strReturn += strResponse + "\n";
   WriteToStream(ref nwstream, "MAIL FROM: " + _MailFrom);
   ReadFromStream(ref nwstream, out strResponse);
   strReturn += strResponse + "\n";
     WriteToStream(ref nwstream, "RCPT TO: " + _SendTo);
   ReadFromStream(ref nwstream, out strResponse);
   strReturn += strResponse + "\n";
   WriteToStream(ref nwstream, "DATA");
   ReadFromStream(ref nwstream, out strResponse);
   strReturn += strResponse + "\n";
   WriteToStream(ref nwstream, "From: " + _MailFrom);
   WriteToStream(ref nwstream, "Subject: " + _Subject);
   WriteToStream(ref nwstream, "To: " + _SendTo);
   WriteToStream(ref nwstream, "");
   WriteToStream(ref nwstream, _Body);
  
   WriteToStream(ref nwstream, "\r\n.");
   ReadFromStream(ref nwstream, out strResponse);
   strReturn += strResponse + "\n";
   return strReturn;
 }
}
}

 

I dette eksempel bruger jeg klassen SendMail i en aspx side, som vist neden for:

SendMail.aspx

 

 

<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="abc.SendMail" %>
<html><head><title>POP3Client</title></head>
<script language="C#" runat="server">
  public void Page_Load(Object sender, EventArgs E) {   
    String EmailServer = "smtp.din_mailserver.dk";
    SendMail mySender = new SendMail();
    mySender.EmailServer = EmailServer;
    mySender.MailFrom = "afsenders_email"; 
    mySender.SendTo = "modtagers_email"; 
    mySender.Subject = "Det her er bare en test"; 
    mySender.Body = "Kære N.N \n\nDette er en test \n";
    String sendResult = mySender.Send();
    Response.Write(sendResult);
}
 </script>
<body><h1>E-Mail er Sendt!</h1></body>
</html>

Endeligt skal SendMail.cs compiles hvilket jeg gør ned nedenstående kommando kørt fra en bat-fil

compile.bat

 csc /out:../../bin/SendMail.dll /t:library /r:System.Web.dll /r:System.dll SendMail.cs pause



Valid XHTML 1.0!