Laden...

Email versenden, am besten mit dem Standard mail client

Erstellt von jodahush vor 2 Jahren Letzter Beitrag vor 2 Jahren 2.000 Views
J
jodahush Themenstarter:in
23 Beiträge seit 2021
vor 2 Jahren
Email versenden, am besten mit dem Standard mail client

Ich dachte das diese Funktion mit ein paar Zeilen Code umsetzbar wäre, aber weit gefehlt. Ich meine es ist ja schon schwer gmail in Outlook zu konfigurrieren aber mit SMTP in C# kriege ich es nicht hin. Hier mein Versuch mit SMTP


         try
            {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

                mail.From = new MailAddress("myUserName@gmail.com");
                mail.To.Add("myDestination@yahoo.com");
                mail.Subject = "Test Mail";
                mail.Body = "This is for testing SMTP mail from GMAIL";

                SmtpServer.Port = 465;// 587;
                SmtpServer.EnableSsl = true;
                SmtpServer.Credentials = new System.Net.NetworkCredential("myUserName", "myPasword");
                SmtpServer.EnableSsl = true;

                SmtpServer.Send(mail);
                MessageBox.Show("mail Send");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

Irgendwas scheint hier mit den notwendigen Security features für gmail noch zu fehlen. Diese sind: Gmail SMTP server address: smtp.gmail.com
Gmail SMTP username: Your Gmail address (for example, example@gmail.com)
Gmail SMTP password: Your Gmail password
Gmail SMTP port (TLS): 587
Gmail SMTP port (SSL): 465
Gmail SMTP TLS/SSL required: Yes

Dann habe ich von dem MimeKit gelesen. Ok nuget nie probiert aber irgendwie installiert. Using using MailKit; using MimeKit; genutzt und dann


        private void button2_Click(object sender, EventArgs e)
        {//https://www.mimekit.net/docs/html/Creating-Messages.htm
            var message = new MimeMessage();
            message.From.Add(new MailboxAddress("Herm", "jodahush@gmail.com"));
            message.To.Add(new MailboxAddress("mann", "jodahush@yahoo.com"));
            message.Subject = "How you doin?";

            message.Body = new TextPart("plain")
            {
                Text = @"Hey Alice,

                What are you up to this weekend? Monica is throwing one of her parties on
                Saturday and I was hoping you could make it.

                Will you be my +1?

                -- Joey
                "
            };

            
        }


da tut sich garnix, es fehlt ja auch irgend ein Befehl zum senden wie z.B. message.send(); aber das gibt es nicht.

Kann man nicht einfach den Standard mail client über c# ansprechen und diesem ein vorausgefülltes mail aus den Rippen leiern? Am liebsten die Windows Mail App. Wie auch immer, mal eben schnell ne mail schicken is wohl eher nicht möglich. Gibt es kein Rezept für Einsteiger?

T
2.219 Beiträge seit 2008
vor 2 Jahren

Kleiner Hinweis, nutzt nicht den SmtpClient von .NET
In der Doku wird hier auch schon darauf hingewiesen, dass dieser nicht mehr up2date ist und auch nicht mehr weiterentwickelt wird.

Doku:
https://docs.microsoft.com/de-de/dotnet/api/system.net.mail.smtpclient?view=net-5.0#remarks

Mailkit:
https://github.com/jstedfast/MailKit

Nachtrag:
Jetzt erst gesehen, dass du schon Mailkit verwendest 🙁
Dann musst du auch den SmtpClient von MailKit verwenden.

https://www.mimekit.net/docs/html/T_MailKit_Net_Smtp_SmtpClient.htm

Nachtrag 2:
In der Doku ist auch ganz unten beim Smtp Client passend ein Beispiel für gmail.
Dürfte dir mit dem Versand helfen 🙂

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

J
jodahush Themenstarter:in
23 Beiträge seit 2021
vor 2 Jahren

danke. So wie es aussieht muss ich Nuget für jede solution extra installieren?

Wie auch immer. Folgendes habe ich gemacht:


using MailKit;
using MimeKit;
using MailKit.Net.Smtp;
using MailKit.Security;

private void button1_Click(object sender, EventArgs e)
        {
            var message = new MimeMessage();
            message.From.Add(new MailboxAddress("Joey", "xxx@gmail.com"));
            message.To.Add(new MailboxAddress("Alice", "xxx@yahoo.com"));
            message.Subject = "How you doin?";

            message.Body = new TextPart("plain")
            {
                Text = @"Hey Alice,

                    What are you up to this weekend? Monica is throwing one of her parties on
                    Saturday and I was hoping you could make it.

                    Will you be my +1?

                    -- Joey
"
            };

            using (var client = new SmtpClient())
            {
                client.Connect("smtp.gmail.com", 465, SecureSocketOptions.SslOnConnect);

                client.Authenticate("xxx", "xxx");

                client.Send(message);



                client.Disconnect(true);
        }

Das compliliert, aber beim SEnden habe ich ein Problem mit Username Password

J
jodahush Themenstarter:in
23 Beiträge seit 2021
vor 2 Jahren

Das Problem ist wohl die Authentifizierung unter gmail.


            using (var client = new SmtpClient())
            {
                //client.Connect("smtp.gmail.com", 465, SecureSocketOptions.SslOnConnect);
                client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTlsWhenAvailable);

                client.Authenticate("xxx", "ccc");

                client.Send(message);

Klappt auch nicht: Application specific password required

Bei Google steht:
Postausgangsserver (SMTP)
smtp.gmail.com

SSL erforderlich: Ja
TLS erforderlich: Ja (falls verfügbar)
Authentifizierung erforderlich: Ja
Port für TLS/STARTTLS: 587
Wenn Sie Gmail über ein Konto in Ihrem Unternehmen oder Ihrer Bildungseinrichtung nutzen, fragen Sie Ihren Administrator nach der korrekten SMTP-Konfiguration.
Ich habe beide Varianten versucht, aber es haut nicht hin. Auch in meinem Gmail account habe ich imap aktiviert.

D
261 Beiträge seit 2015
vor 2 Jahren

Der Fehler "Application specific password required" sagt dir schon dass du dir ein Passwort für die Anmeldung generieren lassen musst. Du kannst deine Google Kontodaten nicht für IMAP verwenden.
siehe Sign in with App Passwords - Google Account Help

J
jodahush Themenstarter:in
23 Beiträge seit 2021
vor 2 Jahren

Ja, wieder eine Wissenschaft für sich.

how-to-send-email-by-using-mailkit

16.807 Beiträge seit 2008
vor 2 Jahren

Die Google TOS verbieten einen automatisierten Versand von EMails über deren API.
Die API darf nur für eigene E-Mail Clients verwendet werden bzw. üb E-mails für einen Client abzuholen (Server to Server).

Entsprechend ist das auch keine Wissenschaft für sich, sondern wie sich E-Mail Clients im Jahr 2021 einfach sicher authentifizieren sollen.
Token-basierte Authentifizierungsverfahren sind der Standard für HTTP APIs seit ca. 10 Jahren.

J
jodahush Themenstarter:in
23 Beiträge seit 2021
vor 2 Jahren

Also das krieg ich nicht auf die Reihe. Hab noch keine Beschreibung gefunden wie ich den Token bekomme und in meiner App verifiziere und nutze.
Und wenn es so einfach wäre in 2021 ein gmail in einer app zu verschicken, hätte man sicher ein komplettes aktuelles Tutorial gefunden.
Ich hatte ja gefragt wie ich ein mail verschicken kann, am besten mit dem standrd mail client. Leider mit Attachment.

Stattdessen hatte ich das versucht:


  System.Diagnostics.Process.Start("mailto:hush4@web.de?subject=test&body=teesttext");

Klappt, aber leider nicht mit attachment.

oder So habe ich es in VB gemacht:


In VB habe ich ein anderes Beispiel, das funktioniert:
'StörungsMenge
'** Vorgaben definieren
Set OutlookApp = CreateObject("Outlook.Application")
Set strEmail = OutlookApp.CreateItem(0)

'** PDF erzeugen
'ActiveWorkbook.
ActiveWorkbook.Sheets(1).ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
  PathFile, Quality:=xlQualityStandard _
  , IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish _
  :=False
  

'** E-Mail versenden
strPDF = PathFile
With strEmail
  .To = "GetGruppe" '"name@domain.tld"
  .Subject = fileName + " als Anlage" 'Betreffzeile
  .body = TextBlock
  .Attachments.Add PathFile
  .Display
  '.Send 'Damit wir die E-Mail sofort versendet
 
End With

16.807 Beiträge seit 2008
vor 2 Jahren

Ich hatte ja gefragt wie ich ein mail verschicken kann, am besten mit dem standrd mail client. Leider mit Attachment.

Du befindest Dich in einem C# bzw. .NET Forum. Der Standard für Mails in .NET ist die Smtp Klasse.
Da diese veraltet ist hast Du die Antwort bekommen, dass man das mit dem MailKit macht.

Du sprichst nun offenbar aber von einem Standard Desktop Client, also zB Outlook.
Keiner hier konnte wissen, da Du Dich eben in einem C# Forum befindest, dass Du damit eine Desktop Anwendung meinst, wenn Du es nicht ausdrücklich sagst.
Entsprechend hast Du auch Hinweise bekommen, wie man es mit Code löst.

Mit Deinem VB Script automatisierst Du eine Anwendung.
Das ist was völlig anderes als mit einer API zu kommunizieren; das sind Äpfel und Birnen.

Beschreibe mal bitte so, dass man es versteht, was Du tun willst:

  • Willst Du programmatisch gegen eine API arbeiten und automatisiert Mails verschicken?
  • Willst Du eine Anwendung (UI) automatisieren aber gar nicht mehr der E-Mail Schnittstelle selbst sprechen?

Und doch, die Google Mail API ist hervorragend dokumentiert.
https://developers.google.com/gmail/api/quickstart/dotnet
Wie man lesen kann, wenn man sie liest, dann sieht man, dass das Google SDK das alles abnimmt.
Aber: man muss die Doku halt lesen.

J
jodahush Themenstarter:in
23 Beiträge seit 2021
vor 2 Jahren

Ich möchte einfach ein Programm schreiben, in dem ich u.a. eine Mail verschicken kann.
Dabei ist es mir egal ob der Standard Mail client aufgerufen wird oder eine andere Lösung funktioniert.
Es sollte halt einigermaßen einfach umsetzbar sein.
Durch die geänderten Sicherheitsbestimmungen bei Google scheint es mit GMail in Verbindung mit SMTP auf C# nicht mit einem überschaubaren Aufwand möglich zu sein ein mail zu senden.

Ich weiß was VBA ist und habe das ganze Programm in VB realisiert und kann so eine Arbeit die normalerweise 30min dauert locker in 5 min erledigen.

16.807 Beiträge seit 2008
vor 2 Jahren

Durch die geänderten Sicherheitsbestimmungen bei Google scheint es mit GMail in Verbindung mit SMTP auf C# nicht mit einem überschaubaren Aufwand möglich zu sein ein mail zu senden.

Das hat nichts mit C# oder mit .NET zutun. An die Sicherheitsbestimmungen muss man sich mit allen Sprachen und Runtimes halten - auch mit VB kannst SMTP von Google nicht einfach so verwenden bzw für diesen Zweck missbrauchen.
Der Aufwand ist mit allen Sprachen bzw. Runtimes relativ identisch.