C# 发送gmail电子邮件

C# 发送gmail电子邮件,c#,email,gmail,C#,Email,Gmail,我正试图通过C#应用程序(控制台)发送电子邮件。事实上,我想它发送电子邮件到任何类型的电子邮件,但目前如果我能让它发送到一个gmail帐户,我会很高兴 我只是想暂时把这个发送到gmail账户 整个计划: namespace EmailAddress { class Program { static void Main(string[] args) { Program test = new Program();

我正试图通过C#应用程序(控制台)发送电子邮件。事实上,我想它发送电子邮件到任何类型的电子邮件,但目前如果我能让它发送到一个gmail帐户,我会很高兴

我只是想暂时把这个发送到gmail账户

整个计划:

namespace EmailAddress
{
    class Program
    {
        static void Main(string[] args)
        {
            Program test = new Program();
            test.email_send();
        }

        public void email_send()
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
            mail.From = new MailAddress("hg@gmail.com");
            mail.To.Add("hg@gmail.com");
            mail.Subject = "Test Mail - 1";
            mail.Body = "Your attachment is accessible on your computer!";

            System.Net.Mail.Attachment attachment;
            attachment = new System.Net.Mail.Attachment("g:/example1.txt");
            mail.Attachments.Add(attachment);

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("your mail@gmail.com", "your password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);
        }
    }
}
新代码:不挂起,但不会将邮件发送到收件箱

static void Main(string[] args)
        {
            Program test = new Program();
            //test.email_send();
            test.CreateTestMessage4();
        }

        public void email_send()
        {
            MailMessage mail = new MailMessage();
            SmtpClient smtp = new SmtpClient("smtp.gmail.com");
            mail.From = new MailAddress("g@gmail.com");
            mail.To.Add("g@gmail.com");
            mail.Subject = "Test Mail - 1";
            mail.Body = "Your attachment is accessible on your computer!";

            System.Net.Mail.Attachment attachment;

            attachment = new System.Net.Mail.Attachment("g:\\example1.txt");
            mail.Attachments.Add(attachment);//list of attachements

            smtp.Port = 587;//google standard -- most of the time wouldn't not set
            smtp.EnableSsl = true;
            smtp.UseDefaultCredentials = true;
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtp.Credentials = new System.Net.NetworkCredential("*","*");

            smtp.Send(mail);

            Console.WriteLine("-- Sending Email --");
            Console.ReadLine();
        }
有人可以试试这个代码,看看它是否有效。由于某些原因,这不起作用,所以我希望有人对此有新的看法。我只是在类的一个实例的main方法中调用它

 public void email_send()
        {
            MailMessage mail = new MailMessage();
            SmtpClient smtp = new SmtpClient("smtp.gmail.com");
            mail.From = new MailAddress("your email address");
            mail.To.Add("your email address");
            mail.Subject = "Test Mail - 1";
            mail.Body = "Your attachment is accessible on your computer!";

            System.Net.Mail.Attachment attachment;

            attachment = new System.Net.Mail.Attachment("g:\\example1.txt");
            mail.Attachments.Add(attachment);//list of attachements

            //smtp.Port = 587;//google standard -- most of the time wouldn't not set
            //smtp.EnableSsl = true;
            //smtp.UseDefaultCredentials = true;
            //smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            //smtp.Credentials = new System.Net.NetworkCredential("your address", 
                                                                 "your password");

            smtp.Port = 587;
            smtp.Host = "smtp.gmail.com";
            smtp.UseDefaultCredentials = false;
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtp.EnableSsl = true;
            smtp.Credentials = new System.Net.NetworkCredential("*", "*"); smtp.Send(mail);

            Console.WriteLine("-- Sending Email --");
            Console.ReadLine();
        }
您的代码已关闭:

MailMessage mail = new MailMessage();
using (SmtpClient smtp = new SmtpClient("smtp.gmail.com")) {
    mail.From = new MailAddress("haufdoug@gmail.com");
    mail.To.Add("haufdoug@gmail.com");
    mail.Subject = "Test Mail - 1";
    mail.Body = "Your attachment is accessible on your computer!";

    System.Net.Mail.Attachment attachment;

    attachment = new System.Net.Mail.Attachment("g:\\example1.txt");
    mail.Attachments.Add(attachment);

    smtp.Port = 587;
    smtp.EnableSsl = true;
    smtp.UseDefaultCredentials = false;
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtp.Credentials = new System.Net.NetworkCredential("your mail@gmail.com", "your password");

    smtp.Send(mail);
}
现在,关于你的其他一些问题

587端口仅由Google使用。通常,您连接到的邮件服务器会告诉您SMTP邮件使用哪个端口;谷歌说有587个

对于通过其他服务器发送,通常不设置端口号

旁注:

  • SmtpClient实现IDisposable接口。因此,它应该被包装在一个using子句中,以确保它在完成时被正确地处理。除非您使用的是
    .SendAsync()
    方法
  • 出于两个原因,我将变量名从
    SmtpServer
    更改为
    smtp
    。首先,命名约定。建议将方法中的变量设置为camel大小写(例如this)。其次,由于对象是
    SmtpClient
    ,因此SmtpServer是一个误称。这些都是非常不同的事情,只是错误地命名事物是不好的做法
  • 您的代码已关闭:

    MailMessage mail = new MailMessage();
    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com")) {
        mail.From = new MailAddress("haufdoug@gmail.com");
        mail.To.Add("haufdoug@gmail.com");
        mail.Subject = "Test Mail - 1";
        mail.Body = "Your attachment is accessible on your computer!";
    
        System.Net.Mail.Attachment attachment;
    
        attachment = new System.Net.Mail.Attachment("g:\\example1.txt");
        mail.Attachments.Add(attachment);
    
        smtp.Port = 587;
        smtp.EnableSsl = true;
        smtp.UseDefaultCredentials = false;
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.Credentials = new System.Net.NetworkCredential("your mail@gmail.com", "your password");
    
        smtp.Send(mail);
    }
    
    现在,关于你的其他一些问题

    587端口仅由Google使用。通常,您连接到的邮件服务器会告诉您SMTP邮件使用哪个端口;谷歌说有587个

    对于通过其他服务器发送,通常不设置端口号

    旁注:

  • SmtpClient实现IDisposable接口。因此,它应该被包装在一个using子句中,以确保它在完成时被正确地处理。除非您使用的是
    .SendAsync()
    方法
  • 出于两个原因,我将变量名从
    SmtpServer
    更改为
    smtp
    。首先,命名约定。建议将方法中的变量设置为camel大小写(例如this)。其次,由于对象是
    SmtpClient
    ,因此SmtpServer是一个误称。这些都是非常不同的事情,只是错误地命名事物是不好的做法

  • 你能试试这个吗,它对我有用:

    SmtpClient SmtpServer = new SmtpClient();
    SmtpServer.Port = 587;
    SmtpServer.Host = smtp.gmail.com;
    SmtpServer.UseDefaultCredentials = false;
    SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
    SmtpServer.EnableSsl = true; 
    SmtpServer.Credentials = new System.Net.NetworkCredential("your mail@gmail.com", "your password");
    

    你能试试这个吗,它对我有用:

    SmtpClient SmtpServer = new SmtpClient();
    SmtpServer.Port = 587;
    SmtpServer.Host = smtp.gmail.com;
    SmtpServer.UseDefaultCredentials = false;
    SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
    SmtpServer.EnableSsl = true; 
    SmtpServer.Credentials = new System.Net.NetworkCredential("your mail@gmail.com", "your password");
    

    发送到帐户和通过帐户发送完全不同。你的问题似乎混合了这两件事。你能澄清一下你遇到了什么问题吗?@Doug Hauf请在每篇文章中保留一个问题。关于你的新代码。我从未见过你调用
    email\u send()
    方法。尝试调用
    test.email_send()紧跟在
    程序测试=新程序()之后
    UseDefaultCredentials
    设置为false,并在网络上指定用户名和密码凭据发送到帐户和通过帐户发送的可能重复项完全不同。你的问题似乎混合了这两件事。你能澄清一下你遇到了什么问题吗?@Doug Hauf请在每篇文章中保留一个问题。关于你的新代码。我从未见过你调用
    email\u send()
    方法。尝试调用
    test.email_send()紧跟在
    程序测试=新程序()之后
    UseDefaultCredentials
    设置为false,并在NetworkCredential上指定用户名和密码这可能是我刚收到的错误的重复项。GMail不需要设置密码。SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:需要5.5.1身份验证。了解更多at@DougHauf:嗯。。对这就是
    smtp.Credentials=…
    行的作用。替换
    “您的mail@gmail.com“
    ”haufdoug@gmail.com“
    您的密码”
    与您的实际gmail密码一致。然后它将使用您的凭据。@DougHauf从未将您的密码放入这样的公共网站。如果我愿意,现在我可以登录你的gmail帐户了。我可以登录到你的其他网站,因为你可能使用了相同的密码。您需要立即更改您的gmail密码以及您使用相同密码的任何网站的密码。谢谢您刚刚更改了密码,它不会进入我的收件箱。我将在我的原始问题中发布代码,不带密码。奇数。System.Net.Mail.SmtpClient未在3.5框架中实现一次性。这是我刚刚收到的错误。GMail不需要设置密码。SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:需要5.5.1身份验证。了解更多at@DougHauf:嗯。。对这就是
    smtp.Credentials=…
    行的作用。替换
    “您的mail@gmail.com“
    ”haufdoug@gmail.com“
    您的密码”
    与您的实际gmail密码一致。然后它将使用您的凭据。@DougHauf从未将您的密码放入这样的公共网站。如果我愿意,现在我可以登录你的gmail帐户了。我可以登录到你的其他网站,因为你可能使用了相同的密码。您需要立即更改您的gmail密码以及您使用相同密码的任何网站的密码。谢谢您刚刚更改了密码,它不会进入我的收件箱。我将在我的原始问题中发布代码,不带密码。奇数。System.Net.Mail.SmtpClient未在3中实现一次性。