Email attachments - even after dispose no release?

in C# I have 6 attachments for emails going out.. 3 are built in crystal 3 are static handouts..
With both types after the run the pdf's can SOMETIMES not be able to be deleted or moved because someone has it open.. I made sure Crystal is closing & disposing at it's end, but I am sure it is the Attachment due to the fact the 3 static PDF's can also get locked.. After 15/30 minutes the resources unlock.. so sounds like a dispose problem.. But.. I dispose on the finally process of a try so if it aborts, it still should dispose.

Below is the code, attempting to abbrevate where not really part of attachment logic.




using System.Net.Mail;
:
:
    Attachment attachmentmsg1;
    Attachment attachmentmsg2;
    Attachment attachmentmsg3;
    Attachment attachmentmsg4;
    Attachment attachmentmsg5;
    Attachment attachmentmsg6;
:
:
        try
        {
            mMailMessage = new MailMessage();
            // Set the sender address of the mail message
            mMailMessage.From = new MailAddress("someone@comcast.net");

:
:
                SetAttachments();
                PrintBody();
:
:
                mMailMessage.Body = fullBody;

:               // Instantiate a new instance of SmtpClient
                SmtpClient mSmtpClient = new SmtpClient("smtp.comcast.net");
                // Send the mail message
                mSmtpClient.Send(mMailMessage);
                mSmtpClient = null;
            }

        }
        catch (Exception)
        {

            throw;
        }
        finally
        {
            attachmentmsg1.Dispose();
            attachmentmsg2.Dispose();
            attachmentmsg3.Dispose();
            attachmentmsg4.Dispose();
            attachmentmsg5.Dispose();
            attachmentmsg6.Dispose();
        }
    private void SetAttachments()
    {
       string strReportPath =  strAppPath + "Reports\\EmailRptPerUnit.rpt";
       string strReportPath2 = strAppPath + "Reports\\EmailRptUnitIndv.rpt";
        string UT = sglUnitInfo.UnitType.Trim();
        string UN = sglUnitInfo.UnitNo.Trim();
        string UnitRpt = PathForUnitAttachments + UT + UN + "UnitRpt.pdf";
        string IndvRpt = PathForUnitAttachments + UT + UN + "IndivRpt.pdf";
        string IndvRpt2 = PathForUnitAttachments + UT + UN + "IndivRpt.doc";
        string ReqTrains = PathForHandouts + "BasicLdrRequirements.pdf";
        string MissingForm = PathForHandouts + "FormForMissingCourses.pdf";
        string ProblemTracking = PathForHandouts + "GuideToTrackingProblems.pdf";
        try
        {
            dsUnitUntrained dsUT = new dsUnitUntrained();
            dsUnitCourses dsCo = new dsUnitCourses();

            crPdf.CreateEnglishPdf(strReportPath, UnitRpt, UT, UN, "CR_Email_Untrained", dsUT,"PDF");
            crPdf.CreateEnglishPdf(strReportPath2, IndvRpt, UT, UN, "CR_Email_Untrained", dsUT, "PDF");
            crPdf.CreateEnglishPdf(strReportPath2, IndvRpt2, UT, UN, "CR_Email_Untrained", dsUT, "doc");

            attachmentmsg1 = new Attachment(UnitRpt);
            mMailMessage.Attachments.Add(attachmentmsg1);
            attachmentmsg2 = new Attachment(IndvRpt);
            mMailMessage.Attachments.Add(attachmentmsg2);
            attachmentmsg3 = new Attachment(IndvRpt2);
            mMailMessage.Attachments.Add(attachmentmsg3);
            attachmentmsg4 = new Attachment(ReqTrains);
            mMailMessage.Attachments.Add(attachmentmsg4);
            attachmentmsg5 = new Attachment(MissingForm);
            mMailMessage.Attachments.Add(attachmentmsg5);
            attachmentmsg6 = new Attachment(ProblemTracking);
            mMailMessage.Attachments.Add(attachmentmsg6);

        }
        catch (Exception)
        {
            
            throw;
        }
    }

Open in new window

LVL 1
moosetrackerAsked:
Who is Participating?
 
Obadiah ChristopherConnect With a Mentor Commented:
Dispose the mailMessage object also
0
 
moosetrackerAuthor Commented:
You are brilliently correct... I could of swore I checked that for close and/or dispose, and neither was present for that object..
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.