Daha önceki yazımızda dinamik ip’den dolayı daha sonra ulaşamadığımız sql serverdan söz etmiştik. Bu gün ortadan kaybolan bu server ve bilgisayarlara IPlerini soracaz, onlarda bize IP bilgilerini mail atacaklar, tabi biz de Ip bilgilerini mail yoluyla soracaz :)))
Mantık şu şekilde çalışmaktadır: Ip bilgisi isteyen maillerin konu kısmı belli bir kalıpta olacak, örneğin “IP REQUEST”. IP bilgisi istenen bilgisayarda da bir program sürekli veya belli aralıklarla belli bir mail hesabını sorgulayıp daha önce belirlenen başlıkla yeni mail olup olmadığını sorgulayacak. Eğer bu başlıkla yeni mail varsa otomatik olarak maili gönderen kişiye IP bilgilerini mail atacak 🙂
Nasıl fikir 😉
Öncelikle MailSystem.Net kütüphanesini projenize referans olarak eklemelisiniz.
Yeni mail olup olmadığını kontrol edecek olan sınıf:
using System.Collections.Generic;
using System.Linq;
using ActiveUp.Net.Mail;
namespace WindowsFormsApplication4
{
public class MailRepository
{
private Imap4Client _client;
public MailRepository(string mailServer, int port, bool ssl, string login, string password)
{
if (ssl)
Client.ConnectSsl(mailServer, port);
else
Client.Connect(mailServer, port);
Client.Login(login, password);
}
public IEnumerable<Message>GetUnreadMails(string mailBox)
{
return GetMails(mailBox, "UNSEEN").Cast<Message>();
}
protected Imap4Client Client
{
get
{
if (_client == null)
_client = new Imap4Client();
return _client;
}
}
private MessageCollection GetMails(string mailBox, string searchPhrase)
{
Mailbox mails = Client.SelectMailbox(mailBox);
MessageCollection messages = mails.SearchParse(searchPhrase);
return messages;
}
}
}
Şimdi de mail kontrolü yapacak olan metodumuz:
//Dinleme yapılacak mail adresi bilgileri
MailRepository rep = new MailRepository("imap.gmail.com", 993, true, @"kullanıcı_adı", "şifre");
// Okunmamış mailleri getir
List<Message> messages = rep.GetUnreadMails("Inbox").ToList();
// Dış Ip bilgisi sorgulama
WebClient webclient = new WebClient();
string externalIp = webclient.DownloadString("http://checkip.dyndns.org/");
string[] strings = externalIp.Split(new[] { "body>" }, StringSplitOptions.RemoveEmptyEntries);
string[] split = strings[1].Split(':');
externalIp = split[1].Substring(0, split[1].Length - 2);
//İç IP sorgulama
IPAddress[] hostAddresses = Dns.GetHostAddresses(Dns.GetHostName());
string s =
hostAddresses.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork).ToString();
SmtpClient client = null;
foreach (var email in messages)
{
if (email.Subject.Equals("IP REQUEST", StringComparison.OrdinalIgnoreCase))
{
if (s != null)
{
if (client == null)
{
// Cevap maili gönderecek olan client
client = new SmtpClient();
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("kullanıcı_adı", "şifre");
}
MailMessage message = new MailMessage("saitorhan@gmail.com", email.From.Email);
message.Subject = "Ip İstek Sonucu";
message.Body = String.Format("Dış Ip: {0}\nİç Ip: {1}", externalIp, s);
client.Send(message);
MessageBox.Show(":)");
}
}
}