C# 入門 & 実践 / C sharp
301-2. メール送受信 - 2 - pop before smtp
基本的には送信前にPOP3でログインするだけです。
このpop3は受信でも使えますね~
// メール送信テスト。
public static bool SendMail( string to , string from , string title, string message )
{
// check mail address
try
{
// pop before smtp のPOP認証
if (false == pop_check())
{
return false;
}
SmtpClient sc = new SmtpClient();
sc.Host = @"192.168.1.123";
//sc.Port = 25;
MailMessage myMessage = new MailMessage("jitmailer@gmail"
,to );
myMessage.Subject = title;
myMessage.SubjectEncoding = Encoding.GetEncoding("iso-2022-jp");
// Encoding は、デフォルトで iso-2022-jp になっているので、
// 指定する必要は無い。
myMessage.BodyEncoding = Encoding.GetEncoding("iso-2022-jp");
myMessage.Body = message;
// 重要度の指定 (Low, Normal, Highから選ぶ)
// 指定する必要は無い。
// myMessage.Priority = MailPriority.Low;
sc.Send(myMessage);
return true;
}
catch
{
return false;
}
}
// POP Check
// pop before smtp のときにpopをチェックする。
public static bool pop_check()
{
try
{
// pop server
string pop3_server = @"192.168.1.123";
TcpClient tc = new TcpClient(pop3_server, 110);
// tc.Connect();
// 非同期でやらないとまた繋がらない・・・
NetworkStream stream = tc.GetStream();
// 接続できたら、次にコマンドを送る。
// 認証用のコマンド:ユーザ名とパスワード+QUIT
string pop_cmd = "USER jitmailer\n";
string pop_cmd_2 = "PASS gggggg\n";
string pop_cmd_3 = "QUIT\n";
Byte[] cmd_data = System.Text.Encoding.ASCII.GetBytes(pop_cmd);
Byte[] cmd_data_2 = System.Text.Encoding.ASCII.GetBytes(pop_cmd_2);
Byte[] cmd_data_3 = System.Text.Encoding.ASCII.GetBytes(pop_cmd_3);
// レスポンスデータ用
Byte[] data = new Byte[256];
String responseData = String.Empty;
// 接続OKのレスポンスを読む
Int32 bytes = stream.Read(data, 0, data.Length);
// ストリームに書き込み
stream.Write(cmd_data, 0, cmd_data.Length);
// パスワードを要求されるメッセージを読む
bytes = stream.Read(data, 0, data.Length);
// +OK message ~
responseData = String.Empty;
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
if (!responseData.StartsWith(@"+OK"))
{
// > - <; エラーですよ。
return false;
}
// パスワードコマンド
stream.Write(cmd_data_2, 0, cmd_data_2.Length);
bytes = stream.Read(data, 0, data.Length);
// +OK message ~
responseData = String.Empty;
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
if (!responseData.StartsWith(@"+OK"))
{
// > - <; エラーですよ。
return false;
}
// QUIT 終了
stream.Write(cmd_data_3, 0, cmd_data_3.Length);
// 終わり。
stream.Close();
tc.Close();
return true;
}
catch
{
// error //
return false;
}
}
しかし、結局は非同期で接続しないとアプリが止まってしまいます。
次は、smtpもpopも非同期にしてみます。
301-1. メール送受信 - 1 - メール送信 «
メール送受信
C# 入門 & 実践 / C sharp