send email in c#

前端 未结 6 1534
猫巷女王i
猫巷女王i 2021-01-28 04:56

i\'ve tried to send email using this code..but an error occurred in smtp.Send(mail); messaging \"Failure sending mail\"

  MailMessage mail = ne         


        
相关标签:
6条回答
  • 2021-01-28 05:27

    Here's a basic GMAIL smtp email implementation I wrote a while ago:

    public static bool SendGmail(string subject, string content, string[] recipients, string from)
    {
        bool success = recipients != null && recipients.Length > 0;
    
        if (success)
        {
            SmtpClient gmailClient = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                UseDefaultCredentials = false,
                Credentials = new System.Net.NetworkCredential("******", "*****") //you need to add some valid gmail account credentials to authenticate with gmails SMTP server.
            };
    
    
            using (MailMessage gMessage = new MailMessage(from, recipients[0], subject, content))
            {
                for (int i = 1; i < recipients.Length; i++)
                    gMessage.To.Add(recipients[i]);
    
                try
                {
                    gmailClient.Send(gMessage);
                    success = true;
                }
                catch (Exception) { success = false; }
            }
        }
        return success;
    }
    

    It should work fine for you, but you'll need to add a valid gmail acocunt where I've marked in the code.

    0 讨论(0)
  • 2021-01-28 05:28

    In your code specify port number:

    SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587)
    

    Also check out this thread Sending email through Gmail SMTP server with C#

    0 讨论(0)
  • 2021-01-28 05:33

    You should be using the using statement when creating a new MailMessage, plus a few things you missed out like port number and enableSSL

    using (MailMessage mail = new MailMessage())
    {
        mail.From = new MailAddress("from@gmail.com");
        mail.To.Add(new MailAddress("to@yahoo.com"));
        mail.Subject = "test sample";
        mail.Body = @"thank you";
    
        SmtpClient smtpServer = new SmtpClient("smtp.gmail.com");
        smtpServer.Port = 587;
        smtpServer.Credentials = new NetworkCredential("from@gmail.com", "password"); 
        smtpServer.EnableSsl = true;
        smtpServer.Send(mail);
    }
    
    0 讨论(0)
  • 2021-01-28 05:48

    You need to set smtp.EnableSsl = true for gmail.

    Take a look at this class, it should work for you:

    public class Email
    {
        NetworkCredential credentials;
        MailAddress sender;
    
        public Email(NetworkCredential credentials, MailAddress sender)
        {
            this.credentials = credentials;
            this.sender = sender;
        }
    
        public bool EnableSsl
        {
            get { return _EnableSsl; }
            set { _EnableSsl = value; }
        }
        bool _EnableSsl = true;
    
        public string Host
        {
            get { return _Host; }
            set { _Host = value; }
        }
        string _Host = "smtp.gmail.com";
    
        public int Port
        {
            get { return _Port; }
            set { _Port = value; }
        }
        int _Port = 587;
    
        public void Send(MailAddress recipient, string subject, string body, Action<MailMessage> action, params FileInfo[] attachments)
        {
            SmtpClient smtpClient = new SmtpClient();
    
            // setup up the host, increase the timeout to 5 minutes
            smtpClient.Host = Host;
            smtpClient.Port = Port;
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtpClient.UseDefaultCredentials = false;
            smtpClient.Credentials = credentials;
            smtpClient.Timeout = (60 * 5 * 1000);
            smtpClient.EnableSsl = EnableSsl;
    
            using (var message = new MailMessage(sender, recipient)
            {
                Subject = subject,
                Body = body
            })
            {
                foreach (var file in attachments)
                    if (file.Exists)
                        message.Attachments.Add(new Attachment(file.FullName));
                if(null != action)
                    action(message);
                smtpClient.Send(message);
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-28 05:48

    fill mail.Host and mail.Port

    Properties with proper values

    0 讨论(0)
  • 2021-01-28 05:53

    This is the function which i checked to send mail...and it's working properly.

    `

            private static bool testsendemail(MailMessage message)
            {
    
                try
    
                {
    
                MailMessage message1 = new MailMessage();
    
                SmtpClient smtpClient = new SmtpClient();
    
                string msg = string.Empty;
    
                MailAddress fromAddress = new MailAddress("FromMail@Test.com");
                message1.From = fromAddress;
                message1.To.Add("ToMail@Test1.com");
                message1.Subject = "This is Test mail";
                message1.IsBodyHtml = true;
                message1.Body ="You can write your body here"+message;
                smtpClient.Host = "smtp.mail.yahoo.com"; // We use yahoo as our smtp client
                smtpClient.Port = 587;
                smtpClient.EnableSsl = false;
                smtpClient.UseDefaultCredentials = true;
                smtpClient.Credentials = new  System.Net.NetworkCredential("SenderMail@yahoo.com", "YourPassword");
    
                smtpClient.Send(message1);
            }
            catch
            {
                return false;
            }
            return true;
    
        }`           
    

    Thank You.

    0 讨论(0)
提交回复
热议问题