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