News... | Hack-Acad | Downloads | Web-Projekte | System-Check | Kontakt
HACKACAD - C# - SMTP Routine

Aufbauen einer Telnet Verbindung zum einen SMTP Server und anschliessendes versenden einer einfachen Email Nachricht. Der Code geht von einem optimalen Verlauf aus, d.h. es werden keine Fehlermeldungen ausgegeben (else Zweige). Abschliessend eine Kopie der möglichen Return Codes.

  Source Code:
 
 
 using System;
 using System.IO;
 using System.Net.Sockets;

 namespace SMTPConnect
 {
   class Class1
   {
      static void Main(string[] args)
      {
         string strServer   = "meinSMTPSever";     //Server Adresse eintragen
         string fromEmail   = "";  //Email  Adresse eintragen
         string toEmail     = "";  //Email  Adresse eintragen
         DateTime dtNow     = DateTime.Now;
         string resp        = String.Empty;
         int sPort          = 25;                  //Telnet Port

         TcpClient client		= new TcpClient();
         Console.WriteLine("Connecting to " + strServer + " : {0} .....", sPort);
         client.Connect(strServer,sPort);
         Console.WriteLine("Connected...");
         NetworkStream stream   = client.GetStream();
         StreamReader reader    = new StreamReader(stream);
         StreamWriter writer    = new StreamWriter(stream);

         if (getResponse(reader, ref resp))
         {
            Console.WriteLine(resp);

            sendCMD (writer, "HELO FROM www.via.de");

            if (getResponse(reader, ref resp))
            {
               Console.WriteLine(resp);

               sendCMD (writer, "MAIL FROM: " + fromEmail);

               if (getResponse(reader, ref resp))
               {			
                  Console.WriteLine(resp);

                  sendCMD (writer, "RCPT TO: " + toEmail);

                  if (getResponse(reader, ref resp))
                  {			
                     Console.WriteLine(resp);

                     sendCMD (writer, "DATA");

                     if (getResponse(reader, ref resp))
                     {			
                        Console.WriteLine(resp);
								
                        resp = String.Format("{0:dd MMM yy hh:mm:ss}", dtNow );
								
                        sendCMD (writer, "Date: " + resp);
                        sendCMD (writer, "From: " + fromEmail);
                        sendCMD (writer, "To: " + toEmail);
                        sendCMD (writer, "Subject: SMTP Engine");
                        sendCMD (writer, "Bodycontent\n works, aint it?");
                        sendCMD (writer, ".");
								
                        if (getResponse(reader, ref resp))
                        {			
                           Console.WriteLine(resp);

                           sendCMD (writer, "QUIT");

                           if (getResponse(reader, ref resp))
                           {			
                              Console.WriteLine(resp);
                           }
                        }
                     }  
                  }
               }
            }
         }

         client.Close();
    
         Console.WriteLine("\n Press Enter to continue...");
         Console.Read();
   }

   private static void sendCMD (StreamWriter w, string cmd)
   {
      w.WriteLine(cmd);
      w.Flush();
   }

   private static bool getResponse(StreamReader r, ref string resp)
   {			
      int iReturn = 0;
      bool rBool	= false;
      string tmp	= String.Empty;
			
      resp = r.ReadLine();
      if (resp.Length >= 3 && Char.IsNumber(resp[0]) && Char.IsNumber(resp[1]) 
                           && Char.IsNumber(resp[2]))
      {
         tmp = "" + resp[0] + resp[1] + resp[2];
         iReturn = Convert.ToInt16(tmp);
      }

      if (iReturn == 220 || iReturn == 221 || iReturn == 250 || iReturn == 354) rBool = true;

      return rBool;
      }
   }
 }

	
 
  Mögliche Return Codes:
 
 
	211 System status, or system help reply
	214 Help message
		[Information on how to use the receiver or the meaning of a
		particular non-standard command; this reply is useful only
		to the human user]
	220 <domain> Service ready
	221 <domain> Service closing transmission channel
	250 Requested mail action okay, completed
	251 User not local; will forward to <forward-path>

	354 Start mail input; end with <CRLF>.<CRLF>

	421 <domain> Service not available,
		closing transmission channel
		[This may be a reply to any command if the service knows it
		must shut down]
	450 Requested mail action not taken: mailbox unavailable
		[E.g., mailbox busy]
	451 Requested action aborted: local error in processing
	452 Requested action not taken: insufficient system storage
	          
	500 Syntax error, command unrecognized
		[This may include errors such as command line too long]
	501 Syntax error in parameters or arguments
	502 Command not implemented
	503 Bad sequence of commands
	504 Command parameter not implemented
	550 Requested action not taken: mailbox unavailable
		[E.g., mailbox not found, no access]
	551 User not local; please try <forward-path>
	552 Requested mail action aborted: exceeded storage allocation
	553 Requested action not taken: mailbox name not allowed
		[E.g., mailbox syntax incorrect]
	554 Transaction failed