出于某种原因,既不是接受的答案,也没有其他工作为我“通过Gmail在。net发送电子邮件”。为什么它们不会起作用?
更新:我已经在另一个问题中尝试了所有的答案(接受的和其他的),但没有一个有效。
我只是想知道它是否适用于其他人,否则谷歌可能已经改变了一些东西(以前发生过)。
当我尝试使用SmtpDeliveryMethod的代码段时。网络,我很快收到一个SmtpException发送(消息)。信息是
SMTP服务器需要安全连接,否则客户端未经过身份验证。
服务器的回复是:
5.5.1认证要求在“<——说真的,它到此结束。
更新:
这是我很久以前问过的一个问题,公认的答案是我在不同的项目中使用过很多很多次的代码。
我采用了这篇文章和其他EmailSender项目中的一些想法,在Codeplex上创建了一个EmailSender项目。它是为可测试性而设计的,支持我最喜欢的SMTP服务,如GoDaddy和Gmail。
@Andres Pompiglio:是的,你必须至少修改一次密码。
这个代码工作得很好:
//Satrt Send Email Function
public string SendMail(string toList, string from, string ccList,
string subject, string body)
{
MailMessage message = new MailMessage();
SmtpClient smtpClient = new SmtpClient();
string msg = string.Empty;
try
{
MailAddress fromAddress = new MailAddress(from);
message.From = fromAddress;
message.To.Add(toList);
if (ccList != null && ccList != string.Empty)
message.CC.Add(ccList);
message.Subject = subject;
message.IsBodyHtml = true;
message.Body = body;
// We use gmail as our smtp client
smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = true;
smtpClient.Credentials = new System.Net.NetworkCredential(
"Your Gmail User Name", "Your Gmail Password");
smtpClient.Send(message);
msg = "Successful<BR>";
}
catch (Exception ex)
{
msg = ex.Message;
}
return msg;
}
//End Send Email Function
并且你可以使用以下方法调用函数:
Response.Write(SendMail(recipient Address, "UserName@gmail.com", "ccList if any", "subject", "body"))
我从我的gmail帐户发送电子邮件也遇到了一些问题,这是由于上述几种情况。
以下是我如何让它工作的总结,同时保持它的灵活性:
首先,建立你的GMail账户:
启用IMAP并断言正确的最大消息数(可以在这里执行)
确保你的密码至少有7个字符,并且是强密码(根据谷歌)
确保你不需要先输入验证码。您可以通过从浏览器发送测试电子邮件来做到这一点。
在web中进行更改。config(或app.config,我还没有尝试过,但我认为它也很容易让它在windows应用程序中工作):
<configuration>
<appSettings>
<add key="EnableSSLOnMail" value="True"/>
</appSettings>
<!-- other settings -->
...
<!-- system.net settings -->
<system.net>
<mailSettings>
<smtp from="yourusername@gmail.com" deliveryMethod="Network">
<network
defaultCredentials="false"
host="smtp.gmail.com"
port="587"
password="stR0ngPassW0rd"
userName="yourusername@gmail.com"
/>
<!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
</smtp>
</mailSettings>
</system.net>
</configuration>
Add a Class to your project:
Imports System.Net.Mail
Public Class SSLMail
Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs)
GetSmtpClient.Send(e.Message)
'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too:
e.Cancel = True
End Sub
Public Shared Sub SendMail(ByVal Msg As MailMessage)
GetSmtpClient.Send(Msg)
End Sub
Public Shared Function GetSmtpClient() As SmtpClient
Dim smtp As New Net.Mail.SmtpClient
'Read EnableSSL setting from web.config
smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail"))
Return smtp
End Function
End Class
现在,无论何时想要发送电子邮件,都需要调用SSLMail。发送邮件:
例如,在带有PasswordRecovery控件的Page中:
Partial Class RecoverPassword
Inherits System.Web.UI.Page
Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail
e.Message.Bcc.Add("webmaster@example.com")
SSLMail.SendMail(e)
End Sub
End Class
或者在代码的任何地方都可以调用:
SSLMail.SendMail(New system.Net.Mail.MailMessage("from@from.com","to@to.com", "Subject", "Body"})
我希望这能帮助任何遇到这篇文章的人!(我用的是VB。NET,但是我认为把它转换成任何。NET语言都很简单。)
Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername@gmail.com", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("myusername@gmail.com","yourusername@gmail.com","test","testbody")
如果您得到诸如“SMTP服务器需要安全连接或客户端未经过身份验证。服务器的响应是:5.5.1需要身份验证。要了解更多信息,请访问“在此之前,确保行SMTPClientObj。UseDefaultCredentials = False,这一行应该在smtpclientb . credentials之前。
我确实尝试将这两行反向切换,并返回5.5.1 Authentication Required错误。