Send email by C# from my website

余生长醉 提交于 2019-12-20 05:19:11

问题


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("MeEmail@gmail.com", "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


回答1:


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.



来源:https://stackoverflow.com/questions/10563397/send-email-by-c-sharp-from-my-website

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!