Где-то три недели назад попросил меня сокурсник программу ему напасть на практику, в тонкости технического задания углубляться не буду, вобщем одной из функций этой программы должна была стать отправка сообщений по электронной почте, для удобства решил всю логику оформить одним куском:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Net.Mail;
using System.Net;
namespace GAlenAPP.Core.Mailer
{
public class Mailer
{
public Mailer()
{
}
public Mailer(
string Login,
string Password)
{
u_login = Login;
u_password = Password;
}
[
DllImport(
"wininet.dll")]
static extern bool InternetGetConnectedState(
ref InternetConnectionState lpdwFlags,
int dwReserved
);
[
Flags]
public enum InternetConnectionState :
int
{
INTERNET_CONNECTION_MODEM = 0x1,
INTERNET_CONNECTION_LAN = 0x2,
INTERNET_CONNECTION_PROXY = 0x4,
INTERNET_RAS_INSTALLED = 0x10,
INTERNET_CONNECTION_OFFLINE = 0x20,
INTERNET_CONNECTION_CONFIGURED = 0x40
}
InternetConnectionState flags = 0;
///
/// Проверка состояния интернета
///
public bool CheckInetConnectionStatus()
{
return InternetGetConnectedState(
ref flags, 0);
}
string u_login = "";
//имя пользователя
string u_password = "";
//пароль пользователя
string server = "";
//Адрес SMTP сервера с которого отправляем
string sender_mail = "";
//будет выведено в поле адрес отправителя
string sender_name = "";
//будет выведено в поле имя отправителя
string adresse_mail = "";
//адрес получателя
string subject = "";
//тема сообщения
string body = "";
//Текст сообщения
bool need_user_validation =
false;
//требуется-ли аутентификация
bool need_hidden_copy =
false;
//требуется ли скрытая копия
string hidden_copy_adresse = "";
//адресат получателя скрытой копии
uint timeout = 2000;
//таймаут сервера
bool needSSL =
false;
// Требуется ли SSL, google требует, а Yandex нет
/*Далее идут свойства через которые передают значения в переменные
описанные выше*/
public string SenderMail
{
get
{
return sender_mail;
}
set
{
sender_mail =
value;
}
}
public string SenderName
{
get
{
return sender_name;
}
set
{
sender_name = value;
}
}
public string AdresseMail
{
get
{
return adresse_mail;
}
set
{
adresse_mail = value;
}
}
public string Subject
{
get
{
return subject;
}
set
{
subject = value;
}
}
public string Body
{
get
{
return body;
}
set
{
body = value;
}
}
public bool NeedUserValidation
{
get
{
return need_user_validation;
}
set
{
need_user_validation = value;
}
}
public bool NeedHiddenCopy
{
get
{
return need_hidden_copy;
}
set
{
need_hidden_copy = value;
}
}
public uint Timeout
{
get
{
return timeout;
}
set
{
timeout = value;
}
}
public string HiddenCopyAdresse
{
get
{
return hidden_copy_adresse;
}
set
{
hidden_copy_adresse = value;
}
}
public string SMTPServer
{
get
{
return server;
}
set
{
server = value;
}
}
public bool NeedSSL
{
get
{
return needSSL;
}
set
{
needSSL = value;
}
}
/* Собственно сама отсылка */
public bool SendMail()
{
var from = new MailAddress(sender_mail, sender_name);
var to = new MailAddress(adresse_mail);
var message = new MailMessage(from, to);
message.Subject = subject;
message.Body = body;
if (need_hidden_copy)
{
var copy = new MailAddress(hidden_copy_adresse);
message.CC.Add(copy);
}
try
{
var client = new SmtpClient(server);
client.Timeout = (int)timeout;
if (need_user_validation)
{
client.Credentials =
new System.Net.NetworkCredential(u_login, u_password);
}
client.EnableSsl = needSSL;
client.Send(message);
if (SendingCompleted != null)
SendingCompleted(this, EventArgs.Empty);
return true;
}
catch
{
if (SendingFailed != null)
SendingFailed(this, EventArgs.Empty);
return false;
}
}
public event EventHandler SendingCompleted;/*событие вызываемое при успешной отправке*/
public event EventHandler SendingFailed;/* --||--при провале*/
}//Конец класса
}//Конец пространства имен
Если есть какой-нибудь способ забрасывания сюда кода, так чтобы не приходилось делать подсветку вручную, то подскажите пожалуйста, был-бы признателен.