【问题标题】:Python Can't Send Emails to GmailPython 无法向 Gmail 发送电子邮件
【发布时间】:2018-11-08 16:54:22
【问题描述】:

我有一个 python 脚本来发送电子邮件。我利用它向我的电子邮件和电话发送警报。但由于某种原因,发送到 gmail 帐户时未收到电子邮件。我在我的代码和其他示例之间看到的最大区别是我无法使用 smtp.gmail.com。这是我的电子邮件/文本功能:

import smtplib

sender = 'xxxx@company.com'
smtpObj = smtplib.SMTP('smtp.company.com')

def text_func ( subject,text_message ):
    text_receivers = ['##########@vtext.com',
        'xxxxxxxx@company.com',
        'xxxxxxxx@gmail.com'
    ]
    text_message = """Subject: %s

    %s
    """ % (subject, text_message)

    smtpObj.sendmail(sender, text_receivers, text_message)

上面的代码适用于向我的手机和我的工作电子邮件发送短信,但不适用于 gmail。我检查并确保电子邮件没有出现在垃圾邮件文件夹中。谷歌似乎完全阻止了它。有什么想法吗?

【问题讨论】:

    标签: python python-2.7 email gmail smtplib


    【解决方案1】:

    这可能不正确,因为我对smtplib 的短信方面没有太多经验,但看起来您需要启动 TLS 连接。我会将您的脚本更改为以下内容:

    import smtplib
    
    sender = 'xxxx@company.com'
    smtpObj = smtplib.SMTP('smtp.company.com')
    smtpObj.starttls()
    
    def text_func ( subject,text_message ):
        text_receivers = ['##########@vtext.com',
            'xxxxxxxx@company.com',
            'xxxxxxxx@gmail.com'
        ]
        text_message = """Subject: %s\n\n%s""" % (subject, text_message)
    
    smtpObj.sendmail(sender, text_receivers, text_message)
    

    【讨论】:

    • 当我添加该行时,它会抛出错误。我现在正在尝试解决此问题。 raise SMTPException("服务器不支持 STARTTLS 扩展。") smtplib.SMTPException: 服务器不支持 STARTTLS 扩展。
    • @Rachel 我过去曾遇到过这个问题,请继续尝试不同的事情。
    【解决方案2】:

    我也遇到了同样的问题。当我从 webmail 检查我的收件箱时,我发现这封电子邮件被 gmail 拒绝了。 问题已通过在电子邮件中添加“发件人”标头解决。

    import smtplib, ssl
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    
    sender_email = "test@example.com"
    receiver_email = "example@gmail.com"
    password = "pass1234"
    host = "example.com"
    port = 465
    message = MIMEMultipart("alternative")
    message["Subject"] = "Email Subject"
    message["From"] = sender_email
    message["To"] = receiver_email
    text = "This is the email Body"
    message.attach(MIMEText(text, "plain"))
    context = ssl.create_default_context()
    with smtplib.SMTP_SSL(host, port, context=context) as server:
        server.login(sender_email, password)
        server.sendmail(
            sender_email, receiver_email, message.as_string()
        )
    

    【讨论】:

    • 是的,它对我有用,我使用 cpnael 托管,无法使用我的脚本发送电子邮件,但现在它工作得很好
    【解决方案3】:

    找到了解决办法。

    import smtplib
    from email.mime.text import MIMEText
    
    sender = 'xxxx@company.com'
    smtpObj = smtplib.SMTP('smtp.company.com')
    
    def text_func ( subject,text_message ):
        text_receivers = ['##########@vtext.com',
            'xxxxxxxx@company.com',
            'xxxxxxxx@gmail.com'
        ]
    
        cont = '''\
           <html>
             <head></head>
             <body>
               <p>{0}</p>
             </body>
           </html>
           '''.format(text_message)
    
        msgTo = ""
        for person in text_receivers:
            msgTo += "{0} ".format(person)
    
        msg = MIMEText(cont, 'html')
    
        msg['Subject'] = subject
        msg['From'] = sender
        msg['To'] = msgTo
    
        smtpObj.sendmail(sender, text_receivers, msg.as_string())
    

    【讨论】:

    • 您还应该解释解决方案,而不仅仅是发布代码
    【解决方案4】:

    第 1 步:

    Allowing less secure apps to access your account

    发送电子邮件:

    import smtplib
    
    gmail_user = 'you@gmail.com'  
    gmail_password = 'P@ssword!'
    
    sent_from = gmail_user  
    to = ['me@gmail.com', 'bill@gmail.com']  
    subject = 'OMG Super Important Message'  
    body = 'Hey, what's up?\n\n- You'
    
    email_text = """\  
    From: %s  
    To: %s  
    Subject: %s
    
    %s
    """ % (sent_from, ", ".join(to), subject, body)
    
    try:  
        server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        server.ehlo()
        server.login(gmail_user, gmail_password)
        server.sendmail(sent_from, to, email_text)
        server.close()
    
        print 'Email sent!'
    except:  
        print 'Something went wrong...'
    

    【讨论】:

    • 我不想从 gmail 帐户发送,只想发送到 gmail 帐户。而且我不能使用 smtp.gmail.com,它来自我公司的内部 smtp 网关。
    【解决方案5】:

    您可能需要更改您的 Gmail 设置,以允许不太安全的应用进入您的帐户。请参阅以下来自 Google 帐户专家 Nick 的链接。

    https://support.google.com/accounts/answer/6010255?hl=en

    选项 2:更改您的设置以允许安全性较低的应用进入您的 帐户。我们不推荐此选项,因为它可以使它更容易 有人闯入您的帐户。如果您想允许访问 无论如何,请按照以下步骤操作:转到您的安全性较低的应用程序部分 谷歌帐户。打开允许安全性较低的应用程序。如果你没有看到这个 设置,您的管理员可能已关闭安全性较低的应用 帐户访问权限。

    【讨论】:

    • 好主意,但这并没有解决问题。
    猜你喜欢
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多