Laden...

[Gelöst]Outlook Signatur nach Empfänger ändern

Erstellt von Tweak90 vor 11 Jahren Letzter Beitrag vor 11 Jahren 6.679 Views
T
Tweak90 Themenstarter:in
24 Beiträge seit 2012
vor 11 Jahren
[Gelöst]Outlook Signatur nach Empfänger ändern

Guten Tag,
ich wollte mal fragen ob es möglich ist beim Erstellen einer Email zu schauen wer der Empfänger ist und dann entsprechend dem Empfänger die Signatur zu ändern.

Folgendes Scenario liegt vor:
Innerhalb unseres Betriebes haben wir einheitliche Signaturen, welche beim Kontakt mit Kunden natürlich übermittelt werden sollten. Bei hausinternen Mails sollen diese aber nicht mitgesendet werden.

Dies dient zum einen der Übersichtlichkeit, zum anderen werden Mails oft auch einfach ausgedruckt und dabei kostet die Signatur schon ne halbe Seite.

Vorstellen würde ich mir das wie folgt:
Beim Verlassen der CC oder Empfänger box wird geprüft welche EMails eingetragen sind,
für jede EMail wird dann geprüft:
Hat die EMail die Endung @firmenname.de
oder:
Hat die Adresse den genauen Wortlaut, z.B.: verteiler@local
dafür könnte man ja im ribbon ne einstellung hinterlegen wo man mail endungen oder genaue Mailadressen hinterlegen kann. (Theoretisch nur eine Liste wp immer EndsWith abgefragt wird... tuts dann ja auch für den ganzen Wortlaut 😉)

Sollte eine oder mehr als eine EMail Adresse nicht auf den Filter zutreffen, so werden alle Empfänger die EMail mit Signatur erhalten, ansonsten ohne.

Vielleicht gibt es da ja schon was, jemand hat schonmal was ähnliches gemacht oder jemand kann mir einfach bestätigen, dass es geht oder mir sagen warum nicht.

Auf ein AddIn für Outlook und auf Outlook selbst sind wir angewiesen, weil schon andere Firmeninterne AddIns genutzt werden.

Liebe Grüße und Danke im Vorraus
Tweak90

G
538 Beiträge seit 2008
vor 11 Jahren

Ja es ist möglich eine Email vor dem Senden zu verändern (was wohl grob deine Frage war):

Siehe hier: How To: Make changes to an Outlook message before sending

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

T
Tweak90 Themenstarter:in
24 Beiträge seit 2012
vor 11 Jahren

Jao danke, das funktioniert schonmal ganz gut,
für Interessenten hier der Quelltext:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Outlook;

namespace signatureHandler
{
public partial class ThisAddIn
{
Properties.Settings userData = null;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.ItemSend += new
Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
LoadConfigSettings();
}

private void LoadConfigSettings()
{
userData = new Properties.Settings();
sigHandlerCfg.Current.mailending = userData.mailending;
sigHandlerCfg.Current.signature = userData.signature;
}

private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}

void Application_ItemSend(object Item, ref bool Cancel)
{
bool shouldAddSignature = false;
Outlook.Recipient recipient = null;
Outlook.Recipients recipients = null;
Outlook.MailItem mail = Item as Outlook.MailItem;
if (mail != null)
{
string mailAdressToCheck;
try
{
foreach (Outlook.Recipient rec in mail.Recipients)
{
if (rec.AddressEntry.AddressEntryUserType == OlAddressEntryUserType.olExchangeUserAddressEntry)
mailAdressToCheck = rec.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
else
mailAdressToCheck = rec.Address;

if (!mailAdressToCheck.EndsWith(userData.mailending))
{
shouldAddSignature = true;
}
}
}
catch
{
shouldAddSignature = true;
}
if (shouldAddSignature)
{
string addToBody = userData.signature;
if (!mail.Body.EndsWith(addToBody))
mail.Body += addToBody;
}
recipients = mail.Recipients;
if (recipient != null) Marshal.ReleaseComObject(recipient);
if (recipients != null) Marshal.ReleaseComObject(recipients);
}
}

#region VSTO generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}

#endregion
}
}


In den properties 2 Strings hinterlegt für mailending und signature
das config window hat net richtextbox und ne textbox, dazu 2 buttons:

hier der text:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace signatureHandler
{
public partial class sigHelperConfig : Form
{
Properties.Settings userData = null;

public sigHelperConfig()
{
InitializeComponent();
userData = new Properties.Settings();
LoadConfigSettings();
rtbSignature.Text = userData.signature;
tbMailEnding.Text = userData.mailending;
}

private void LoadConfigSettings()
{
userData = new Properties.Settings();
sigHandlerCfg.Current.mailending = userData.mailending;
sigHandlerCfg.Current.signature = userData.signature;
}

private void btnSave_Click(object sender, EventArgs e)
{
userData.mailending = tbMailEnding.Text;
userData.signature = rtbSignature.Text; ;
userData.Save();
this.DialogResult = DialogResult.OK;
this.Close();
}

private void btnAbort_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Abort;
this.Close();
}
}
}

zuletzt das ribbon mit nem button für die einstellungen:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;

namespace signatureHandler
{
public partial class signatureHandler
{
private void signatureHandler_Load(object sender, RibbonUIEventArgs e)
{

}

private void btnConfig_Click(object sender, RibbonControlEventArgs e)
{
sigHelperConfig config = new sigHelperConfig();
config.ShowDialog();
}
}
}

die sigConfig:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace signatureHandler
{

class sigHandlerCfg
{


private static sigHandlerCfg fCurrent;
public static sigHandlerCfg Current
{
get
{
if (fCurrent == null)
fCurrent = new sigHandlerCfg();
return fCurrent;
}
}
private sigHandlerCfg()
{
}

public string mailending
{
get;
set;
}
public string signature
{
get;
set;
}
}
}

jetzt muss nur die richtextbox in der die Signatur drin ist weg und dafür ein Auswahldialog für die bereits hinterlegten Signaturen von Outlook (standard usw...).

Dazu sollte die Signatur nicht an die Email an gehangen werden sondern schon im Editor sichtbar sein und im Falle des Falles gelöscht werden.

Auch sollte die Signatur als signatur element und nicht als Plaintext drin stehen, damit diese auch sauber erkannt wird, nicht das am ende auf grund einer kleinen änderung von hand ne doppelte signatur hinzukommt... aber das sind alles nur Spielereien die ich nachträglich hinzufüge.

Danke auf jeden Fall für die Antwort, wenn das Projekt abgeschlossen und brauchbar ist lade ich es hier hoch für mögliche Interessenten 😃

5.657 Beiträge seit 2006
vor 11 Jahren

Weeks of programming can save you hours of planning