E-Mail mit Anhang senden in C#

Saad Aslam 12 Oktober 2023
  1. Erstellen ein Formular zum Senden von E-Mails mit Anhang in C#
  2. E-Mail mit Anhang in C# versenden
E-Mail mit Anhang senden in C#

Dieses Tutorial zeigt, wie Sie den SMTP-Client in C# verwenden, um E-Mails mit Anhängen zu senden.

NET und .NET Core verfügen über eine integrierte Funktion zum Senden von E-Mails über den System.Net.Mail-Namespace. Dies ist zwar die einfachste Option, erfordert jedoch einen SMTP-Server.

Verwenden Sie Ihr vorhandenes Google Mail-Konto oder erstellen Sie ein neues, um E-Mails über SMTP zu senden. Sie müssen den weniger sicheren App-Zugriff auf der Registerkarte Sicherheit Ihres Profils aktivieren, um die SMTP-Server von Google zu verwenden.

Erstellen ein Formular zum Senden von E-Mails mit Anhang in C#

Erstellen Sie zunächst eine neue Windows Form-Anwendung in Visual Studio.

Öffnen Sie Ihre .cs-Designdatei und erstellen Sie ein Panel in Ihrem Formular. Fügen Sie ein Label mit dem Text Compose, label1 und ganz rechts X hinzu, um dieses Formular zu schließen.

Um Funktionalität hinzuzufügen, doppelklicken Sie auf das Etikett und Sie werden zur Funktion label_Click navigiert. Schreiben Sie die folgende Zeile hinein.

this.Dispose();

Erstellen Sie 5 Textfelder mit folgenden Namen:

  • txtFrom
  • txtPassword
  • txtTo
  • txtTitle
  • txtBody

Fügen Sie im Textfeld txtPassword ein Zeichen (* oder ) in der Eigenschaft passwordChar hinzu, um das vom Benutzer im Lösungs-Explorer-Fenster unten rechts eingegebene Passwort auszublenden.

Erstellen Sie eine Schaltfläche namens btnSend mit Send darin und weisen Sie ihr eine blaue Farbe zu. Diese Schaltfläche sendet die E-Mail an die Ziel-E-Mail-Adresse.

Jetzt benötigen Sie eine weitere Schaltfläche, um eine Datei mit Ihrer E-Mail anzuhängen, bevor Sie sie senden, und ein Etikett, um den ausgewählten Dateipfad anzuzeigen. Erstellen wir also ein LinkLabel und nennen es linkLabel1 und ein Label namens lblLocation.

Weisen Sie dem LinkLabel ein Bild und einen Text Attach File aus dem Solution Explorer zu. Doppelklicken Sie nun auf dieses LinkLabel in Ihrer .cs-Formularentwurfsdatei, und Sie werden zu diesem Funktionscode für die angeklickte Schaltfläche navigiert.

Innerhalb dieser Funktion müssen wir einen Dialog öffnen. Aber vorher müssen Sie OpenFileDialog per Drag & Drop in Ihr Formulardesign ziehen und mit der Schaltfläche Datei anhängen verbinden.

Wir schreiben den folgenden Code in die Funktion linkLabel1_linkClicked, um den Dialog zu öffnen und den ausgewählten Dateipfad mit der Anzeige in lblLocation zu verbinden.

openFileDialog1.ShowDialog();
lblLocation.Text = openFileDialog1.FileName;

Ausgabe:

Erstelltes Formular zum Senden von E-Mails mit Anhang

Nachdem alles fertig ist, sammeln Sie die E-Mail-Adresse und das Passwort des Absenders, die E-Mail-Adresse des Empfängers, die Nachricht und die angehängte Datei. Lassen Sie uns den Funktionscode schreiben, um eine E-Mail mit dem SMTP-Client zu senden.

Doppelklicken Sie auf die Schaltfläche Senden, die wir in unserem Formulardesign erstellt haben. Innerhalb der Funktion button1_Click führen wir die folgenden Operationen aus.

E-Mail mit Anhang in C# versenden

Erstellen Sie zunächst einen try-catch-Anweisungsblock. Die Programmausführung versucht den try-Block, und wenn ein Fehler auftritt, fängt es automatisch die Ausnahme ab.

try {
} catch () {
}

Innerhalb des try-Blocks deklarieren wir eine Variable vom Datentyp MailMessage mit dem Namen mail und initialisieren ihren Standardkonstruktor MailMessage(), um ihre Eigenschaften im E-Mail-Sendeprozess zu verwenden.

MailMessage mail = new MailMessage();

Deklarieren Sie nun eine weitere Variable, smtp, vom Datentyp SmtpClient, und initialisieren Sie eine neue Instanz von SmtpClient, die einen String-Host benötigt. Wir passieren smtp.gmail.com, weil wir E-Mails zwischen Gmail austauschen müssen.

SmtpClient smtp = new SmtpClient("smtp.gmail.com");

Dann verwenden wir .From, .To.Add(), .Subject und .Body der MailMessage-Klasse und weisen ihnen die Werte unserer Textfelder zu.

mail.From = new MailAddress(txtFrom.Text);
mail.To.Add(txtTo.Text);
mail.Subject = txtTitle.Text;
mail.Body = txtBody.Text;

Dann müssen wir die ausgewählte Datei mit der E-Mail anhängen. Wir erstellen eine Variable attachment vom Datentyp System.Net.Mail.Attachment und weisen ihr den Pfad der ausgewählten Datei zu.

Hängen Sie die Datei mit der Methode .Attachments.Add() an die Mail an, indem Sie ihr den Anhang übergeben.

System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(lblLocation.Text);
mail.Attachments.Add(attachment);

Wir müssen SMTP einige Werte zuweisen, darunter den von Gmail verwendeten Port, die E-Mail-Adresse des Absenders und das Passwort. Wir sollten SSL (Secure Sockets Layer) aktivieren, um die Daten sicher zu übertragen.

Dann rufen wir die Methode Send() auf und übergeben unsere Mail. Lassen Sie uns nach dem Senden der E-Mail ein Nachrichtenfeld erstellen, das eine Nachricht mit einem Informationssymbol und einer OK-Schaltfläche anzeigt.

smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text, txtPassword.Text);
smtp.EnableSsl = true;
smtp.Send(mail);
MessageBox.Show("Mail has been sent successfully!", "Email Sent", MessageBoxButtons.OK,
                MessageBoxIcon.Information);

Nun enthält der catch-Block den folgenden Code. Diese Codezeilen fangen jede auftretende Ausnahme ab und geben sie in einer MessageBox aus.

catch (Exception ex) {
  MessageBox.Show(ex.Message);
}

Vollständiger Quellcode

using System;
using System.Net.Mail;

namespace send_email_with_attachment {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void label1_Click(object sender, EventArgs e) {
      this.Dispose();
    }

    private void label5_Click(object sender, EventArgs e) {}

    private void label7_Click(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      try {
        MailMessage mail = new MailMessage();
        SmtpClient smtp = new SmtpClient("smtp.gmail.com");
        mail.From = new MailAddress(txtFrom.Text);
        mail.To.Add(txtTo.Text);
        mail.Subject = txtTitle.Text;
        mail.Body = txtBody.Text;

        System.Net.Mail.Attachment attachment;
        attachment = new System.Net.Mail.Attachment(lblLocation.Text);
        mail.Attachments.Add(attachment);

        smtp.Port = 587;
        smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text, txtPassword.Text);
        smtp.EnableSsl = true;
        smtp.Send(mail);
        MessageBox.Show("Mail has been sent successfully!", "Email Sent", MessageBoxButtons.OK,
                        MessageBoxIcon.Information);

      } catch (Exception ex) {
        MessageBox.Show(ex.Message);
      }
    }

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
      openFileDialog1.ShowDialog();
      lblLocation.Text = openFileDialog1.FileName;
    }

    private void txtFrom_TextChanged(object sender, EventArgs e) {}
  }
}

Ausgabe:

Ausgefülltes Formular zum Senden einer E-Mail mit Anhang

Drücken Sie auf Senden, und das folgende Nachrichtenfeld wird angezeigt.

E-Mail mit Anhang erfolgreich gesendet

Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

Verwandter Artikel - Csharp Email