Web Forms :: How To Release References To SmtpClient After Calling Dispose
Sep 17, 2010
I use SmtpClient to send email. I want to ensure that the SMTP connection gets closed after each message is sent. I found an explanation of how to do this in the SmtpClient documentation on MSDN:
[URL]
One thing it says is: Call Dispose when you are finished using the SmtpClient. The Dispose method leaves the SmtpClient in an unusable state. After calling Dispose, you must release all references to the SmtpClient so the garbage collector can reclaim the memory that the
SmtpClient was occupying.
I have a question about the last part. What exactly does "release all references" mean. How do I do that?
I am developing a web site in Visual Studio 2008. I have a project for the web application and several class libraries as references. When I add the references I select the file under bin/debug in the class library folder. When changing the project to release mode the references still point to the .dll in the debug folder. Shouldn't this change automatically. How should I add the references so that debug and release are properly referenced?
Is there any real purpose to calling Dispose() on a Linq to SQL query? I want my site to be scalable so I'd like to control the datacontext but if it's not necessary I don't see a point.
I am using Reporting Services to render a report directly to PDF. It requires that I use two web references: ReportExecution2005.asmx and ReportService2005.asmx. The performance on web references seems really poor. Since my web server (IIS7) and my SQL Server (2008) are on the same box, is there a way I can reference them directly? If not is there any way I can explicitly cache them or something. First load is really really slow, second load is perfectly acceptable.
i am trying to send email using simple SMTPClient class, as the following code:
[Code]....
when i put the To email to be an Gmail,yahoo, hotmail email "as in example" or another domain.com email, the code is working with no issue, but when i put the recepient email to be any of Google Apps Emails, unfortunately the email didnot received. does the SmtpClient have a problem with google apps?
I'm trying to include script and style references that will not break on deployment, however I can not even get the references to work locally. I have tried using Url.Content() and MVCContrib's <%=Html.ScriptInclude("")%>.
My scripts are in a Scripts folder on the root of the site; my styles are in the usual Content/css/ folder.
I can specify a port number with SmtpClient object in ASP.NET, what I am wondering is, is that just the port .NET uses to send mail to the SMTP server? Or will that dictate what port for the SMTP server to use? Or is it that it MUST match the port configured for the SMTP server?
Learning how to do a master page in asp.net. Trying to figure out how my style sheet interacts with respects to the master page and content page. I can get HTML tags like body and the style sheet to react. But when I call the ID attribute of a label no styling takes place. What am I missing here as far as interaction? BTW I'm using VS2008
When using the system.net/mail web.config settings to configure my SmtpClient, it fails to deliver emails, with an "protocol error" described best by Base64 encoding and authentication problems:
Example: With the following Config <system.net> <mailSettings> <smtp from="[URL]"> <network host="[URL]" port="2525" defaultCredentials="false" userName="username" password="password"/> </smtp> </mailSettings> </system.net>
And the Code:
var tmp = new SmtpClient(); MailMessage msg = new MailMessage(); msg.Subject = "test"; msg.From = new MailAddress("[URL]"); msg.To.Add(new MailAddress("[URL]")); msg.Body = "test"; tmp.Send(msg);
Produces the error message:
System.Net.Mail.SmtpException: The server committed a protocol violation The server response was: UGFzc3dvcmQ6 at System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response) at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, SmtpFailedRecipientException & exception) at System.Net.Mail.SmtpClient.Send(MailMessage message)
However, in the following code where I manually set all the properties, the code runs without exception and the email is delivered.
var tmp2 = new SmtpClient("[URL]", 2525); tmp2.Credentials = new NetworkCredential("username", "password"); tmp2.UseDefaultCredentials = false; MailMessage msg = new MailMessage(); msg.Subject = "test"; msg.From = new MailAddress("[URL]"); msg.To.Add(new MailAddress("[URL]")); msg.Body = "test"; tmp2.Send(msg);
I am having some problems sending emails (using gmail). I have an application that allows a user to send an email, request info, etc. I want the email "from" address to be from the initiating user. I set up the settings in the web.config for the first time. Previously, I had always set up the info directly in the code. The email is sending just fine. However, the from address shows the user name correctly but the email address in the one in the web.config.ie. "User From Name <web.config from address>". In the code, the MailMessage object shows it correctly ("User From Name <User from address>"), and the SMTPClient From address shows the web.config from address. This is going to be confusing for the recipient of the emails to see the config address with the user name.
I tried removing the From address from the config(leaving the required userIDpw for the email logon, but no difference. I also tried removing the config mail settings completely and putting it back in the code. Still no luck.
How can I get the from address to be the valid email address in resulting email?
I have a page where I load a couple of dropdown lists from the database (DB). I do this by calling a general function that connects to the DB and gets the data to the dropdownlist. This means that I can have three queries to the DB while rendering one page.
should I close and dispose the sqlconnection, sqlcommand and sqldatareader at the end of this function?
Would it be faster if I left it open for the next call, if you get what I mean, or is it best to close and dispose it every time?
But with MVC 3, I canīt create a child container per request(in really I can, using the old way), because container is hold at a static variable: DependencyResolver.SetResolver(new UnityDependencyResolver(container));
Which the better way to Dispose created objects? Since I use Repositories and Entity Framework (that need Dispose). As said here [URL] HttpRequestLifetimeManager donīt dispose objects....
I Want to know garbage collector works in .net there is something heap and stack funda.so can u please tell me from where i get reference of whole funda of that.and i have another question is that Please see below the code.here i declare one dt and get some data in it.and i don't want that dt after data come in text boxes.so in finally method i do dispose using dt.dispoe().but after that i write little code to check whether the dt correctly dispose or not.so i check with ifcondition after disposing.you can check code given below for that condition.as per condition it gives me "Nikunj" Ouput in message box it meanse dt is not disposed after calling the dispose method.so can u please tell me why?And i Want to know about all resources which i used i want to know how can i free it.whether it is variable,object,datatable,datareader etc..... if it is any where with example then please give me link.and if it's from msdn then it's better. i want to know from Microsoft that how Microsoft Suggest to do that.
Private Sub grd_expense_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles grd_expense.DoubleClick Dim dt As DataTable
How do I format the body of the email so it doesn't look so old school :) I've tried sending html through it, but it just comes out as html in the body of the email.
I am working on a project where one of the requirements is to re-write an ASP.NET application. The old ASP.NET application was based on .NET Framework 1.1. The new ASP.NET application is based on .NET Framework 3.5.
One of the functions in the old web application was the ability to send email. The old code used the System.Web.Mail.SmtpMail class, whereas the new web application uses the System.Net.Mail.SmtpClient class.
In testing this on our development servers, everything worked fine. However, we have two beta clients testing out our software, and they both run into problems sending email in the new web application.
The specific exception is as follows:
"Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it"
Both the old and new ASP.NET application are on the same server (Windows Server 2003). They both are using the same Exchange mail server. Why is it that the old ASP.NET application can successfully send email, but the new one cannot?
I looked at the old code, and it did not use any form of authentication, it just specified the sender's email address, the recipient's email address, the subject, body, and server, and sent the message. I did the same thing in the new code, with the only difference being that I used the SmtpClient class.
Below is a code snippet from the new ASP.NET application:
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); mail.To.Add(messageTo); mail.From = new MailAddress(messageFrom); mail.Subject = messageSubject; mail.Body = messageBody; SmtpClient client = new SmtpClient(); client.Host = smtpServer; client.Send(mail);
If I explicitly put an oracle connection in a Using{} block I know that it will call the Dispose() method when it goes out of scope. My question is will the OracleConnection object be disposed in the following code block:
[Code]....
The OracleConnection is implicitly within the Using{} block for the OracleCommand and goes out of scope at the same time.
There's a problem, wherein a XML Document.Save is resulting in the error the process cannot access the file, because it is being used by another process or the statement an Invalid XML Document.I think it's because I do not dispose the XML Document object after it's operation is complete.Is it possible to do this.Is there a workaround?
When you create and use a Web Service proxy class in the ASP.Net framework, the class ultimately inherits from Component, which implements IDisposable. I have never seen one example online where people dispose of a web proxy class, but was wondering if it really needs to be done. When I call only one method, I normally wrap it in a using statement, but if I have a need to call it several times throughout the page, I might end up using the same instance, and just wondered what the ramifications are of not disposing it.
I have a member class that returned IQueryable from a data context
public static IQueryable<TB_Country> GetCountriesQ() { IQueryable<TB_Country> country; Bn_Master_DataDataContext db = new Bn_Master_DataDataContext(); country = db.TB_Countries .OrderBy(o => o.CountryName); return country; }
As you can see I don't delete the data context after usage. Because if I delete it, the code that call this method cannot use the IQueryable (perhaps because of deferred execution?). How to force immediate execution to this method? So I can dispose the data context..
I have an ASP.net page that is creating a service reference to a WCF service and making calls in multiple places in my page. I instantiate the service reference in Page_Load and have an instance variable to store it:
I just discovered that I need to be disposing of the service reference when I am done using it or else the connections will be kept alive and will block incoming connections if I reach the max number of connections. Where would the best place to dispose of these references be? I was thinking of doing it on the OnUnLoad event.