如何在Python中解决AttributeError: SMTP_SSL实例没有属性'__exit__'的问题?

4

请问有没有人能帮助我解决这个错误:AttributeError: SMTP_SSL实例没有属性'exit'。

我正在使用Python编写一个小模块来发送多个电子邮件。 Python版本:2.7.15 操作系统:MacOS X

import smtplib
import ssl
port = 465  # For SSL
smtp_server = "smtp.gmail.com"
sender_email = "abc@gmail.com"  # type: str # Enter your address
receiver_email = "xyz@gmail.com"  # Enter receiver address
password = 'xyz@0101'
message = """\
Subject: Hi there

This message is sent from Python."""

context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, port, context ) as server:
    server.login(sender_email, password)
    server.sendmail(sender_email, message, receiver_email)
4个回答

10

在Python3.3中增加了对使用smtplib.SMTP_SSLwith语句的支持,因此在Python2.7中无法工作。

像这样做应该可以:

context = ssl.create_default_context()
server = smtplib.SMTP_SSL(smtp_server, port, context )
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)
server.quit()

1

对我而言,当我在前面输入 python3 时它有效。例如:python3 /home/pi/yourscript.py


0

很抱歉您遇到了错误。

您遇到错误的原因是,您机器上运行的Python版本与代码编写的Python版本不同。

您正在运行Python2,而代码是Python。

以下是您可以进行的一些更改:

  1. 将每个“server”更改为“mailServer”(注意大小写)

  2. 将“smtp_server”更改为“smtpServer”(注意大小写)

  3. 在带有with语句的那一行中,删除“with”和“as”关键字。重写如下:

mailServer = smtplib.SMTP_SSL(smtpServer, port)


以下是您的代码应该如何看起来:import smtplib, sslport = 465 # 用于SSL smtpServer = "smtp.gmail.com"sender_email = "abc@gmail.com" # 输入您的地址receiver_email = "xyz@gmail.com" # 输入接收者地址password = "your-password"message = """
Subject: Hi thereThis message is sent from Python."""context = ssl.create_default_context() mailServer = smtplib.SMTP_SSL(smtpServer, port ) mailServer.login(sender_email, password) mailServer.sendmail(sender_email, receiver_email, message) print(" \n Sent!") mailServer.quit()
- O'mato SureWeapon

-3

移除服务器定义中的上下文,它将与Python 2.7一起工作

context=ssl.create_default_context() server=smtplib.SMTP_SSL(smtp_server,port, context=context) server.login(sender,password) print('它工作了!') server.sendmail(sender,reciever,message) print('邮件已发送') server.quit()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接