通过Gmail在.NET中发送电子邮件
我不是依靠主人发送邮件,而是想通过我的Gmail帐户发送邮件。 电子邮件是个人化的电子邮件,我在我的节目上播放的乐队。 有可能吗?
一定要使用System.Net.Mail
,而不是弃用的System.Web.Mail
。 使用System.Web.Mail
SSL是一件非常糟糕的事情。
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); }
以上的答案是行不通的。 您必须设置DeliveryMethod = SmtpDeliveryMethod.Network
,否则会返回“ 客户端未通过身份validation ”错误。 另外总是一个好主意,超时。
修改后的代码:
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); }
http://www.systemnetmail.com/可能是专门用于;单个 .NET命名空间的最荒谬完整的站点,但是它有一些你可能想知道的通过.NET发送邮件,无论是ASP.NET还是桌面。
http://www.systemwebmail.com/是该文章中的原始URL,但不应用于;.NET 2.0及更高版本。
在Gmail帐户中打开访问安全性较低的应用程序 。
看起来最近谷歌改变了它的安全政策。 最高评分的答案不再有效,除非您按照以下说明更改帐户设置: https : //support.google.com/accounts/answer/6010255?hl = zh_CN
截至2016年3月,谷歌再次改变了设置位置!
这是发送电子邮件与attachement ..简单和短..
来源: 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); }
Google可能会阻止某些未使用现代安全标准的应用或设备进行login尝试。 由于这些应用程序和设备更容易侵入,阻止它们有助于保持您的帐户安全。
一些不支持最新安全标准的应用程序示例包括:
- iOS 6或更低版本的iPhone或iPad上的邮件应用程序
- 8.1版本之前的Windows手机上的邮件应用程序
- 一些桌面邮件客户端,如Microsoft Outlook和Mozilla Thunderbird
因此,您必须在Google帐户中启用安全性较低的login 。
login到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); } }
为了让我的工作,我必须启用我的Gmail帐户,使其他应用程序可以访问。 这是通过以下链接完成的: https : //accounts.google.com/b/0/DisplayUnlockCaptcha
我希望这个代码能正常工作。 你可以试一试。
// 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);
这是我的版本:“ 使用Gmail在C#中发送电子邮件 ”。
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(); } } } }
包括这个,
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);
来源 : 在ASP.NET C#中发送电子邮件
下面是使用C#发送邮件的示例工作代码,在下面的示例中,我使用的是谷歌的smtp服务器。
代码是非常自我解释,用您的电子邮件和密码值replace电子邮件和密码。
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); }
如果您想发送背景电子邮件,请执行以下操作
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;
使用这种方式
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;
一个提示! 检查发件人收件箱,也许你需要允许不太安全的应用程序。 请参阅: https : //www.google.com/settings/security/lesssecureapps
尝试这个,
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()); } }
在Gmail / Outlook.com电子邮件上更改发件人:
为防止欺骗 – Gmail / Outlook.com不会让您从任意的用户帐户名称发送。
如果发件人数量有限,则可以按照这些说明进行操作,然后将“ From
字段设置为该地址: 从其他地址发送邮件
如果你想从一个任意的电子邮件地址发送(如用户input他们的电子邮件的网站上的反馈表,你不希望他们直接发送电子邮件)关于你可以做的最好的是这样的:
msg.ReplyToList.Add(new System.Net.Mail.MailAddress(email, friendlyName));
这可以让你在你的电子邮件帐户中点击“回复”,在回复页面上回复你的乐队粉丝,但是他们不会收到实际的电子邮件,这可能会导致大量的垃圾邮件。
如果你在一个受控的环境中,这个工作很好,但请注意,即使指定了答复(我不知道是哪一个),我也看到有些电子邮件客户端发送到发件人地址。
我遇到了同样的问题,但是通过转到gmail的安全设置和允许安全性较低的应用程序解决了这个问题。 Domenic&Donny的代码工作,但只有当您启用该设置
如果您已login(Google),则可以按照此链接并切换“打开”以进入“访问不太安全的应用程序”
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(); } } } }
以下是一个发送邮件并从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 + "<br/><br/>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>
对我来说问题是我的密码里有一个黑色的“\” ,我粘贴的时候没有意识到会造成问题。
试试这个
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; }