出于某种原因,既不是接受的答案,也没有其他工作为我“通过Gmail在。net发送电子邮件”。为什么它们不会起作用?

更新:我已经在另一个问题中尝试了所有的答案(接受的和其他的),但没有一个有效。

我只是想知道它是否适用于其他人,否则谷歌可能已经改变了一些东西(以前发生过)。

当我尝试使用SmtpDeliveryMethod的代码段时。网络,我很快收到一个SmtpException发送(消息)。信息是

SMTP服务器需要安全连接,否则客户端未经过身份验证。

服务器的回复是:

5.5.1认证要求在“<——说真的,它到此结束。

更新:

这是我很久以前问过的一个问题,公认的答案是我在不同的项目中使用过很多很多次的代码。

我采用了这篇文章和其他EmailSender项目中的一些想法,在Codeplex上创建了一个EmailSender项目。它是为可测试性而设计的,支持我最喜欢的SMTP服务,如GoDaddy和Gmail。


当前回答

我不确定这需要哪个.NET版本,因为eglasius提到没有匹配的enableSsl设置(我使用。net 4.0,但我怀疑它可以在。net 2.0或更高版本中工作),但这个配置只是为我工作(并且不需要您使用任何编程配置):

<system.net>
  <mailSettings>
    <smtp from="myusername@gmail.com" deliveryMethod="Network">
      <network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="myusername@gmail.com"/>
    </smtp>
  </mailSettings>
</system.net>

您可能需要先在Gmail帐户上启用POP或IMAP: https://mail.google.com/mail/?shva=1#settings/fwdandpop

我建议先用普通的邮件客户端尝试一下…

其他回答

这是另一个可能的解决方案。我有类似的问题连接到gmail通过IMAP。在尝试了我遇到的所有解决方案之后,你将在这里和其他地方读到SO(例如。启用IMAP,启用不太安全的邮件访问,使用https://accounts.google.com/b/0/displayunlockcaptcha等),我实际上又建立了一个新的gmail帐户。

在我最初的测试中,也就是我创建的第一个gmail帐户中,我已经连接到我的gmail主帐户。这导致了不稳定的行为,其中错误的帐户被谷歌引用。例如,运行https://accounts.google.com/b/0/displayunlockcaptcha打开了我的主帐户,而不是我为此目的而创建的帐户。

因此,当我创建了一个新帐户,并没有将它连接到我的主帐户,在遵循上述所有适当的步骤后,我发现它工作得很好!

我还没有证实这一点。转载),但它显然为我做到了……希望能有所帮助。

打开访问不太安全的应用程序,它将为所有不需要的工作 修改密码。

链接到Gmail设置

谷歌不再允许“不太安全的应用程序”,所以这对普通gmail用户来说是不可能的。

https://support.google.com/accounts/answer/6010255?hl=en#zippy=%2Cif-less-secure-app-access-is-on-for-your-account

从谷歌:

为了保证您的账户安全,从2022年5月30日起,谷歌号 long支持使用第三方应用程序或设备来询问您 仅使用您的用户名和登录您的谷歌帐户 密码。 重要提示:此截止日期不适用于谷歌工作区或谷歌工作区 云身份客户。这些客户的执行日期 将于晚些时候在工作空间博客上公布。 欲了解更多信息,请继续阅读。

为您的帐户打开不太安全的应用程序:https://www.google.com/settings/security/lesssecureapps

我从我的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语言都很简单。)