Mailversand mit Smtp



  • Hallo,
    ich versuche gerade mit C++/CLI eine Mail zu verschicken. Das ist der Code den ich verwende:

    #include "stdafx.h"
    
    using namespace System;
    using namespace System::Net;
    using namespace System::Net::Mail;
    using namespace System::Net::Mime;
    using namespace System::Threading;
    using namespace System::ComponentModel;
    
    static bool mailSent;
    
    static void SendCompletedCallback(Object^ sender, AsyncCompletedEventArgs^ e)
    {
        // Get the unique identifier for this asynchronous operation.
        String^ token = (String^) e->UserState;
    
        if (e->Cancelled)
        {
            Console::WriteLine("[{0}] Send canceled.", token);
        }
        if (e->Error != nullptr)
        {
            Console::WriteLine("[{0}] {1}", token, 
                "\n" + e->Error->ToString());
        } else
        {
            Console::WriteLine("Message sent.");
        }
    
        mailSent = true;
    }
    
    int main(array<String^>^ args)
    {
            // SMTP-Host bestimmen
            SmtpClient^ client = gcnew SmtpClient("smtp.1und1.de");
    
    		// Zugangsdaten für den Mail-Account
    		System::Net::NetworkCredential ^cred = gcnew System::Net::NetworkCredential();
    		cred->Password = "passwort_1";
    		cred->UserName = "info@domain.de";
    		client->Credentials = cred;
    
    		// Absender bestimmen
            MailAddress^ from = gcnew MailAddress("info@domain.de", "Max Mustermann", System::Text::Encoding::UTF8);
    
            // Empfänger bestimmen
            MailAddress^ to = gcnew MailAddress("empfaenger@googlemail.com");
    
            // Nachricht bestimmen
            MailMessage^ message = gcnew MailMessage(from, to);
            message->Body = "Nachrichtentext";
            message->BodyEncoding = System::Text::Encoding::UTF8;
    
    		// Titelzeile bestimmen
    		message->Subject = "test message 1";
            message->SubjectEncoding = System::Text::Encoding::UTF8;
    
            // CallBack-Methode die aufgerufen wird, wenn die Nachricht gesendet wurde
            client->SendCompleted += gcnew SendCompletedEventHandler(SendCompletedCallback);
    
            // userState-Variable
            String^ userState = "-";
            client->SendAsync(message, userState);
    
    		// Sendestatus ausgeben
    		Console::WriteLine("Nachricht wird gesendet");
    
            // Clean up.
            delete message;
    		client = nullptr;
    
            Console::WriteLine("Ende.");
    
    		Console::ReadLine();
    		Console::ReadLine();
    }
    

    Dabei bekomme ich immer folgende Fehlermeldung:

    System.Net.Mail.SmtpException: Fehler beim Senden von Mail. ---> System.ObjectDisposedException: Auf das verworfene Objekt kann
    nicht zugegriffen werden.
    Objektname: "System.Net.Mail.MailMessage".
    bei System.Net.Mail.MailMessage.get_AlternateViews()
    bei System.Net.Mail.MailMessage.SetContent()
    bei System.Net.Mail.MailMessage.BeginSend(BaseWriter writer, Boolean sendEnvelope, AsyncCallback callback, Object state)
    bei System.Net.Mail.SmtpClient.SendMailCallback(IAsyncResult result)
    --- Ende der internen Ausnahmestapelüberwachung ---

    Könnt ihr mir sagen woran das liegen kann ?

    Vielen Dank,
    mfg arena_blau

    ------------------------------------------------------------------------------



  • interessant. das kommt bei mir auch, trotz das mein smtp server voll verfügbar ist?!? 😕



  • Das Problem ist, dass Du

    delete message;
    

    aufrufst. Das delete auf ein managed Object ruft, wenn vorhanden, Dispose() auf. Wenn jetzt doch auf das besagte Objekt zugergriffen wird, wird eine ObjectDisposed Exception geworfen.

    Ich vermute, die MailMessage muss solange leben, bis die asynchrone Send- Operation completed ist, oder die Operation gecancelt wurde.

    Simon


Anmelden zum Antworten