首页 文章

通过Gmail在.NET中发送电子邮件

提问于
浏览
780

我没有依赖我的主机发送电子邮件,而是考虑使用我的Gmail帐户发送电子邮件 . 这些电子邮件是我在节目中播放的乐队的个性化电子邮件 . 有可能吗?

22 回答

  • 4

    用这种方式

    MailMessage sendmsg = new MailMessage(SendersAddress, ReceiversAddress, subject, body); 
    SmtpClient client = new SmtpClient("smtp.gmail.com");
    
    client.Port = Convert.ToInt32("587");
    client.EnableSsl = true;
    client.Credentials = new System.Net.NetworkCredential("mail-id@gmail.com","MyPassWord");
    client.Send(sendmsg);
    

    别忘掉这个 :

    using System.Net;
    using System.Net.Mail;
    
  • 4

    这是发送带附件的电子邮件..简单和简短..

    来源:http://coding-issues.blogspot.in/2012/11/sending-email-with-attachments-from-c.html

    using System.Net;
    using System.Net.Mail;
    
    public void email_send()
    {
        MailMessage mail = new MailMessage();
        SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
        mail.From = new MailAddress("your mail@gmail.com");
        mail.To.Add("to_mail@gmail.com");
        mail.Subject = "Test Mail - 1";
        mail.Body = "mail with attachment";
    
        System.Net.Mail.Attachment attachment;
        attachment = new System.Net.Mail.Attachment("c:/textfile.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);
    
    }
    
  • 7

    http://www.systemnetmail.com/可能是一个专门用于单个.NET命名空间的最荒谬的完整站点......但是它有一些你想知道的关于通过.NET发送邮件的一切,无论是ASP.NET还是桌面 .

    http://www.systemwebmail.com/是帖子中的原始URL,但不应用于.NET 2.0及更高版本 .

  • 39

    如果您想发送背景电子邮件,请执行以下操作

    public void SendEmail(string address, string subject, string message)
     {
     Thread threadSendMails;
     threadSendMails = new Thread(delegate()
        {
    
          //Place your Code here 
    
         });
      threadSendMails.IsBackground = true;
      threadSendMails.Start();
    }
    

    并添加命名空间

    using System.Threading;
    
  • 6

    这是我的版本:“Send Email In C # Using Gmail” .

    using System;
    using System.Net;
    using System.Net.Mail;
    
    namespace SendMailViaGmail
    {
       class Program
       {
       static void Main(string[] args)
       {
    
          //Specify senders gmail address
          string SendersAddress = "Sendersaddress@gmail.com";
          //Specify The Address You want to sent Email To(can be any valid email address)
          string ReceiversAddress = "ReceiversAddress@yahoo.com";
          //Specify The password of gmial account u are using to sent mail(pw of sender@gmail.com)
          const string SendersPassword = "Password";
          //Write the subject of ur mail
          const string subject = "Testing";
          //Write the contents of your mail
          const string body = "Hi This Is my Mail From Gmail";
    
          try
          {
            //we will use Smtp client which allows us to send email using SMTP Protocol
            //i have specified the properties of SmtpClient smtp within{}
            //gmails smtp server name is smtp.gmail.com and port number is 587
            SmtpClient smtp = new SmtpClient
            {
               Host = "smtp.gmail.com",
               Port = 587,
               EnableSsl = true,
               DeliveryMethod = SmtpDeliveryMethod.Network,
               Credentials    = new NetworkCredential(SendersAddress, SendersPassword),
               Timeout = 3000
            };
    
            //MailMessage represents a mail message
            //it is 4 parameters(From,TO,subject,body)
    
            MailMessage message = new MailMessage(SendersAddress, ReceiversAddress, subject, body);
            /*WE use smtp sever we specified above to send the message(MailMessage message)*/
    
            smtp.Send(message);
            Console.WriteLine("Message Sent Successfully");
            Console.ReadKey();
         }
    
         catch (Exception ex)
         {
            Console.WriteLine(ex.Message);
            Console.ReadKey();
         }
        }
       }
     }
    
  • 65

    以下是一种从web.config发送邮件和获取凭据的方法:

    public static string SendEmail(string To, string Subject, string Msg, bool bodyHtml = false, bool test = false, Stream AttachmentStream = null, string AttachmentType = null, string AttachmentFileName = null)
    {
        try
        {
            System.Net.Mail.MailMessage newMsg = new System.Net.Mail.MailMessage(System.Configuration.ConfigurationManager.AppSettings["mailCfg"], To, Subject, Msg);
            newMsg.BodyEncoding = System.Text.Encoding.UTF8;
            newMsg.HeadersEncoding = System.Text.Encoding.UTF8;
            newMsg.SubjectEncoding = System.Text.Encoding.UTF8;
    
            System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient();
            if (AttachmentStream != null && AttachmentType != null && AttachmentFileName != null)
            {
                System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(AttachmentStream, AttachmentFileName);
                System.Net.Mime.ContentDisposition disposition = attachment.ContentDisposition;
                disposition.FileName = AttachmentFileName;
                disposition.DispositionType = System.Net.Mime.DispositionTypeNames.Attachment;
    
                newMsg.Attachments.Add(attachment);
            }
            if (test)
            {
                smtpClient.PickupDirectoryLocation = "C:\\TestEmail";
                smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory;
            }
            else
            {
                //smtpClient.EnableSsl = true;
            }
    
            newMsg.IsBodyHtml = bodyHtml;
            smtpClient.Send(newMsg);
            return SENT_OK;
        }
        catch (Exception ex)
        {
    
            return "Error: " + ex.Message
                 + "

    Inner Exception: " + ex.InnerException; } }

    和web.config中的相应部分:

    <appSettings>
        <add key="mailCfg" value="yourmail@example.com"/>
    </appSettings>
    <system.net>
      <mailSettings>
        <smtp deliveryMethod="Network" from="yourmail@example.com">
          <network defaultCredentials="false" host="mail.exapmple.com" userName="yourmail@example.com" password="your_password" port="25"/>
        </smtp>
      </mailSettings>
    </system.net>
    
  • 15

    为了让我能够工作,我必须启用我的Gmail帐户才能让其他应用程序获得访问权限 . 使用此链接使用"enable less secure apps"和 also 完成此操作:https://accounts.google.com/b/0/DisplayUnlockCaptcha

  • 1

    Google可能阻止某些不使用现代安全标准的应用或设备尝试登录 . 由于这些应用和设备更容易入侵,因此阻止它们有助于确保您的帐户更安全 .

    一些不支持最新安全标准的应用程序示例包括:

    • 适用于iOS 6或更低版本的iPhone或iPad上的Mail应用程序

    • 8.1版本之前Windows手机上的Mail应用程序

    • 某些桌面邮件客户端,如Microsoft Outlook和Mozilla Thunderbird

    因此,您必须在Google帐户中启用 Less Secure Sign-In .

    登录Google帐户后,请转到:

    https://myaccount.google.com/lesssecureapps
    要么
    https://www.google.com/settings/security/lesssecureapps

    在C#中,您可以使用以下代码:

    using (MailMessage mail = new MailMessage())
    {
        mail.From = new MailAddress("email@gmail.com");
        mail.To.Add("somebody@domain.com");
        mail.Subject = "Hello World";
        mail.Body = "<h1>Hello</h1>";
        mail.IsBodyHtml = true;
        mail.Attachments.Add(new Attachment("C:\\file.zip"));
    
        using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
        {
            smtp.Credentials = new NetworkCredential("email@gmail.com", "password");
            smtp.EnableSsl = true;
            smtp.Send(mail);
        }
    }
    
  • 3

    我希望这段代码能正常工作 . 你可以尝试一下 .

    // Include this.                
    using System.Net.Mail;
    
    string fromAddress = "xyz@gmail.com";
    string mailPassword = "*****";       // Mail id password from where mail will be sent.
    string messageBody = "Write the body of the message here.";
    
    
    // Create smtp connection.
    SmtpClient client = new SmtpClient();
    client.Port = 587;//outgoing port for the mail.
    client.Host = "smtp.gmail.com";
    client.EnableSsl = true;
    client.Timeout = 10000;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.UseDefaultCredentials = false;
    client.Credentials = new System.Net.NetworkCredential(fromAddress, mailPassword);
    
    
    // Fill the mail form.
    var send_mail = new MailMessage();
    
    send_mail.IsBodyHtml = true;
    //address from where mail will be sent.
    send_mail.From = new MailAddress("from@gmail.com");
    //address to which mail will be sent.           
    send_mail.To.Add(new MailAddress("to@example.com");
    //subject of the mail.
    send_mail.Subject = "put any subject here";
    
    send_mail.Body = messageBody;
    client.Send(send_mail);
    
  • 980

    试试这个,

    private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
    
                mail.From = new MailAddress("your_email_address@gmail.com");
                mail.To.Add("to_address");
                mail.Subject = "Test Mail";
                mail.Body = "This is for testing SMTP mail from GMAIL";
    
                SmtpServer.Port = 587;
                SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
                SmtpServer.EnableSsl = true;
    
                SmtpServer.Send(mail);
                MessageBox.Show("mail Send");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    
  • 13

    请务必使用 System.Net.Mail ,而不是已弃用的 System.Web.Mail . 使用 System.Web.Mail 执行SSL是一个混乱的hacky扩展 .

    using System.Net;
    using System.Net.Mail;
    
    var fromAddress = new MailAddress("from@gmail.com", "From Name");
    var toAddress = new MailAddress("to@example.com", "To Name");
    const string fromPassword = "fromPassword";
    const string subject = "Subject";
    const string body = "Body";
    
    var smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
    };
    using (var message = new MailMessage(fromAddress, toAddress)
    {
        Subject = subject,
        Body = body
    })
    {
        smtp.Send(message);
    }
    
  • 8

    SourceSend email in ASP.NET C#

    下面是使用C#发送邮件的示例工作代码,在下面的示例中,我使用的是谷歌的smtp服务器 .

    代码非常自我解释,用您的电子邮件和密码值替换电子邮件和密码 .

    public void SendEmail(string address, string subject, string message)
    {
        string email = "yrshaikh.mail@gmail.com";
        string password = "put-your-GMAIL-password-here";
    
        var loginInfo = new NetworkCredential(email, password);
        var msg = new MailMessage();
        var smtpClient = new SmtpClient("smtp.gmail.com", 587);
    
        msg.From = new MailAddress(email);
        msg.To.Add(new MailAddress(address));
        msg.Subject = subject;
        msg.Body = message;
        msg.IsBodyHtml = true;
    
        smtpClient.EnableSsl = true;
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Credentials = loginInfo;
        smtpClient.Send(msg);
    }
    
  • 1

    一个提示!检查发件人收件箱,也许您需要允许不太安全的应用 . 见:https://www.google.com/settings/security/lesssecureapps

  • 17

    在Gmail / Outlook.com电子邮件中更改发件人:

    为防止欺骗 - Gmail / Outlook.com不允许您从任意用户帐户名发送 .

    如果您的发件人数量有限,则可以按照这些说明操作,然后将 From 字段设置为此地址:Sending mail from a different address

    如果您想要从任意电子邮件地址(例如用户输入电子邮件的网站上的反馈表单,而您不希望他们直接通过电子邮件发送给您)发送关于您可以做的最好的信息:

    msg.ReplyToList.Add(new System.Net.Mail.MailAddress(email, friendlyName));
    

    这样您就可以在电子邮件帐户中点击“回复”,在反馈页面上回复您乐队的粉丝,但他们不会收到您的实际电子邮件,这可能会导致大量的垃圾邮件 .

    如果您处于受控环境中这很好用,但请注意我已经看到一些电子邮件客户端发送到起始地址,即使指定了回复(我不知道哪个) .

  • 2
    using System;
    using System.Net;
    using System.Net.Mail;
    
    namespace SendMailViaGmail
    {
       class Program
       {
       static void Main(string[] args)
       {
    
          //Specify senders gmail address
          string SendersAddress = "Sendersaddress@gmail.com";
          //Specify The Address You want to sent Email To(can be any valid email address)
          string ReceiversAddress = "ReceiversAddress@yahoo.com";
          //Specify The password of gmial account u are using to sent mail(pw of sender@gmail.com)
          const string SendersPassword = "Password";
          //Write the subject of ur mail
          const string subject = "Testing";
          //Write the contents of your mail
          const string body = "Hi This Is my Mail From Gmail";
    
          try
          {
            //we will use Smtp client which allows us to send email using SMTP Protocol
            //i have specified the properties of SmtpClient smtp within{}
            //gmails smtp server name is smtp.gmail.com and port number is 587
            SmtpClient smtp = new SmtpClient
            {
               Host = "smtp.gmail.com",
               Port = 587,
               EnableSsl = true,
               DeliveryMethod = SmtpDeliveryMethod.Network,
               Credentials = new NetworkCredential(SendersAddress, SendersPassword),
               Timeout = 3000
            };
    
            //MailMessage represents a mail message
            //it is 4 parameters(From,TO,subject,body)
    
            MailMessage message = new MailMessage(SendersAddress, ReceiversAddress, subject, body);
            /*WE use smtp sever we specified above to send the message(MailMessage message)*/
    
            smtp.Send(message);
            Console.WriteLine("Message Sent Successfully");
            Console.ReadKey();
         }
         catch (Exception ex)
         {
            Console.WriteLine(ex.Message);
            Console.ReadKey();
         }
    }
    }
    }
    
  • 76

    上述答案不起作用 . 您必须设置 DeliveryMethod = SmtpDeliveryMethod.Network ,否则它将返回“ client was not authenticated ”错误 . 暂停超时总是一个好主意 .

    修改后的代码:

    using System.Net.Mail;
    using System.Net;
    
    var fromAddress = new MailAddress("from@gmail.com", "From Name");
    var toAddress = new MailAddress("to@yahoo.com", "To Name");
    const string fromPassword = "password";
    const string subject = "test";
    const string body = "Hey now!!";
    
    var smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
        Timeout = 20000
    };
    using (var message = new MailMessage(fromAddress, toAddress)
    {
        Subject = subject,
        Body = body
    })
    {
        smtp.Send(message);
    }
    
  • 14

    试试这个

    public static bool Send(string receiverEmail, string ReceiverName, string subject, string body)
    {
            MailMessage mailMessage = new MailMessage();
            MailAddress mailAddress = new MailAddress("abc@gmail.com", "Sender Name"); // abc@gmail.com = input Sender Email Address 
            mailMessage.From = mailAddress;
            mailAddress = new MailAddress(receiverEmail, ReceiverName);
            mailMessage.To.Add(mailAddress);
            mailMessage.Subject = subject;
            mailMessage.Body = body;
            mailMessage.IsBodyHtml = true;
    
            SmtpClient mailSender = new SmtpClient("smtp.gmail.com", 587)
            {
                EnableSsl = true,
                UseDefaultCredentials = false,
                DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
                Credentials = new NetworkCredential("abc@gmail.com", "pass")   // abc@gmail.com = input sender email address  
                                                                               //pass = sender email password
            };
    
            try
            {
                mailSender.Send(mailMessage);
                return true;
            }
            catch (SmtpFailedRecipientException ex)
            { }
            catch (SmtpException ex)
            { }
            finally
            {
                mailSender = null;
                mailMessage.Dispose();
            }
            return false;
    }
    
  • 1

    对我来说问题是我的 password had a blackslash "" ,我复制粘贴而没有意识到它会导致问题 .

  • 3

    another answer复制,上述方法有效但gmail始终用实际的发送gmail帐户替换"from"和"reply to"电子邮件 . 显然有一个工作:

    http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-using-gmail-as.html

    “3.在”帐户“标签中,单击”添加您拥有的其他电子邮件地址“链接,然后验证”

    或者可能this

    更新3:读者Derek Bennett说:“解决方案是进入你的Gmail设置:帐户和”默认“帐户而不是你的Gmail帐户 . 这将导致gmail用默认帐户的电子邮件重新写入”发件人“字段地址是 . “

  • 4

    对于gmail帐户中的其他答案"from a server" first Turn On Access for less secure apps .

    看起来最近谷歌改变了它的安全政策 . 评分最高的答案不再有效,直到您按照此处所述更改帐户设置:https://support.google.com/accounts/answer/6010255?hl=en-GB

    As of March 2016, google changed the setting location again!

  • 3

    包括这个,

    using System.Net.Mail;
    

    然后,

    MailMessage sendmsg = new MailMessage(SendersAddress, ReceiversAddress, subject, body); 
    SmtpClient client = new SmtpClient("smtp.gmail.com");
    
    client.Port = Convert.ToInt16("587");
    client.Credentials = new System.Net.NetworkCredential("mail-id@gmail.com","password");
    client.EnableSsl = true;
    
    client.Send(sendmsg);
    
  • 142

    我有同样的问题,但它通过转到gmail的安全设置和 Allowing Less Secure apps 解决了 . Domenic&Donny的代码可以使用,但前提是你启用了该设置

    如果您已登录(对Google),则可以关注this链接并切换 "Turn on" 以获取 "Access for less secure apps"

相关问题