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

我没有依靠我的主持人发送电子邮件,而是考虑使用我的gmail帐户发送电子邮件。这些电子邮件是给我在节目中演奏的乐队的个性化电子邮件。

有可能做到吗?

643256 次浏览

请务必使用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);}

此外,转到Google帐户>安全性页面并查看登录到Google>两步验证设置。

  • 如果启用了它,那么您必须生成一个密码,允许. NET绕过两步验证。为此,请单击登录Google>应用密码,选择app=Mail和设备=Windows Computer,最后生成密码。在fromPassword常量中使用生成的密码而不是您的标准Gmail密码。
  • 如果它被禁用,那么你必须打开更不安全的应用程序访问,这是不推荐的!所以最好启用两步验证。

上面的答案不起作用。您必须设置DeliveryMethod = SmtpDeliveryMethod.Network,否则它会返回“客户端未通过身份验证”错误。此外,设置超时总是一个好主意。

修订代码:

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);}

这是我的版本:“使用Gmail在C#中发送电子邮件”。

using System;using System.Net;using System.Net.Mail;
namespace SendMailViaGmail{class Program{static void Main(string[] args){
//Specify senders gmail addressstring 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 mailconst string subject = "Testing";//Write the contents of your mailconst 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 587SmtpClient 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();}}}}

这是发送带有附件的电子邮件…简单而简短…

来源: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);
}

来源用C#ASP.NET发送电子邮件

下面是使用C#发送邮件的示例工作代码,在下面的示例中,我使用的是google的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);}

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

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

如果您的发件人数量有限,您可以按照这些说明进行操作,然后将From字段设置为此地址:从不同的地址发送邮件

如果您想从任意电子邮件地址发送(例如网站上的反馈表,用户在其中输入他们的电子邮件,您不希望他们直接向您发送电子邮件),您可以做的最好的事情是:

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

这会让你在你的电子邮件帐户中点击“回复”,在反馈页面上回复你乐队的粉丝,但他们不会收到你的实际电子邮件,这可能会导致成吨的垃圾邮件。

如果您在受控环境中,这很有效,但请注意,我看到一些电子邮件客户端发送到发件人地址,即使指定了回复(我不知道是哪个)。

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

 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;

以下是发送邮件和从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>

包括这个,

using System.Net.Mail;

然后,

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

我希望这段代码能正常工作。你可以试试。

// 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帐户,以便其他应用程序可以访问。这是通过“启用不太安全的应用程序”和使用此链接完成的:https://accounts.google.com/b/0/DisplayUnlockCaptcha

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

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

  • iPhone或iPad上iOS6或以下的邮件应用程序
  • 8.1版本之前Windows手机上的Mail应用程序
  • 一些桌面邮件客户端,如Microsoft Outlook和Mozilla Thunderbird

因此,您必须在您的Google帐户中启用不太安全的登录

登录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的安全设置和允许不太安全的应用程序解决了。Domenic&Donny的代码有效,但前提是您启用了该设置

如果您已登录(Google),您可以按照这个链接并切换“打开”以获得“访问不太安全的应用程序”

使用这种方式

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;

2022年编辑从2022年5月30日开始,谷歌将不再支持使用第三方应用程序或设备,要求您仅使用您的用户名和密码登录您的Google帐户。但您仍然可以通过您的gmail帐户发送电子邮件。

  1. 转到https://myaccount.google.com/security并打开两步骤验证。如果需要,通过电话确认您的帐户。
  2. 单击“应用密码”,就在“2步验证”勾选下方。
  3. 请求邮件应用程序的新密码。输入图片描述

现在只需使用此密码而不是您帐户的原始密码!

public static void SendMail2Step(string SMTPServer, int SMTP_Port, string From, string Password, string To, string Subject, string Body, string[] FileNames) {var smtpClient = new SmtpClient(SMTPServer, SMTP_Port) {DeliveryMethod = SmtpDeliveryMethod.Network,UseDefaultCredentials = false,EnableSsl = true};smtpClient.Credentials = new NetworkCredential(From, Password); //Use the new password, generated from google!var message = new System.Net.Mail.MailMessage(new System.Net.Mail.MailAddress(From, "SendMail2Step"), new System.Net.Mail.MailAddress(To, To));smtpClient.Send(message);}

像这样使用:

SendMail2Step("smtp.gmail.com", 587, "youraccount@gmail.com","yjkjcipfdfkytgqv",//This will be generated by google, copy it here."recipient@barcodes.bg", "test message subject", "Test message body ...", null);

对于其他答案,在gmail帐户中“从服务器”首先为不太安全的应用程序打开Access将于2022年5月30日弃用

看起来最近谷歌改变了它的安全策略。最受好评的答案不再有效,直到您更改帐户设置,如下所述:https://support.google.com/accounts/answer/6010255?hl=en-GB截至2016年3月,谷歌再次更改了设置位置!输入图片描述

using System;using System.Net;using System.Net.Mail;
namespace SendMailViaGmail{class Program{static void Main(string[] args){
//Specify senders gmail addressstring 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 mailconst string subject = "Testing";//Write the contents of your mailconst 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 587SmtpClient 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();}}}}

试试这个吧

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 AddressmailMessage.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){// Write the exception to a Log file.}catch (SmtpException ex){// Write the exception to a Log file.}finally{mailSender = null;mailMessage.Dispose();}return false;}

试试这个,

    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总是用实际发送gmail帐户替换“来自”和“回复”电子邮件。

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

"3.在帐户选项卡中,单击"添加您拥有的另一个电子邮件地址"链接,然后验证它"

也许这个

更新3:读者Derek Bennett说,“解决方案是进入您的gmail设置:帐户并“默认”您的gmail帐户以外的帐户。这将导致gmail用默认帐户的电子邮件地址重写发件人字段。”

您可以尝试Mailkit。它为您提供了更好和更高级的发送邮件功能。您可以从这个中找到更多信息

    MimeMessage message = new MimeMessage();message.From.Add(new MailboxAddress("FromName", "YOU_FROM_ADDRESS@gmail.com"));message.To.Add(new MailboxAddress("ToName", "YOU_TO_ADDRESS@gmail.com"));message.Subject = "MyEmailSubject";
message.Body = new TextPart("plain"){Text = @"MyEmailBodyOnlyTextPart"};
using (var client = new SmtpClient()){client.Connect("SERVER", 25); // 25 is port you can change accordingly
// Note: since we don't have an OAuth2 token, disable// the XOAUTH2 authentication mechanism.client.AuthenticationMechanisms.Remove("XOAUTH2");
// Note: only needed if the SMTP server requires authenticationclient.Authenticate("YOUR_USER_NAME", "YOUR_PASSWORD");
client.Send(message);client.Disconnect(true);}

为了避免Gmail中的安全问题,您应该首先从Gmail设置中生成应用密码,即使您使用两步验证,您也可以使用此密码而不是真实密码来发送电子邮件。

如何为gmail设置特定于应用程序的密码

如果您的Google密码不起作用,您可能需要在Google上为Gmail创建一个特定于应用程序的密码。https://support.google.com/accounts/answer/185833?hl=en

从2022年6月1日起,谷歌增加了一些安全功能

Google不再支持使用第三方应用程序或设备,这些应用程序或设备要求您仅使用您的用户名和密码登录您的Google帐户或直接使用Google帐户的用户名和密码发送邮件。但您仍然可以使用生成应用程序密码通过您的gmail帐户发送电子邮件。

下面是生成新密码的步骤。

  1. 转到https://myaccount.google.com/security
  2. 开启两步骤验证。
  3. 如果需要,通过电话确认您的帐户。
  4. 单击“2步验证”勾选下方的“应用密码”。请求邮件应用程序的新密码。

现在我们必须使用此密码发送邮件,而不是您帐户的原始密码。

下面是发送邮件的示例代码

public static void SendMailFromApp(string SMTPServer, int SMTP_Port, string From, string Password, string To, string Subject, string Body) {var smtpClient = new SmtpClient(SMTPServer, SMTP_Port) {DeliveryMethod = SmtpDeliveryMethod.Network,UseDefaultCredentials = false,EnableSsl = true};smtpClient.Credentials = new NetworkCredential(From, Password); //Use the new password, generated from google!var message = new System.Net.Mail.MailMessage(new System.Net.Mail.MailAddress(From, "SendMail2Step"), new System.Net.Mail.MailAddress(To, To));smtpClient.Send(message);}

您可以像下面这样调用方法

SendMailFromApp("smtp.gmail.com", 25, "mygmailaccount@gmail.com","tyugyyj1556jhghg",//This will be generated by google, copy it here."mailme@gmail.com", "New Mail Subject", "Body of mail from My App");

输入图片描述

Google已从我们的Google帐户中删除了不太安全的应用程序设置,这意味着我们不能再使用实际的Google密码从SMTP服务器发送电子邮件。我们需要使用Xoaut2并授权用户或在启用2fa的帐户上创建应用程序密码。

创建后,可以使用应用程序密码代替您的标准gmail密码。

class Program{private const string To = "test@test.com";private const string From = "test@test.com";    
private const string GoogleAppPassword = "XXXXXXXX";    
private const string Subject = "Test email";private const string Body = "<h1>Hello</h1>";    
    
static void Main(string[] args){Console.WriteLine("Hello World!");        
var smtpClient = new SmtpClient("smtp.gmail.com"){Port = 587,Credentials = new NetworkCredential(From , GoogleAppPassword),EnableSsl = true,};var mailMessage = new MailMessage{From = new MailAddress(From),Subject = Subject,Body = Body,IsBodyHtml = true,};mailMessage.To.Add(To);
smtpClient.Send(mailMessage);}}

快速修复SMTP用户名和密码不被接受的错误