Visual C++ .NET - Importante Visual C++

 
Vista:
sin imagen de perfil

Importante Visual C++

Publicado por Carlos (2 intervenciones) el 05/04/2014 01:46:21
Hola a todos,

Estoy programando, es muy sencillo, tengo que enviar un archivo, que cuando recibe un mensaje envíe en un .txt a un mail la información. Eso no es el problema, el problema lo tengo que cuando el programa esta compilado, y envío el .txt, y se tiene que guardar otra vez la información, sale la excepción,de que hay un proceso abierto. Es el proceso de carga del archivo del email. Como cierro ese proceso? Estoy bastante bloqueado, os agradecería cualquier ayuda.

else if (message->Contains("+CMGR:")) // SMS Received
{
StreamWriter^ emailer;
String^ message2=message;



if(message2->Contains("TRIGLOG") && serial_settings_form->EmailState==true)
{




//String^ File_2= "C:\\Documents";
///File::Copy(File_,File_2,true);
//File::Finalize(File_);
//CopyFile(File_1,File_2 , true);
//File^ Fileuse = gcnew File(File_);
//emailer = File::AppendText(File_);
//HANDLE File_;

//File::Open(File_);
try
{
String^ File_= serial_settings_form->GetDirectory()+"\\"+GetLogFileName();
MailMessage^ mail = gcnew MailMessage();

//mail->From = gcnew MailAddress(this->serial_settings_form->email_cont);
mail->From = gcnew MailAddress("@gmail.com");
mail->To->Add(gcnew MailAddress("@gmail.com"));

mail->Subject = "Log file Message";
mail->Body = "This is the Logmail file";

Attachment^ at = gcnew Attachment(File_);
mail->Attachments->Add(at);
//mail->Attachments->;
//mail->Attachments->Clear();
SmtpClient^ smtp = gcnew SmtpClient("smtp.gmail.com",587);

smtp->EnableSsl = true;
smtp->UseDefaultCredentials = true;
smtp->Credentials = gcnew System::Net::NetworkCredential("@gmail.com", "");

smtp->Send(mail);
File_="C:\\";
mail->Attachments->Clear();





}
catch(Exception^ ex)
{
// Show error message
Windows::Forms::MessageBox::Show("Failed to send email: " + ex->Message, "Error.",
Windows::Forms::MessageBoxButtons::OK, Windows::Forms::MessageBoxIcon::Exclamation);

Windows::Forms::MessageBox::Show("Failed to send email: " + ex->InnerException->Message, "Error.",
Windows::Forms::MessageBoxButtons::OK, Windows::Forms::MessageBoxIcon::Exclamation);
}


//mail->Clear();
}


array<String^>^ tokens = message->Split('\"');
String^ name = user_list_form->GetName(tokens[3]);

message = "SMS from: " + name + " (" + tokens[3] + ")\n";

if (this->serial_settings_form->DisplaySMSesChecked())
{
// Set BLUE LED to ON
this->LEFT_BLUE_event_happened();

// Display message in the richTextBox
richTextBox1->Select(richTextBox1->TextLength, 0);
richTextBox1->SelectionColor = System::Drawing::ColorTranslator::FromHtml("#000000");
richTextBox1->AppendText("[A] " + time_and_date + message);
}

// Log the message to file
if (about_form->IsRegistered())
{
WriteToLog(this->serial_settings_form->GetDirectory(), time_and_date + message);
WriteToCSV(this->serial_settings_form->GetDirectory(), time_string, date_string, message);
}

// Next message is going to be the text of the SMS message
waiting_for_sms = true;

}

Gracias a todos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Manejo de excepciones al enviar correo electrónico con archivo adjunto

Publicado por Alejandro (265 intervenciones) el 13/02/2024 22:57:49
Carlos, en relación a tu problema, parece que estás enfrentando un problema al intentar enviar un correo electrónico con un archivo adjunto y luego intentar manipular ese mismo archivo. Para evitar problemas con procesos abiertos, podrías intentar liberar los recursos del archivo después de enviar el correo electrónico.

A continuación, te propongo una modificación en tu código para liberar los recursos del archivo después de enviar el correo electrónico:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// ...
 
try
{
    String^ File_ = serial_settings_form->GetDirectory() + "\\" + GetLogFileName();
    MailMessage^ mail = gcnew MailMessage();
 
    mail->From = gcnew MailAddress("@gmail.com");
    mail->To->Add(gcnew MailAddress("@gmail.com"));
    mail->Subject = "Log file Message";
    mail->Body = "This is the Logmail file";
 
    Attachment^ at = gcnew Attachment(File_);
    mail->Attachments->Add(at);
 
    SmtpClient^ smtp = gcnew SmtpClient("smtp.gmail.com", 587);
    smtp->EnableSsl = true;
    smtp->UseDefaultCredentials = true;
    smtp->Credentials = gcnew System::Net::NetworkCredential("@gmail.com", "");
    smtp->Send(mail);
 
    // Liberar recursos del archivo
    delete at;
 
    // Mostrar un mensaje de éxito si es necesario
    Windows::Forms::MessageBox::Show("Email enviado exitosamente", "Éxito",
        Windows::Forms::MessageBoxButtons::OK, Windows::Forms::MessageBoxIcon::Information);
}
catch (Exception^ ex)
{
    // Mostrar mensaje de error
    Windows::Forms::MessageBox::Show("Failed to send email: " + ex->Message, "Error",
        Windows::Forms::MessageBoxButtons::OK, Windows::Forms::MessageBoxIcon::Exclamation);
}

En este código, he agregado `delete at;` después de enviar el correo electrónico. Esto debería liberar los recursos del archivo adjunto. Ten en cuenta que después de esta operación, el archivo adjunto ya no debe ser utilizado.

Además, he agregado un mensaje de éxito después de enviar el correo electrónico. Puedes personalizar este mensaje según tus necesidades.

Espero que esto te ayude a resolver tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar