181 lines
6.9 KiB
C#
181 lines
6.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.DirectoryServices;
|
|
using System.DirectoryServices.AccountManagement;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net.Mail;
|
|
using System.Net.Mime;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace MailSend_Lesebestätigung
|
|
{
|
|
public partial class Form1 : FormEx
|
|
{
|
|
SynchronizationContext synccontext;
|
|
|
|
private string mail_path = $@"{Application.StartupPath}\Serienbriefe";
|
|
private FHelp helpForm = new FHelp();
|
|
|
|
|
|
|
|
public Form1()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void Form1_Load(object sender, EventArgs e)
|
|
{
|
|
Directory.CreateDirectory(mail_path);
|
|
listViewEx1.DoubleBuffer(true);
|
|
}
|
|
|
|
private void abtnAD_Click(object sender, EventArgs e)
|
|
{
|
|
synccontext = SynchronizationContext.Current;
|
|
File.Delete("ad_users.csv");
|
|
LoadADColumns();
|
|
Task.Run(delegate
|
|
{
|
|
lADload.Loading("AD wird ausgelesen", "Fertig", () =>
|
|
{
|
|
foreach (UserPrincipal user in ActiveDirectory.GetUsers(new PrincipalContext(ContextType.Domain, "Domainname", Properties.Settings.Default.LDAPcontainer)))
|
|
{
|
|
if (user.Enabled != true || user.GetProperty("employeeID") == "")
|
|
continue;
|
|
string[] userinfo = Properties.Settings.Default.ADuserProps.Split(',').Select(prop => user.GetProperty(prop.Split(':')[1])).ToArray();
|
|
//string[] userinfo = { user.GetProperty("givenname"), user.GetProperty("sn"), user.GetProperty("department"), user.EmailAddress, user.GetProperty("employeeID"), user.SamAccountName };
|
|
File.AppendAllText("ad_users.csv", $@"{string.Join(";", userinfo)}{Environment.NewLine}");
|
|
var item = new ListViewItemEx(userinfo[0]);
|
|
item.SubItems.AddRange(userinfo.Skip(1).ToArray());
|
|
listViewEx1.Invoke(new MethodInvoker(delegate { listViewEx1.Items.Add(item); }));
|
|
}
|
|
listViewEx1.Invoke(new MethodInvoker(delegate
|
|
{
|
|
listViewEx1.SortByColumn(1, SortOrder.Ascending);
|
|
listViewEx1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
|
|
}));
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
private void LoadADColumns()
|
|
{
|
|
listViewEx1.Clear();
|
|
listViewEx1.Columns.AddRange(Properties.Settings.Default.ADuserProps.Split(',').Select(prop => new ColumnHeader() { Text = prop.Split(':')[0], Name = prop.Split(':')[1] }).ToArray());
|
|
}
|
|
|
|
|
|
private void LoadMailColumns()
|
|
{
|
|
listViewEx1.Clear();
|
|
listViewEx1.Columns.Add("E-Mail");
|
|
listViewEx1.Columns.Add("Dateiname");
|
|
listViewEx1.Columns.Add("Fehler");
|
|
}
|
|
|
|
async private void animationButton1_Click(object sender, EventArgs e)
|
|
{
|
|
await GetMails();
|
|
foreach (ListViewItemEx item in listViewEx1.Items)
|
|
{
|
|
try
|
|
{
|
|
string mailaddress = item.Text;
|
|
string filename = item.SubItems[1].Text;
|
|
string fullfilename = $@"{mail_path}\{mailaddress}\{filename}";
|
|
|
|
var mail = new SendMail("[Mailserver]", 25, "[Mail-User]", "[Mail-User-Pass]");
|
|
Attachment attachment = new Attachment(fullfilename, new ContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"));
|
|
MailMessage mailmessage = new MailMessage(new MailAddress("[Mail-Adress]", "[From]"), new MailAddress(mailaddress)) { IsBodyHtml = true };
|
|
mailmessage.Subject = "Bestätigung zur Einhaltung der Verhaltensregeln";
|
|
|
|
string mailbody = File.ReadAllText(Properties.Settings.Default.MailBody);
|
|
|
|
var user = ActiveDirectory.GetUser(new PrincipalContext(ContextType.Domain, "[Domainname], Properties.Settings.Default.LDAPcontainer), new MailAddress(mailaddress));
|
|
|
|
Properties.Settings.Default.MailBodyReplacements.Cast<string>().ToList().ForEach(replacement =>
|
|
{
|
|
mailbody = mailbody.Replace($"%{replacement.Split(':')[0]}%", user.GetProperty(replacement.Split(':')[1]));
|
|
});
|
|
|
|
|
|
mailmessage.Body = mailbody;
|
|
//mailmessage.Body = File.ReadAllText(Properties.Settings.Default.MailBody).Replace("%UserName%", filename.Split(',')[0]);
|
|
mailmessage.Attachments.Add(attachment);
|
|
var send = mail.Send(mailmessage);
|
|
if (send == MailSendStatus.Fail)
|
|
{
|
|
item.HeaderColor = Color.OrangeRed;
|
|
item.SubItems.Add("Mail nicht versendet");
|
|
}
|
|
else
|
|
{
|
|
item.HeaderColor = Color.Honeydew;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
item.HeaderColor = Color.OrangeRed;
|
|
item.SubItems.Add("Mail nicht versendet");
|
|
File.WriteAllText("log.log", ex.ToString() + Environment.NewLine + Environment.NewLine);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async private Task GetMails()
|
|
{
|
|
LoadMailColumns();
|
|
var dir = new DirectoryInfo(mail_path);
|
|
|
|
foreach (var subdir in dir.GetDirectories())
|
|
{
|
|
FileInfo file = subdir.GetFiles()[0];
|
|
var item = new ListViewItemEx(subdir.Name);
|
|
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, file.Name) { Name = listViewEx1.Columns[item.SubItems.Count].Name });
|
|
|
|
listViewEx1.Invoke(new MethodInvoker(delegate
|
|
{
|
|
listViewEx1.Items.Add((ListViewItemEx)item);
|
|
listViewEx1.EnsureVisible(listViewEx1.Items.Count - 1);
|
|
}));
|
|
|
|
await Task.Delay(1);
|
|
}
|
|
listViewEx1.SortByColumn(1, SortOrder.Ascending);
|
|
listViewEx1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
|
|
}
|
|
|
|
|
|
|
|
private void abtnPath_Click(object sender, EventArgs e)
|
|
{
|
|
Process.Start(mail_path);
|
|
}
|
|
|
|
private void abtnHelp_Click(object sender, EventArgs e)
|
|
{
|
|
if(helpForm.Visible == false)
|
|
helpForm.Show();
|
|
else
|
|
helpForm.Hide();
|
|
|
|
}
|
|
|
|
async private void abtnShowMails_Click(object sender, EventArgs e)
|
|
{
|
|
await GetMails();
|
|
}
|
|
}
|
|
}
|