ASPベースの作成NETのSMTPメールサービスの具体的な方法

5472 ワード

まず、名前空間を継承するシステムを作成します.Net.SocketsのTcpClientクラスのクラス.TcpClientクラスは、ネットワークに接続、送信、受信するための簡単な方法を提供する.GetStreamメソッドは、ネットワーク・ストリーム(NetworkStream)を作成するために使用されます.ネットワーク・ストリームの読み取りと書き込み(NetworkStream)方法は、リモート・ホストにデータを送信し、リモート・ホストからネットワーク・ストリームを受信するために使用されます.


public class ClientConnection : TcpClient
{
private NetworkStream _NetworkStream = null;
private StreamReader _StreamReader = null;
private StreamWriter _StreamWriter = null;
public void Initialise()
{
_NetworkStream = this.GetStream();
_StreamReader = new StreamReader(_NetworkStream,
System.Text.Encoding.Default, false, this.ReceiveBufferSize);
_StreamWriter = new StreamWriter(_NetworkStream,
System.Text.Encoding.Default, this.SendBufferSize);
}
public void Send(string s)
{
_StreamWriter.WriteLine(s);
_StreamWriter.Flush();
}
public string Read()
{
return _StreamReader.ReadLine();
}

次に、送信されたメールに関するいくつかの情報を設定するいくつかの属性を持つメールを送信するクラスを作成します.


public string MailServer = "127.0.0.1" ;
public string From = "" ;
public string To = "" ;
public string Body = "" ;
public string Subject = "" ; 
メールを送信する方法と.この方法では、サーバ名とポートで接続を作成します.コマンドはリモートホストに送信できます.


public void Send()
{
tcp = new ClientConnection();
tcp.Connect(MailServer,25);
tcp.Initialise();
SendCommandToServer("HELO " + System.Net.Dns.GetHostName());
SendCommandToServer("MAIL FROM: " + From + "\r
");
SendCommandToServer("RCPT TO: " + To + "\r
");
string StrHeaders = "";
StrHeaders += "From: " + From + "\r
";
StrHeaders += "To: " + To + "\r
";
StrHeaders += "Subject: " + Subject + "\r
";
StrHeaders += "Content-type: text/plain; charset=\"ISO-8859-1\"" + "\r
";
SendCommandToServer("DATA\r
" + StrHeaders);
SendCommandToServer(Body + "\r
.\r
");
SendCommandToServer("QUIT\r
");
}
ローカルサーバにコマンドをプライベートで送信する方法もあります.


private void SendCommandToServer(string cmd)
{
tcp.Send(cmd);
Response=tcp.Read();
System.Web.HttpContext.Current.Trace.Warn("Response",Response);
}
今、このクラスは基本的に完成しました.また、開発者は、TcpClientクラスのClose()メソッドを使用して、エラー・リターンとリソースの解放を確立することもできます.同様に、これらのプロパティは、メールにより多くの情報を含めるように拡張できます.
最後に、aspxファイルにメールを送信するコードを書くことができます.この例では、「localhost」はメールサーバです.状況に応じてこれを変更したり、メールを送信するローカルサーバをどのように設定するかについての私の文章を見たりすることができます.



<br>protected void Page_Load(Object Src, EventArgs E) <br>{ <br>if (IsPostBack) <br>{ <br>Mail Mailer=new Mail(); <br>Mailer.From=From.Text; <br>Mailer.To=To.Text; <br>Mailer.Subject=Subject.Text; <br>Mailer.Body=Body.Text; <br>Mailer.MailServer="localhost"; <br>Mailer.Send(); <br>} <br>} <br>
次は完全なコードです.


using System.IO;
using System.Net.Sockets;
namespace MyComponents
{
public class ClientConnection : TcpClient
{
private NetworkStream _NetworkStream = null;
private StreamReader _StreamReader = null;
private StreamWriter _StreamWriter = null;
public void Initialise()
{
_NetworkStream = this.GetStream();
_StreamReader = new StreamReader(_NetworkStream,
System.Text.Encoding.Default, false, this.ReceiveBufferSize);
_StreamWriter = new StreamWriter(_NetworkStream,
System.Text.Encoding.Default, this.SendBufferSize);
}
public void Send(string s)
{
_StreamWriter.WriteLine(s);
_StreamWriter.Flush();
}
public string Read()
{
return _StreamReader.ReadLine();
}
}
public class Mail
{
public string MailServer = "127.0.0.1" ;
public string From = "" ;
public string To = "" ;
public string Body = "" ;
public string Subject = "" ;
private ClientConnection tcp=null;
private string Response="";
public void Send()
{
tcp = new ClientConnection();
tcp.Connect(MailServer,25);
tcp.Initialise();
SendCommandToServer("HELO " + System.Net.Dns.GetHostName());
SendCommandToServer("MAIL FROM: " + From + "\r
");
SendCommandToServer("RCPT TO: " + To + "\r
");
string StrHeaders = "";
StrHeaders += "From: " + From + "\r
";
StrHeaders += "To: " + To + "\r
";
StrHeaders += "Subject: " + Subject + "\r
";
StrHeaders += "Content-type: text/plain; charset=\"ISO-8859-1\"" + "\r
";
SendCommandToServer("DATA\r
" + StrHeaders);
SendCommandToServer(Body + "\r
.\r
");
SendCommandToServer("QUIT\r
");
}
private void SendCommandToServer(string cmd)
{
tcp.Send(cmd);
Response=tcp.Read();
System.Web.HttpContext.Current.Trace.Warn("Response",Response);
}
}