The next generation of the Teknik Services. Written in ASP.NET.
https://www.teknik.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.2 KiB
138 lines
4.2 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.Text; |
|
|
|
namespace Teknik.MailService |
|
{ |
|
public class HMailService : IMailService |
|
{ |
|
private readonly hMailServer.Application _App; |
|
|
|
private string _Host { get; set; } |
|
private string _Username { get; set; } |
|
private string _Password { get; set; } |
|
private string _Domain { get; set; } |
|
|
|
private string _CounterServer { get; set; } |
|
private string _CounterDatabase { get; set; } |
|
private string _CounterUsername { get; set; } |
|
private string _CounterPassword { get; set; } |
|
private int _CounterPort { get; set; } |
|
|
|
public HMailService(string host, string username, string password, string domain, string counterServer, string counterDatabase, string counterUsername, string counterPassword, int counterPort) |
|
{ |
|
_Host = host; |
|
_Username = username; |
|
_Password = password; |
|
_Domain = domain; |
|
|
|
_CounterServer = counterServer; |
|
_CounterDatabase = counterDatabase; |
|
_CounterUsername = counterUsername; |
|
_CounterPassword = counterPassword; |
|
_CounterPort = counterPort; |
|
|
|
_App = InitApp(); |
|
} |
|
|
|
public void CreateAccount(string username, string password, long size) |
|
{ |
|
var domain = _App.Domains.ItemByName[_Domain]; |
|
var newAccount = domain.Accounts.Add(); |
|
newAccount.Address = username; |
|
newAccount.Password = password; |
|
newAccount.Active = true; |
|
newAccount.MaxSize = (int)(size / 1000000); |
|
|
|
newAccount.Save(); |
|
} |
|
|
|
public bool AccountExists(string username) |
|
{ |
|
try |
|
{ |
|
GetAccount(username); |
|
// We didn't error out, so the email exists |
|
return true; |
|
} |
|
catch { } |
|
return false; |
|
} |
|
|
|
public void DeleteAccount(string username) |
|
{ |
|
var account = GetAccount(username); |
|
if (account != null) |
|
{ |
|
account.Delete(); |
|
} |
|
} |
|
|
|
public void EnableAccount(string username) |
|
{ |
|
EditActivity(username, true); |
|
} |
|
|
|
public void DisableAccount(string username) |
|
{ |
|
EditActivity(username, false); |
|
} |
|
|
|
public void EditActivity(string username, bool active) |
|
{ |
|
var account = GetAccount(username); |
|
account.Active = active; |
|
account.Save(); |
|
} |
|
|
|
public void EditMaxEmailsPerDay(string username, int maxPerDay) |
|
{ |
|
//We need to check the actual git database |
|
MysqlDatabase mySQL = new MysqlDatabase(_CounterServer, _CounterDatabase, _CounterUsername, _CounterPassword, _CounterPort); |
|
string sql = @"INSERT INTO mailcounter.counts (qname, lastdate, qlimit, count) VALUES ({1}, NOW(), {0}, 0) |
|
ON DUPLICATE KEY UPDATE qlimit = {0}"; |
|
mySQL.Execute(sql, new object[] { maxPerDay, username }); |
|
} |
|
|
|
public void EditMaxSize(string username, long size) |
|
{ |
|
var account = GetAccount(username); |
|
account.MaxSize = (int)(size / 1000000); |
|
account.Save(); |
|
} |
|
|
|
public void EditPassword(string username, string password) |
|
{ |
|
var account = GetAccount(username); |
|
account.Password = password; |
|
account.Save(); |
|
} |
|
|
|
public DateTime LastActive(string username) |
|
{ |
|
var account = GetAccount(username); |
|
return (DateTime)account.LastLogonTime; |
|
} |
|
|
|
private hMailServer.Application InitApp() |
|
{ |
|
var app = new hMailServer.Application(); |
|
app.Connect(); |
|
app.Authenticate(_Username, _Password); |
|
|
|
return app; |
|
} |
|
|
|
private hMailServer.Account GetAccount(string username) |
|
{ |
|
var domain = _App.Domains.ItemByName[_Domain]; |
|
return domain.Accounts.ItemByAddress[username]; |
|
} |
|
|
|
public bool Enabled(string username) |
|
{ |
|
var account = GetAccount(username); |
|
return account.Active; |
|
} |
|
} |
|
}
|
|
|