using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Net.Mail;
using System.IO;
using System.Net;
namespace ConsoleApplication1
{
class Program
{
static List<string> Addresses = new List<string>(); static NetworkCredential cred;
static string menu = "\n\nMeny\n\n - Adresser hittades: {0}\n\n1.Skriv ett meddelande till allihopa\t2.Skriv separat meddelande till samtliga\n3.Byt konto att skicka från\nVal: ";
static void Main(string[] args)
{
cred = User();
Console.Write("Registrerat från-adress\n\nSkriv in adressen till filen: ");
string input = Console.ReadLine();
Addresses = Mail.ToList(@input);
PrintMenu();
switch (Console.ReadKey().Key)
{
case ConsoleKey.D1:
ToAllSend();
break;
case ConsoleKey.NumPad1: goto case ConsoleKey.D1;
case ConsoleKey.D2:
PerAddressSend();
break;
case ConsoleKey.NumPad2: goto case ConsoleKey.D2;
case ConsoleKey.D3:
User();
break;
case ConsoleKey.NumPad3: goto case ConsoleKey.D3;
default:
Console.Clear();
PrintMenu();
break;
}
Console.ReadKey();
}
/// <summary>
/// Prints the default menu
/// </summary>
public static void PrintMenu()
{
Console.Write(menu, Addresses.Count);
}
/// <summary>
/// Sends a message to every address found.
/// </summary>
private static void ToAllSend()
{
Console.Write("Ämne: ");
Mail.Subject = Console.ReadLine();
Console.Write("Innehåll: ");
Mail.Body = Console.ReadLine();
for (int i = 0; i < Addresses.Count; i++)
{
if (Addresses[i].Length > 5)
{
Client.Send(cred, Addresses[i], Mail.Subject, Mail.Body);
}
}
Console.WriteLine("Alla jobb klara.");
}
/// <summary>
/// Sends message to each and every address individually
/// </summary>
private static void PerAddressSend()
{
for (int i = 0; i < Addresses.Count; i++)
{
Console.Write("\n\nÄmne: ");
Mail.Subject = Console.ReadLine();
Console.Write("\nInnehåll: ");
Mail.Body = Console.ReadLine();
if (Addresses[i].Length > 5)
{
Client.Send(cred, Addresses[i], Mail.Subject, Mail.Body);
}
Console.WriteLine("Jobb utfört.");
}
Console.WriteLine("\n\nAlla jobb klara.");
}
/// <summary>
/// Initializes new credentials for a user to send from
/// </summary>
private static NetworkCredential User()
{
Console.Clear();
Console.Write("Vilken e-post vill du skicka från?\n\nDin e-post: ");
string sendEmailsFrom = Console.ReadLine();
Console.Write("\nLösenord: ");
Console.ForegroundColor = ConsoleColor.Black;
string sendEmailsFromPassword = Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Gray;
NetworkCredential cred = new NetworkCredential(sendEmailsFrom, sendEmailsFromPassword);
Console.Clear();
return cred;
}
}
public class Client
{
public static void Send(NetworkCredential cred, string to, string subject, string body)
{
MailMessage mailMessage = new MailMessage();
mailMessage.To.Add(to);
mailMessage.Subject = subject;
mailMessage.Body = body;
mailMessage.IsBodyHtml = true;
mailMessage.From = new MailAddress(cred.UserName);
SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587);
mailClient.EnableSsl = true;
mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
mailClient.UseDefaultCredentials = false;
mailClient.Timeout = 8000;
mailClient.Credentials = cred;
mailClient.Send(mailMessage);
}
}
class Mail
{
/// <summary>
/// Containing text
/// </summary>
public static string Body { get; set; }
/// <summary>
/// What subject the mail has
/// </summary>
public static string Subject { get; set; }
/// <summary>
/// Which mailaddress to send to
/// </summary>
public static string To { get; set; }
/// <summary>
/// The stored address to the file
/// </summary>
private static string p_CurrentFileAdress;
/// <summary>
/// Returns a list of string with the content found in the file
/// </summary>
/// <param name="directory">Directory of which file to read from</param>
/// <returns>List of addresses</returns>
public static List<string> ToList(string directory)
{
List<string> tempList = new List<string>();
if (LoadFile(directory))
{
using (StreamReader sr = new StreamReader(p_CurrentFileAdress, Encoding.UTF8))
{
string p_AtLine = "";
while ((p_AtLine = sr.ReadLine()) != null)
{
try
{
if (p_AtLine.Length > 5)
{
if (p_AtLine.Contains('@'))
{
tempList.Add(p_AtLine);
}
}
}
catch (Exception)
{
Console.WriteLine("Inte en giltig adress.");
}
}
}
return tempList;
}
else
{
return null;
}
}
/// <summary>
/// Determines wether the file is existing
/// </summary>
/// <param name="directory">The directory in which the file is located on the harddrive.</param>
/// <returns>State wether the file is existing</returns>
public static bool LoadFile(string directory)
{
if (File.Exists(directory))
{
p_CurrentFileAdress = directory;
return true;
}
else
{
return false;
}
}
public override string ToString()
{
return string.Format("Till: {0}\nÄmne: {1}\nInnehåll: {2}", To, Subject, Body);
}
}
}