Autor Beitrag
Vegeto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Do 13.12.12 16:06 
Hallo Liebe Gemeinde :)

Ich bin auf der Suche nach einem kleinen C# Tool, was SerienMails raus schickt, mit PDF Anhang (Und die PDF sollte variable sein, also sich je nach Empfänger ändern, aber das gehört ja nicht hier rein xD).

Ich habe schon gesucht doch nichts gefunden(Nur Sachen wo man einzelne Email senden kann). Vielleicht weiß einer von euch wo ich ein solches C# Tool finden könnte ?
Bitte keine Programme, die genau dieses erfüllen, aber KEIN C# ist. Brauche ein Tool, dass mit C# programmiert wurde.

Gibt es sowas überhaupt? Oder muss Ich das selber Entwickeln?

Mit freundlichen Grüßen
Vegeto


Zuletzt bearbeitet von Vegeto am Do 27.12.12 14:56, insgesamt 1-mal bearbeitet
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Do 13.12.12 23:07 
Hi,

ich denke das musst du selbst erledigen.

user profile iconVegeto hat folgendes geschrieben Zum zitierten Posting springen:

Ich habe schon gesucht doch nichts gefunden(Nur Sachen wo man einzelne Email senden kann)

Mit einer Schleife sollte es dann eine Kleinigkeit sein, oder?

_________________
Gruß
Christoph
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 14.12.12 09:33 
Hi Cristoph1972,

Danke für deine Antwort, wollte jetzt kein eigenes Programm schreiben, wollte einfach den Code je nachdem verändern (wenn es denn erlaubt wäre) und in mein Projekt mit einbinden.

Aber wenn es natürlich keine Möglichkeit gibt, muss ich das Tool selber schreiben :/

Zunächst mal Danke für deine Antwort.

Wenn irgendwer anderes so ein Tool hat oder weiß wo ich sowas finde, würde ich mich für Links/Tipps freuen.

Bis Bald
Vegeto


EDIT:
Also ich habe etwas gefunden :) ist aber nicht C# sonder VBA.

Lese mich gerade in den Code und gucke mir nebenbei Tutorials an, wie ich den Code in C# Convertieren kann :)
Hier ist der VBA Code, falls jemand anderes sowas in der Art sucht.

In diesem VBA-Code muss man vorher eine Outlook-Vorlage erstellen, doch das ist nicht sinn meines Tools, denn der Anhang wird(muss) jedesmal neu generiert werden(weil es Personen bedingt ist) müssen. Weiß jmd wie ich das villeicht umgehen kann?

MfG
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 14.12.12 11:41 
Hallo Vegeto,

mittels Internetsuche nach "C# send mail with attachment" gibt es doch genug Beispiele dafür, z.B. www.codeproject.com/...ith-attachments-in-C
Was genau verstehst du denn unter einer Serienmail (im Vergleich zu einer einzelnen)? Entweder du trägst alle Adressaten als Liste ein oder aber (wie von Christoph schon geschrieben) mittels einer Schleife einzelne E-Mails verschicken.
Ich hoffe aber mal, du verschickst keine Spam-Mails!
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Do 27.12.12 14:56 
Hallo..

Danke Th69,
hat mir sehr geholfen, habe jetzt auch mehr zum thema mails in C# gelesehen :)

Also eine E-mail zu verschicken ist kein problem :)
habe diverse tutorials dafür gefunden :)

Jetzt wollte ich fragen, wie kann ich mehrere Email mit dem SmtpClient schicken?
Muss ich dafür einfach bei MailAddress to = new MailAddress("test@test.com")
in die Klammer mehrere Email hinzufügen?

Dazu soll gesagt sein, dass die einzelnen User, die die Email bekommen, nicht sehen sollen an wem sie noch geht!

Mfg
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 28.12.12 04:15 
Was die Empfänger sehen, kannst du fest legen. Die sehen nur den Absender, den Betreff und was du ihnen geschickt hast. Wenn dort niemand Anderes eingetragen ist, sehen die das auch nicht.

Was du nun vor hast ist doch eigentlich kein Problem, oder?
Du baust dir eine Methode, die eine eMail versenden kann und als Parameter die Empfänger-eMail, die PDF-Datei und noch diverse Infos, die variabel sein sollen und die Methode verwendet diese auch so.

Dann nimmst du eine Liste, die diese Informationen enthält (kannst ja eine Klasse dafür schreiben), lässt diese Schleife mittels foreach durchlaufen und für jedes item die Methode aus führen.



Ich gehe davon aus, du weißt schon, wie man eine eMail versendet. Du baust dir dann einfach eine Methode, die alle variablen Informationen als Parameter empfängt und den Rest intern definiert.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
void SendeMail(string empfänger, string empfängerName)
{
    string absender = "...";
    string postausgangsserver = "...";
    int port = 123;
    string Anmeldename = "...";
    string Passwort = "...";

    string betreff = "...";
    string nachricht = "Sehr geehrter Herr " + empfängerName + ", ...";

    // sende die Mail mit den oben definierten Werten
}


Diese variablen Informationen kann man ja schön in einer Klasse ablegen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
class VariableMailInfos
{
    public string empfänger { get; set; }
    public string empfängerName { get; set; }
    public VariableMailInfos(string empfänger, string empfängerName)
    {
        this.empfänger  = empfänger;
        this.empfängerName= empfängerName;
    }
}


Und verwenden kannst du das ganze dann ganz einfach, indem du die Infos in Objekten der Klasse ablegst, welche dann in einer Schleife liegen. Die Schleife lässt du durchlaufen und übergibst dann jedes mal der Sende-Methode die enthaltenen Daten.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
var daten = new List<VariableMailInfos>();
daten.Add(new VariableMailInfos("Empfänger@MailProvider.de""Mustermann"));
// weitere Objekte kannst du ja irgendwie vom Programm hinzu fügen oder direkt fest legen

foreach (var item in daten)
    SendeMail(item.empfänger, item.empfängerName);



Und so hast du deine ganzen Mails versendet.
Da ich nun nicht aus dem Stegreif wusste, wie man eine eMail mit Anhang versendet, hab ich das einfach raus gelassen. Benötige Zusatz-Informationen kann man dann ja ganz einfach erweitern.

Für diesen Beitrag haben gedankt: Vegeto
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 28.12.12 09:19 
...W O W...

Sieht gut aus.
Dankeschön.

Um ein Anhang hinzuzufügen, muss man ganz einfach mit der Attachment Methode Arbeiten.
Das baue ich dann ein.

Und bei deinem Code, ist es auch nicht möglich, dass die Empfänger sehen, das andere diese E-Mail bekommen :) da er ja jedesmal alles neu berechnet :)

Dankeschön !!!

Werde mir das angucken und umsetzen, falls ich probleme habe, werde ich mich melden.

MfG

edit: eine frage habe ich noch:
Du schreibst die Eigenschaft in der Klasse, einmal Empfänger und EmpfängerName, bei jedem Tutorials zum Thema Email versenden, habe ich es NIE gesehen, das man seperat den EmpfängerNamen eingeben kann oder ist das eine einfache Variable, die nur für die E-mail body zuständig ist?


Edit2 am 28.12.2012 12.47:
Ich wollte mal fragen ob ich die EmpfängerAdresse und Name auch aus einer Datenbank beziehen könnte?
Also statt einem List-Objekt, mit einem sqlreader oder Ähnlichem.

Habe es nun geschafft, einzelne Email mit anhang zu schicken.
und das mit Serienmail (Massenmail) sollte kein problem sein, da dein Code-Snippets sehr hilfreich sind!!
Danke nochmal.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 28.12.12 19:10 
Edit 1:
Schau dir mal den Inhalt der Variable nachricht an ;)

Edit 2:
Natürlich geht das, aber dafür müsstest du eine Datenbank erstellen, die die gewünschten Daten enthält.
Ich würde das dann allerdings so realisieren, dass die Daten in der Datenbank erst in einer Klasse eingelesen und dann so als Objekt weiter verarbeitet werden, was an dem Code zum Versenden der Mail nichts ändern würde.
Wenn du allerdings nur die Adressen speichern willst, lohnt sich eine Datenbank nicht, da reicht simples XML oder ein anderer Weg zur Serialisierung, dass die Liste der Adressen (und der Namen, wenn gewünscht), als xml-Datei gespeichert werden. Das ist nicht weiter schwer, das braucht ein paar Zeilen für die speichern- und laden-Methode, mehr nicht.

Das würde ich auch weiterhin machen, wenn du die Adressen in einer extra Person-Klasse (als Beispiel) ablegen willst. Da kannst du dann auch gleich das Geschlecht hinterlegen und den Empfänger dann gezielt mit "Herr" oder "Frau" sowieso ansprechen. Und wenn der Name nicht bekannt ist, wird halt einfach "Sehr geehrte Damen und Herren" geschrieben. Das kannst du dann ja so variable fest legen, wie dir es gefällt, sodass die eMail am Ende so persönlich formuliert ist, wie nur möglich, obwohl es eine Serien-Mail ist.

Die einzelnen Objekte der Klasse hinterlegst du dann in eine Liste und kannst diese Liste auch direkt so serialisieren lassen. Wenn du sicher gehen willst, dass keine Adresse doppelt vor kommt (also wie in einer Datenbank die Adresse als Primär-Schlüssel), dann kannst du auch die Objekte Dictionary<Key, Value> abspeichern. Da wird immer ein Objekt-Paar gespeichert von dem Typ, der bei Key und bei Value angegeben wird. Das erste Objekt (der Schlüssel) ist dann garantiert eindeutig, sonst gibt es einen Fehler. Das kannst du jedoch nicht so einfach mit xml serialisieren (binär jedoch schon), aber wenn es trotzdem xml sein soll, gibt es genug im Netz, um es trotzdem zu serialisieren und wer das Prinzip einmal verstanden hat, wird mit der Umsetzung auch keine Probleme haben.

Für diesen Beitrag haben gedankt: Vegeto
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 04.01.13 09:31 
Danke Palladin700

Hat mir sehr geholfen.

Lg