Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Email versenden, am besten mit dem Standard mail client
jodahush
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

Email versenden, am besten mit dem Standard mail client

beantworten | zitieren | melden

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("[email protected]");
                mail.To.Add("[email protected]");
                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, [email protected])
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", "[email protected]"));
            message.To.Add(new MailboxAddress("mann", "[email protected]"));
            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?
Attachments
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1919
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von T-Virus am .
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.
private Nachricht | Beiträge des Benutzers
jodahush
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

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", "[email protected]"));
            message.To.Add(new MailboxAddress("Alice", "[email protected]"));
            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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von jodahush am .
private Nachricht | Beiträge des Benutzers
jodahush
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 190

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dannoe am .
private Nachricht | Beiträge des Benutzers
jodahush
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Ja, wieder eine Wissenschaft für sich.

how-to-send-email-by-using-mailkit
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16224

beantworten | zitieren | melden

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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
jodahush
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

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:[email protected]?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" '"[email protected]"
  .Subject = fileName + " als Anlage" 'Betreffzeile
  .body = TextBlock
  .Attachments.Add PathFile
  .Display
  '.Send 'Damit wir die E-Mail sofort versendet
 
End With
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16224

beantworten | zitieren | melden

Zitat
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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers