Как правильно использовать api Temp-mail

458
02 января 2018, 12:52

Подскажите пожалуйста, какие значения куда надо вбивать что бы использовать данный код. Я уже целый день мучаюсь с этими public static.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace Temp_Mail
{
internal sealed class RGenerator
{
const int BufferSize = 1024;
byte[] RandomBuffer;
int BufferOffset;
static System.Security.Cryptography.RNGCryptoServiceProvider rng;
static RGenerator()
{
rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
}
public RGenerator()
{
RandomBuffer = new byte[BufferSize];
BufferOffset = RandomBuffer.Length;
}
private byte Next()
{
if (BufferOffset >= RandomBuffer.Length)
{
rng.GetBytes(RandomBuffer);
BufferOffset = 0;
}
return RandomBuffer[BufferOffset++];
}
public int Next(int minValue, int maxValue)
{
int range = maxValue - minValue;
return minValue + Next() % range;
}
const int MinStringLength = 6;
const int MaxStringLength = 10;
public string NextString()
{
StringBuilder sb = new StringBuilder();
int count = Next(MinStringLength, MaxStringLength);
for (int i = 0; i < count; i++)
sb.Append((char)Next('a', 'z'));
return sb.ToString();
}
}
internal static class HTTPWrapper
{
static DateTime unix = new DateTime(1970, 1, 1);
static XDocument Get(string url)
{
try
{
var req = (HttpWebRequest)HttpWebRequest.Create(url);
req.AutomaticDecompression = DecompressionMethods.GZip;
req.UserAgent = "CSWrap";
using (var resp = req.GetResponse())
using (var s = resp.GetResponseStream())
return XDocument.Load(s);
}
catch (WebException e)
{
if ((e.Status & WebExceptionStatus.ProtocolError) == WebExceptionStatus.ProtocolError)
return null;
throw;
}
catch { throw; }
}
public static string[] GetDomains()
{
var xml = Get("http://api.temp-mail.ru/request/domains/format/xml/");
return xml.Root.Elements().Select(x => x.Value).ToArray();
}
public static Letter[] GetLetters(string hash, string lastId = null)
{
var t = Get(string.Format("http://api.temp-mail.ru/request/mail/id/{0}/format/xml/", hash));
if (t == null)
return new Letter[0];
//Жалко, что нельзя просто запросить новые сообщения без кучи старых, 
//А новые сообщения оказываются в самом конце этой кучи =(
var arr = t.Root.Elements().Reverse().ToArray();
var result = new List<Letter>(arr.Length);
foreach (var x in arr)
{
string mailId = x.Element("mail_id").Value;
if (lastId == mailId)
break;
result.Add(new Letter
{
MailId = mailId,
MailAddressId = x.Element("mail_address_id").Value,
MailFrom = x.Element("mail_from").Value,
MailSubject = x.Element("mail_subject").Value,
MailPreview = x.Element("mail_preview").Value,
MailTextOnly = x.Element("mail_text_only").Value,
MailText = x.Element("mail_text").Value,
MailHtml = x.Element("mail_html").Value,
MailTimestamp = unix + TimeSpan.FromSeconds(double.Parse(x.Element("mail_timestamp").Value))
});
};
return result.ToArray();
}
}
/// <summary>
/// Сообщение
/// </summary>
public struct Letter
{
/// <summary>
/// Уникальный идентификатор письма, присвоенный системой
/// </summary>
public string MailId;
/// <summary>
/// Md5 хеш почтового адреса
/// </summary>
public string MailAddressId;
/// <summary>
/// Отправитель
/// </summary>
public string MailFrom;
/// <summary>
/// Тема
/// </summary>
public string MailSubject;
/// <summary>
/// Предпросмотр сообщения
/// </summary>
public string MailPreview;
/// <summary>
/// Cообщение в текстовом или в html формате (основной)
/// </summary>
public string MailTextOnly;
/// <summary>
/// Cообщение только в текстовом формате
/// </summary>
public string MailText;
/// <summary>
/// Cообщение только в html формате
/// </summary>
public string MailHtml;
/// <summary>
/// Время
/// </summary>
public DateTime MailTimestamp;
}
/// <summary>
/// API для работы с temp-mail.ru
/// </summary>
public sealed class TempMail
{
RGenerator gen;
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
string lastMailId;
/// <summary>
/// Доступные домены
/// </summary>
public string[] Domains { get; private set; }
/// <summary>
/// Хэш используемого ящика
/// </summary>
public byte[] MailHash { get; private set; }
/// <summary>
/// Хэш используемого ящика
/// </summary>
public string MailHashString { get; private set; }
/// <summary>
/// Имя используемого ящика
/// </summary>
public string Mail { get; private set; }
/// <summary>
/// 
/// </summary>
public TempMail()
{
gen = new RGenerator();
}
/// <summary>
/// Получает список доступных доменов (@domain)
/// </summary>
public void GetDomains()
{
Domains = HTTPWrapper.GetDomains();
}
/// <summary>
/// Random name(6-10 length string)@Random domain
/// </summary>
public void GetNewMail() { GetNewMail(gen.NextString()); }
/// <summary>
/// mailName@Random domain
/// </summary>
/// <param name="mailName"></param>
public void GetNewMail(string mailName)
{
var domain = Domains[gen.Next(0, Domains.Length - 1)];
Mail = mailName + domain;
MailHash = md5.ComputeHash(Encoding.ASCII.GetBytes(Mail));
StringBuilder sb = new StringBuilder(MailHash.Length * 2);
for (int i = 0; i < MailHash.Length; i++)
sb.Append(MailHash[i].ToString("X2"));
MailHashString = sb.ToString();
}
/// <summary>
/// Получает сообщения с почты
/// </summary>
/// <returns>Пустой массив, если нету сообщений</returns>
public Letter[] GetLetters()
{
var result = HTTPWrapper.GetLetters(MailHashString);
if (result.Length > 0)
lastMailId = result[0].MailId;
return result;
}
/// <summary>
/// Возвращает только новые сообщения
/// </summary>
/// <returns>Пустой массив, если нету новых сообщений</returns>
public Letter[] GetNewLetters()
{
var result = HTTPWrapper.GetLetters(MailHashString, lastMailId);
if (result.Length > 0)
lastMailId = result[0].MailId;
return result;
}
}
}

И вроде бы есть комменты но я не могу понять что куда вписывать. В силу отсутствие знаний.

  1. Как посмотреть какие домены есть
  2. Как генерировать случайный домен
  3. как письма читать и т.д

Вообще нету никаких манов

READ ALSO
Как задетектить инжект dll?

Как задетектить инжект dll?

Подскажите способы по детекту инжекта в процесс dll например monocecil и так далее

282
Выбор DI: AutoMapper vs Autofac

Выбор DI: AutoMapper vs Autofac

У Марка Симана в книге Внедрение зависимостей вNet (написана в 2008 году) рассматриваются несколько библиотек DI: StructureMap, Castle Windsor, Unity, Autofac

359
ASP.NET MVC .Валидация на клиенте

ASP.NET MVC .Валидация на клиенте

Создал атрибуты для валидации данных моделиОднако валидация происходит на стороне сервера, на клиенте никак не работают

305
SQLite шифрование

SQLite шифрование

Создал програмно в C# базу данных SQLite и задал пароль в connection string, програмно спокойно получаю доступ к БД, но введя пароль в менеджере DB Browser...

356