Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Email attachments - even after dispose no release?

Posted on 2010-08-15
2
Medium Priority
?
380 Views
Last Modified: 2013-12-17
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

0
Comment
Question by:moosetracker
2 Comments
 
LVL 20

Accepted Solution

by:
informaniac earned 2000 total points
ID: 33440622
Dispose the mailMessage object also
0
 
LVL 1

Author Closing Comment

by:moosetracker
ID: 33440708
You are brilliently correct... I could of swore I checked that for close and/or dispose, and neither was present for that object..
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
Integration Management Part 2
When cloud platforms entered the scene, users and companies jumped on board to take advantage of the many benefits, like the ability to work and connect with company information from various locations. What many didn't foresee was the increased risk…
Suggested Courses

564 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question