如何从 python 发送电子邮件而无需启用不太安全的应用程序?

Posted

技术标签:

【中文标题】如何从 python 发送电子邮件而无需启用不太安全的应用程序?【英文标题】:How can I send e-mails from python without having to enable less secure apps? 【发布时间】:2020-04-17 08:43:15 【问题描述】:

我在发送电子邮件时遇到了麻烦,而无需启用谷歌安全性较低的应用程序:https://myaccount.google.com/lesssecureapps。如何修改 Python 中的代码,以便无需启用它就可以发送电子邮件?我需要禁用此选项,因为我正在构建一个应用程序,用户可以在其中向开发人员发送反馈电子邮件,因此我不能强制用户启用安全性较低的应用程序。 我的 Python 代码:

    def send_email(self):
        print("send e-mail to developer")
        sender_email = self.email.text
        sender_password = self.password.text
        sender_feedback = self.feedback_message.text
        print("email is: ", type(sender_email))
        print("pass is: ", sender_password)
        print("feedback message is: ", sender_feedback)

        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.starttls()  # encrypt connection
        server.login(sender_email, sender_password)

        subject = 'Feedback'
        msg = sender_feedback

        msg = f"Subject: subject \n\n msg"
        server.sendmail(
            # from,to,message
            sender_email,
            'my_email@gmail.com',
            msg
        )
        print("E-MAIL HAS BEEN SENT!")
        server.quit()

【问题讨论】:

电子邮件被垃圾邮件发送者破坏,基本上不可能做对。您将与垃圾邮件过滤器、退回、拒绝、DKIM 等作斗争。我将设置一个简单的 HTTP 表单 - 从程序发送表单将非常简单。而且您的客户不应该在您的程序中输入他们的电子邮件密码 - 您可能会因此而被禁止使用 GMail。 使用 oauth2 github.com/google/gmail-oauth2-tools/wiki/OAuth2DotPyRunThrough @Tometzky 以及如何使用桌面应用程序中的 HTTP 表单?如果他们不给我发电子邮件,我怎么知道是哪个用户发送了此表单? 为什么 Web 应用程序需要用户帐户凭据才能向您发送电子邮件? @KlausD。用户如何在无需输入凭据的情况下发送反馈?你们还提供什么其他解决方案? 【参考方案1】:

根据POP3/SMTP compatible with 2 factor authentication? - Help - Gmail,您需要使用set up an "app password" 而不是您的常规密码才能在您的Google 帐户启用“两步验证”时使用SMTP 客户端。

【讨论】:

是的,但我不能强制用户设置新密码。我希望反馈更快地发生,我认为设置第二个密码会使用户改变他们对发送反馈的看法...

以上是关于如何从 python 发送电子邮件而无需启用不太安全的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在移动设备上安装android studio创建的应用程序而无需将其连接到系统

如何在 BusyBox 上启用 SSH 而无需重新编译 BusyBox?

我找到了一种使用 Formspree 无需后端即可直接从网站发送电子邮件的方法。但是我不知道如何在提交时自定义消息

多个用户如何在 Node.js 中使用 Gmail 别名发送电子邮件,而无需 Google 开发人员控制台对每个用户进行用户身份验证?

在邮件中嵌入图像而无需物理图像文件

如何使用 Python imaplib 为 IMAP (Gmail) 启用推送通知?