c# SmtpClient class not able to send email using gmail

前端 未结 7 984
-上瘾入骨i
-上瘾入骨i 2020-11-27 16:24

I\'m having trouble sending email using my gmail account. Im pulling my hair out.

The same settings work fine in Thunderbird.

Here\'s the code. I\'ve also tr

相关标签:
7条回答
  • 2020-11-27 16:59

    This works, but it's not very performance friendly. Check out client.SendAsync: http://msdn.microsoft.com/en-us/library/x5x13z6h.aspx

    An example use case:

     var message = new MailMessage("from", "to", "subject", "body");
     var client = new SmtpClient("smtp.gmail.com", 587)
                {
                    Credentials = new NetworkCredential("login", "password"),
                    EnableSsl = true
                };
                client.SendCompleted += (s, e) =>
                {
                    client.Dispose();
                    message.Dispose();
                };
                client.SendAsync(message, null);
    
    0 讨论(0)
  • 2020-11-27 17:02

    It works fine in my case:

    private void btnTestConnection_Click(object sender, EventArgs e)
         {
        btnTestConnection.Enabled = false;
        SmtpClient ss = new SmtpClient(txtSmtpHostName.Text.Trim(), Convert.ToInt32(numSmtpHostPort.Value));
        ss.EnableSsl = chkSmtpSecureType.Checked;
        ss.Timeout = 10000;
        ss.DeliveryMethod = SmtpDeliveryMethod.Network;
        ss.UseDefaultCredentials = false;
        ss.Credentials = new NetworkCredential(txtSmtpAccount.Text.Trim(), txtSmtpPassword.Text);
    
        MailMessage mm = new MailMessage(txtSmtpFromEmail.Text.Trim(), "test@domain.com", "subject", "my body");
        mm.BodyEncoding = UTF8Encoding.UTF8;
        mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
        ss.SendCompleted += (s, b) =>
        {
            ss.Dispose();
            mm.Dispose();
        };
        try
        {
            ss.Send(mm);
            ss.Dispose();
            mm.Dispose();
            MessageBox.Show("Connection successfully");
        }
        catch (Exception ep)
        {
            MessageBox.Show("Connection error: " + ep.Message, "Smtp Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        btnTestConnection.Enabled = true;
    }
    
    0 讨论(0)
  • 2020-11-27 17:04

    Stackoverflow said before

    In your case it means you have to send it with the email address you logged into Google with.

    Stackoverflow also says

    So maybe there's a firewall that interferes with the connection. I'm encountering this problem right now while testing your code. Try the suggested TELNET-Test.

    0 讨论(0)
  • 2020-11-27 17:06

    This work's perfectly. Create a mail Template in a separate file MailTemplate.html.

    Add genuine NetworkCredentials - login and Password

    private void SendMail()
        {
        string filename = Server.MapPath("~/MailTemplate.html");
        string username = UserName.Text.ToString();
    
        string mailbody = System.IO.File.ReadAllText(filename);
        mailbody = mailbody.Replace("##NAME##", username);
        string to = Email.Text;
        string from = "test@gmail.com";
    
        MailMessage message = new MailMessage(from, to);
        message.Subject = "Auto Response Email";
        message.Body = mailbody;
        message.BodyEncoding = Encoding.UTF8;
        message.IsBodyHtml = true;
        SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
        System.Net.NetworkCredential basicCredential = new System.Net.NetworkCredential("test@gmail.com", "test123#");
        client.EnableSsl = true;
        client.UseDefaultCredentials = true;
        client.Credentials = basicCredential;
        try
        {
            client.Send(message);
            SuccessMessage.Text = "Email Sending successfully";
    
        }
        catch (Exception ex)
        {
    
            ErrorMessage.Text = ex.Message.ToString();
        }
    }
    

    MailTemplate.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>Title</title>
    </head>
    <body>
        <div style="border: thin solid #0066FF; width: 550px; margin: 25px auto; padding: 15px; font-family: 'Microsoft Himalaya'; font-size: x-large; font-style: normal; color: #0066FF; background-color: #EfEFF2;">
            <br />
            <p style="vertical-align: middle">Dear ##NAME##,</p>
        </div>
    </body>
    </html>
    
    0 讨论(0)
  • Work for me only with port 25.

    0 讨论(0)
  • 2020-11-27 17:07

    I can verify that setting UseDefaultCredentials to false MUST be done before the NetworkCredentials is created. I had the same problem.

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