为什么我需要OAuth发送电子邮件给我的客户通过gmail?

1mrurvl1  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(197)

我有基本的遗留asp.net网络应用程序(没有mvc,没有.net核心)
截至2022年5月30日,谷歌已经停止支持不太安全的应用程序。所以现在如果我想发送一封带有mywebapp@gmail.com作为 * 发件人 * 地址的电子邮件,它就不起作用了!
Smtp异常:SMTP服务器要求安全连接或客户端未通过身份验证。服务器响应为:5.7.0需要身份验证。了解更多信息...
我尝试设置apppassword并使用NetworkCredentials发送邮件,它工作正常,但之后我立即引发了Application_OnError事件,并再次引发了上述SmtpException。
一些谷歌搜索说,要解决这个问题,我需要实现OAuth2.0,但这涉及到使用 * 用户的gmail帐户 * 或与此gmail帐户相关的一些权限。
这在我的场景中是无关紧要的。我只想从mywebappgmail帐户发送电子邮件给我的客户,而不是用户的帐户。
那么为什么我的客户(在使用mywebapp时)给予同意从mywebappgmail帐户接收电子邮件?因为他们没有登录凭据。
OAuth2.0与我场景有何关联?
感到困惑。
附带问题:如果您认为apppassword是正确的方法,那么为什么我在成功发送电子邮件 * 之后 * 收到smtpexception?如果需要,可以共享代码

我的smtpClient代码

Public Function SendViaGmail(subject As String, body As String, recipients As String)
    
    Dim fromEmail As String = ConfigurationSettings.AppSettings("ContactEmail")

    Dim smtpClient As Mail.SmtpClient = New Mail.SmtpClient("smtp.gmail.com") With {
        .Port = 587,
        .DeliveryMethod = SmtpDeliveryMethod.Network,
        .Credentials = New NetworkCredential(fromEmail, "APP_PWD"), 
        .EnableSsl = True
        }

    Dim mailMessage As MailMessage = New MailMessage With {
    .From = New Mail.MailAddress(fromEmail),
    .Subject = subject,
    .Body = body,
    .IsBodyHtml = True
}

    mailMessage.[To].Add(recipients)
    If smtpClient IsNot Nothing Then
        smtpClient.Send(mailMessage)
    End If
End Function

我的完整职位相关的是在这里提到

c8ib6hqw

c8ib6hqw1#

为什么我需要OAuth发送电子邮件给我的客户通过gmail?
答:你没有,必要的,这取决于使用情况。
既然谷歌已经移除了安全性较低的应用程序,那么通过smtp服务器发送电子邮件有两种方式。
1.你可以在谷歌账户上启用2FA并创建一个应用程序密码,然后你可以使用之前使用的完全相同的代码,只需将标准用户Gmail密码替换为应用程序密码。
1.第二种选择是使用XOAUT2。
OAuth2.0与我的场景有何关联?
XOauth2是Oauth2的一种形式,它允许应用程序请求用户同意访问他们的私人数据,在这种情况下,他们的Gmail邮件帐户。使用XOauth2来imo将是过度杀死在您的用户情况下,如果您只是连接到您自己的Gmail帐户,那么您真的没有理由使用Xoauth2和授权用户。
附带问题:如果您认为apppassword是正确的方法,那么为什么在电子邮件成功发送后我会收到smtpexception?如果需要,可以共享代码
一个smtpexception对我来说意味着你的代码中有一个错误。
注:工作示例见作者其他问题SmtpClient not working after setting up app password and 2-factor authentication enabled

相关问题