凭据有问题 (google smtp)

Having trouble with credentials (google smtp)

我是一个非常新手 Python 编码员所以请不要对我太苛刻,谢谢。

我正在尝试使用 smtplib 创建一个电子邮件程序,但我在将用户凭据交给 Google 时遇到了问题。

完整代码:

mailcheck = input("This mailer is only for gmail, want to continue? (yes or no)")

# GMAIL SMTP INFORMATION
if mailcheck == "yes" or mailcheck == "Yes" or mailcheck == "y":
    smtp_server = 'smtp.gmail.com'
    port = 587
    set_server = "gmail"
else:
    print("Hey, sorry this program is only for Gmail")

#USER CREDENTIALS + RECEIVER

username = input("Google Email?")
password = input("Password?")
receiver = input("Who to send it to?")
subject = input("Subject of the email?")
econtents = input("What to put in the email?")
amount = input("Amount of emails to send?")

credentials = username + password
global d1
global d2

try:
    server = smtplib.SMTP(smtp_server, port)
    server.ehlo()

    server.starttls()
    server.login(username, password)

    print("Sending" + amount, "to", receiver)

    for i in range(1, int(amount) + 1):
        message = "From" + credentials[0] + '\nSubject' + subject + '\n' + econtents
        time.sleep(random.uniform(d1, d2))
        server.sendmail(credentials[0], receiver, message)
        print("\nEmail Sent!")

    else:
        print("Finished sending emails")

except smtplib.SMTPRecipientsRefused:
        print("Recipient refused. Invalid email address?")

except smtplib.SMTPAuthenticationError:
        print("Unable to authenticate with server. Ensure the details are correct.")

except smtplib.SMTPServerDisconnected:
        print("Server disconnected for an unknown reason.")

except smtplib.SMTPConnectError:
        print("Unable to connect to server.")

错误:

Unable to authenticate with server. Ensure the details are correct.

这意味着登录过程出错了。应该是这部分哪里出错了:

 #USER CREDENTIALS + RECEIVER

username = input("Google Email?")
password = input("Password?")
receiver = input("Who to send it to?")
subject = input("Subject of the email?")
econtents = input("What to put in the email?")
amount = input("Amount of emails to send?")

credentials = username + password
global d1
global d2

try:
    server = smtplib.SMTP(smtp_server, port)
    server.ehlo()

    server.starttls()
    server.login(username, password)

    print("Sending" + amount, "to", receiver)

    for i in range(1, int(amount) + 1):
        message = "From" + credentials[0] + '\nSubject' + subject + '\n' + econtents
        time.sleep(random.uniform(d1, d2))
        server.sendmail(credentials[0], receiver, message)
        print("\nEmail Sent!")

我认为这是因为 credentials = username + password 不起作用,但我不知道如何修复它。

如果有人知道我必须更改什么才能解决此问题,那就太好了!

不是将这两个字符串相加,而是将它们放在一个数组中。在 Python 中,可以是

credentials = [username, password]

credentials = list(username, password)

但这似乎不是你的问题。当您收到 SMTPAuthenticationError 异常时,您的问题与 login() 函数有关。 smtplib 文档说在 运行ning .starttls() 之后,您应该再次 运行.ehlo()。在登录之前尝试 运行。此外,您可以尝试在端口 465 上生成一个 SSL 实例。

(Ctrl+F 用于 .starttls())

https://docs.python.org/2/library/smtplib.html