Ali Foroughi
Ali Foroughi

Reputation: 4619

Send email by C# from my website

i use the following code to send email :

        public static bool SendEmail(string To, string ToName, string From, string FromName, string Subject, string Body, bool IsBodyHTML)
        {
            try
            {
                MailAddress FromAddr = new MailAddress(From, FromName, System.Text.Encoding.UTF8);
                MailAddress ToAddr = new MailAddress(To, ToName, System.Text.Encoding.UTF8);
                var smtp = new SmtpClient
                {
                    Host = "smtp.datagts.net",
                    Port = 587,
                    EnableSsl = false,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = true,                                        
                    Credentials = new System.Net.NetworkCredential("MeEmail@...", "Password")
                };

                using (MailMessage message = new MailMessage(FromAddr, ToAddr)
                {
                    Subject = Subject,
                    Body = Body,                    
                    IsBodyHtml = IsBodyHTML,                    
                    BodyEncoding = System.Text.Encoding.UTF8,                   

                })
                {
                    smtp.Send(message);
                }
                return true;
            }
            catch
            {
                return false;
            }
        }

It works on local and when i use my web site under my local IIS but when i upload it to my website it does not work and does not send email even any error occurs.

is there anybody out there to help me about this ?

UPDATE1 : i remove the try catch and catch an error with this message : Failure sending mail

UPDATE2 : I change my stmp server and use my Gmail account , look at this code :

public static bool SendEmail(string To, string ToName, string From, string FromName, string Subject, string Body, bool IsBodyHTML)
            {
                try
                {
                    MailAddress FromAddr = new MailAddress(From, FromName, System.Text.Encoding.UTF8);
                    MailAddress ToAddr = new MailAddress(To, ToName, System.Text.Encoding.UTF8);
                    var smtp = new SmtpClient
                    {
                        Host = "smtp.gmail.com",
                        Port = 587,
                        EnableSsl = true,
                        DeliveryMethod = SmtpDeliveryMethod.Network,
                        UseDefaultCredentials = false,                                        
                        Credentials = new System.Net.NetworkCredential("[email protected]", "Password")
                    };

                    using (MailMessage message = new MailMessage(FromAddr, ToAddr)
                    {
                        Subject = Subject,
                        Body = Body,                    
                        IsBodyHtml = IsBodyHTML,                    
                        BodyEncoding = System.Text.Encoding.UTF8,                   

                    })
                    {
                        smtp.Send(message);
                    }
                    return true;
                }
                catch
                {
                    return false;
                }
            }

and now i get an error yet :(

I get the "MustIssueStartTlsFirst" error that mentioned in this link. I am now trying to check @EdFS point and use port 25

UPDATE3: It is because i use the shared server , i just can change the port to 25 , and steel it does not work an give the same error, I am trying to get support from my server backup team

Upvotes: 1

Views: 5021

Answers (1)

EdSF
EdSF

Reputation: 12371

Assuming the SMTP server (smtp.datagts.net) is running fine, some items to check:

  1. Your code seems to be using UseDefaultCredentials=true, but on the next line your are providing credentials
  2. As mentioned in the comments check that Port 587 isn't blocked at your web host
  3. If you are hosted on a shared server (not a dedicated machine), it's likely ASP.Net is set for medium trust. IF so, you cannot use any port for SMTP other than Port 25.

Update:

To try and get to the error. In your LOCAL (development) machine, add this to your web.config:

<system.web>
...
    <securityPolicy>
      <trustLevel name="Medium" />
    </securityPolicy>
...

ASP.Net on your local machine runs in FULL TRUST. The above setting makes the current web site/application you are working on run in medium trust. You can remove/comment as necessary. The point of this exercise is to try and match what your web host settings are (it's obviously different if things work in your local machine then dies when published). It would be nice to just obtain the info from your web host..but until then....

Then try both Port 587 and 25.

  • It should fail on port 587 with a security exception (because of medium trust)
  • If your mail server only accepts SMTP connections on port 587, then of course, port 25 will not work either (but you should get a different error). The point being "...it still doesn't work..." in this case is that the SMTP server (smtp.datagts.net) only accepts connections on port 587

GMAIL is the same story. You cannot use Port 587 if your web host settings for ASP.Net is medium trust. I have been through this many times - it will "work" in my local machine, but as soon as I enable medium trust in my local development machine, it will fail.

You should ask your web host what their settings are for ASP.Net - if its some "custom" setting you can ask for a copy and use that in your dev box as well.

Upvotes: 5

Related Questions