Kurt4949
asked on
File in use after email as attachment
I made a form where the user can fill it out, browser for a file, and then click submit. I have it setup so the form data is emailed to me along with the attachment. It works except I can not delete the attachment from the server because it is still in use. Why is the file still in use after emailing it out? If I remove this line (upload the attachment but dont send it in the email) then the file is not in use and I can delete it after.) Why when I add the following line is the file in use after and can not be deleted??
message.Attachments.Add(ne w Attachment(strdir + strfilename));
message.Attachments.Add(ne
Should it be MailAttachment, instead of Attachment?
Bob
Bob
ASKER
For example if I tell asp.net to delete the file after then I get this error
Exception Details: System.IO.IOException: The process cannot access the file 'D:\wwwTesting\promessInc\ upload\for ms.css' because it is being used by another process.
Source Error:
Line 114:
Line 115: //Uploaded file deleted after sending e-mail
Line 116: File.Delete(strdir + strfilename);
Line 117:
Line 118:
Exception Details: System.IO.IOException: The process cannot access the file 'D:\wwwTesting\promessInc\
Source Error:
Line 114:
Line 115: //Uploaded file deleted after sending e-mail
Line 116: File.Delete(strdir + strfilename);
Line 117:
Line 118:
ASKER
asp.net 2.0 with C#
ASKER
I believe that line is correct. I"m using System.Net.Mail
example here http://www.systemnetmail.com/faq/2.3.aspx
example here http://www.systemnetmail.com/faq/2.3.aspx
Here's a similar set of code I use. r2("Attachment") is a field with the file name. You might want to add the Try Catch stuff in case you ever hit an exception.
If (r2("Attachment").ToString <> "") Then
Dim MsgAttachmentPath As String = Server.MapPath(r2("Attachm ent").ToSt ring)
Dim attachment As System.Web.Mail.MailAttach ment
Try
attachment = New System.Web.Mail.MailAttach ment(MsgAt tachmentPa th)
emailMessage.Attachments.A dd(attachm ent)
Catch ex As Exception
Dim sb As New System.Text.StringBuilder
sb.Append("my note about where this occurs")
sb.Append("Message: " & ex.Message.ToString)
sb.Append("InnerException: " & ex.InnerException.ToString )
sb.Append("Target site: " & ex.TargetSite.Name.ToStrin g)
sb.Append("Stack Trace: " & ex.StackTrace.ToString)
exString = sb.ToString
SendErrorEmail(exString)
End Try
End If
Hope that helps.
Dave
If (r2("Attachment").ToString
Dim MsgAttachmentPath As String = Server.MapPath(r2("Attachm
Dim attachment As System.Web.Mail.MailAttach
Try
attachment = New System.Web.Mail.MailAttach
emailMessage.Attachments.A
Catch ex As Exception
Dim sb As New System.Text.StringBuilder
sb.Append("my note about where this occurs")
sb.Append("Message: " & ex.Message.ToString)
sb.Append("InnerException:
sb.Append("Target site: " & ex.TargetSite.Name.ToStrin
sb.Append("Stack Trace: " & ex.StackTrace.ToString)
exString = sb.ToString
SendErrorEmail(exString)
End Try
End If
Hope that helps.
Dave
Yeah, what happens if you use System.Web.Mail, instead of System.Net.Mail?
Bob
Bob
ASKER
Here is my code. It works perfect execpt that I can not delete the attachement after. I even get the email with the attachment.
void submitForm(Object s, EventArgs e)
{
if (Page.IsValid == true)
{
string fromEmail;
string toEmail;
string userHostAddress = "";
string strdir = "D:\\wwwTesting\\files\\up load\\";
string strfilename = Path.GetFileName(txtFile.P ostedFile. FileName);
txtFile.PostedFile.SaveAs( strdir + strfilename);
fromEmail = "webmaster@me.com";
toEmail = "kurt@me.com";
//get IP Address
userHostAddress = Request.UserHostAddress;
// System.Net.Mail.SmtpClient is the new class in 2.0
SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();
try
{
smtpClient.Host = "localhost";
smtpClient.Port = 25;
message.From = new MailAddress(fromEmail);
message.To.Add(toEmail);
message.Subject = " Form Submission";
//Begin - Message body content
message.IsBodyHtml = true;
//html message body
message.Body = "<html>" +
"<head>" +
"<title>Form Submission</title>" +
"</head>" +
"<body>" +
"<font face=\"Arial, Helvetica, sans-serif\" size=\"2\">" +
"<b>Form Submission</b><br /><br />" +
"<b>Salutation:</b> " + salutation.Text +
"<br /><b>First name:</b> " + fName.Text +
"<br /><b>Last name:</b> " + lName.Text +
"<br /><br /><b>Comments:</b><br /> " + comments.Text +
"</font></body></html>";
//End - Message body content
//Attach File
message.Attachments.Add(ne w Attachment(strdir + strfilename));
// Send SMTP mail
smtpClient.Send(message);
// on success hide / show panels
lblStatus.Text = "Email successfully sent.";
panelContactForm.Visible = false;
panelThankYou.Visible = true;
}
catch (Exception ex)
{
lblStatus.Text = "Send Email Failed.<br>" + ex.Message;
}
//Uploaded file deleted after sending e-mail
File.Delete(strdir + strfilename);
}//end if Page.IsValid
}
</script>
void submitForm(Object s, EventArgs e)
{
if (Page.IsValid == true)
{
string fromEmail;
string toEmail;
string userHostAddress = "";
string strdir = "D:\\wwwTesting\\files\\up
string strfilename = Path.GetFileName(txtFile.P
txtFile.PostedFile.SaveAs(
fromEmail = "webmaster@me.com";
toEmail = "kurt@me.com";
//get IP Address
userHostAddress = Request.UserHostAddress;
// System.Net.Mail.SmtpClient
SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();
try
{
smtpClient.Host = "localhost";
smtpClient.Port = 25;
message.From = new MailAddress(fromEmail);
message.To.Add(toEmail);
message.Subject = " Form Submission";
//Begin - Message body content
message.IsBodyHtml = true;
//html message body
message.Body = "<html>" +
"<head>" +
"<title>Form Submission</title>" +
"</head>" +
"<body>" +
"<font face=\"Arial, Helvetica, sans-serif\" size=\"2\">" +
"<b>Form Submission</b><br /><br />" +
"<b>Salutation:</b> " + salutation.Text +
"<br /><b>First name:</b> " + fName.Text +
"<br /><b>Last name:</b> " + lName.Text +
"<br /><br /><b>Comments:</b><br /> " + comments.Text +
"</font></body></html>";
//End - Message body content
//Attach File
message.Attachments.Add(ne
// Send SMTP mail
smtpClient.Send(message);
// on success hide / show panels
lblStatus.Text = "Email successfully sent.";
panelContactForm.Visible = false;
panelThankYou.Visible = true;
}
catch (Exception ex)
{
lblStatus.Text = "Send Email Failed.<br>" + ex.Message;
}
//Uploaded file deleted after sending e-mail
File.Delete(strdir + strfilename);
}//end if Page.IsValid
}
</script>
More as a guess than anything, try clearing the attachments.
So, before File.Delete, try Message.Attachments.Clear
So, before File.Delete, try Message.Attachments.Clear
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Hi Bob,
The using blocked did the trick. Thanks!
using (MailMessage message = new MailMessage())
{
}
Kurt
The using blocked did the trick. Thanks!
using (MailMessage message = new MailMessage())
{
}
Kurt
Bob