连接错误 SMTP python
Connection Error SMTP python
我已经使用 python 一段时间了,并且过去一直在使用电子邮件功能而没有任何错误,但是在我制作的最新程序中我遇到了这个错误
Traceback (most recent call last):
File "daemon.py", line 62, in <module>
scraper.run()
File "c:\cfsresd\scraper.py", line 48, in run
self.scrape()
File "c:\cfsresd\scraper.py", line 44, in scrape
handler(msg)
File "daemon.py", line 57, in handler
server.ehlo()
File "C:\Python27\lib\smtplib.py", line 385, in ehlo
self.putcmd(self.ehlo_msg, name or self.local_hostname)
File "C:\Python27\lib\smtplib.py", line 318, in putcmd
self.send(str)
File "C:\Python27\lib\smtplib.py", line 310, in send
raise SMTPServerDisconnected('please run connect() first')
smtplib.SMTPServerDisconnected: please run connect() first
我的所有项目都使用相同的电子邮件代码,但这是第一次这样做。我试过添加 connect() 但这没有任何区别。下面是我的脚本的电子邮件部分
msg = MIMEText ('%s - %s' % (msg.text, msg.channel))
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
msg['Subject'] = "msg.channel"
msg['From'] = ('removed')
msg['To'] = ('removed')
server.login('user','password')
server.sendmail(msg.get('From'),msg["To"],msg.as_string())
server.close()
server.ehlo()
server.quit()
print 'sent'
欢迎任何帮助
毛茸茸的
尝试使用 SMTP 的空构造函数,然后调用 connect(host, port)
:
server = smtplib.SMTP()
server.connect('smtp.gmail.com', '587')
server.ehlo()
server.starttls()
server.login(username, password)
您在 close
之后有一个 ehlo
。这似乎不太可能成功。此外,quit
执行 close
,因此您可以在接近尾声时摆脱 ehlo
和 close
调用
您仍然可以使用 SMTP_SSL class 与 smtp 服务器建立加密连接,而无需调用 starttls(更短)。您不需要每次都调用 ehlo,它会在需要时自动完成,并且当连接到默认端口时,创建实例时不必提供一个 SMTP* classes.
msg = MIMEText ('%s - %s' % (msg.text, msg.channel))
msg['To'] = ','.join(receivers)
msg['Subject'] = 'msg.channel'
msg['From'] = 'someone@somedomain.com'
将 SMTP 与 starttls 一起使用:
server = smtplib.SMTP('smtp.gmail.com')
server.starttls()
server.login('user', 'password')
server.sendmail(msg['From'], receivers, msg.as_string())
现在 SMTP_SSL class
server = smtplib.SMTP_SSL('smtp.gmail.com')
server.login('user', 'password')
server.sendmail(msg['From'], receivers, msg.as_string())
最后
server.quit()
all sorted 有了一些想法并尝试了下面的代码
msg = MIMEText ('%s - %s' % (msg.text, msg.channel))
server = smtplib.SMTP('smtp.gmail.com')
server.starttls()
server.login('user','pass')
msg['Subject'] = "msg.channel"
msg['From'] = ('from')
msg['To'] = ('to')
server.sendmail(msg.get('From'),msg["To"],msg.as_string())
server.quit()
所以我删除了 ehlo()、close() 和端口号。现在我必须练习如何将主题更改为 msg.channel,以便每次都更改。
谢谢大家
我是 yagmail
的维护者,这个软件包应该可以让发送电子邮件变得非常容易。
import yagmail
yag = yagmail.SMTP('user','password')
yag.send(to = 'to@gmail.com', subject = 'msg.channel')
当yag
离开作用域时,它会自动关闭。
我还建议您在密钥环中注册一次,这样您就不必在脚本中编写密码了。只需 运行 一次:
yagmail.register('user', 'password')
然后您可以将其缩短为:
SMTP().send('to@gmail.com', 'msg.channel')
您可以使用 pip 或 pip3 安装它(对于 Python 3)。您还可以 read more about it,具有轻松添加附件、内联 images/html、别名等功能
对于 Python 3.6.*
注意:在 gmail 中,只有关闭两步验证才能使用。允许通过低安全应用程序打开 gmail。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from_addr = 'sender-email-id'
to_addr = 'receiver-email-id'
text = 'Hi Friend!!!'
username = 'sender-username'
password = 'password'
msg = MIMEMultipart()
msg['From'] = from_addr
msg['To'] = to_addr
msg['Subject'] = 'Test Mail'
msg.attach(MIMEText(text))
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)
server.sendmail(from_addr,to_addr,msg.as_string())
server.quit()
当我尝试从 Celery(作为 Docker 容器)发送电子邮件时,我遇到了类似的问题。我将 env_file 添加到 worker 并在 docker compose 文件中击败容器。
env_file: ./env/dev/.env
在该文件中我有一个电子邮件配置。
EMAIL_HOST=smtp.gmail.com
EMAIL_HOST_USER=your_mail
EMAIL_HOST_PASSWORD=your_password
EMAIL_PORT=587
我通过删除这一行解决了这个错误:
server.quit()
raise SMTPServerDisconnected('please run connect() first')
如果你有这个错误,我想安装这个:
pip install django-smtp-ssl
这个安装smtp库和ssl协议
它非常适合我
我已经使用 python 一段时间了,并且过去一直在使用电子邮件功能而没有任何错误,但是在我制作的最新程序中我遇到了这个错误
Traceback (most recent call last):
File "daemon.py", line 62, in <module>
scraper.run()
File "c:\cfsresd\scraper.py", line 48, in run
self.scrape()
File "c:\cfsresd\scraper.py", line 44, in scrape
handler(msg)
File "daemon.py", line 57, in handler
server.ehlo()
File "C:\Python27\lib\smtplib.py", line 385, in ehlo
self.putcmd(self.ehlo_msg, name or self.local_hostname)
File "C:\Python27\lib\smtplib.py", line 318, in putcmd
self.send(str)
File "C:\Python27\lib\smtplib.py", line 310, in send
raise SMTPServerDisconnected('please run connect() first')
smtplib.SMTPServerDisconnected: please run connect() first
我的所有项目都使用相同的电子邮件代码,但这是第一次这样做。我试过添加 connect() 但这没有任何区别。下面是我的脚本的电子邮件部分
msg = MIMEText ('%s - %s' % (msg.text, msg.channel))
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
msg['Subject'] = "msg.channel"
msg['From'] = ('removed')
msg['To'] = ('removed')
server.login('user','password')
server.sendmail(msg.get('From'),msg["To"],msg.as_string())
server.close()
server.ehlo()
server.quit()
print 'sent'
欢迎任何帮助
毛茸茸的
尝试使用 SMTP 的空构造函数,然后调用 connect(host, port)
:
server = smtplib.SMTP()
server.connect('smtp.gmail.com', '587')
server.ehlo()
server.starttls()
server.login(username, password)
您在 close
之后有一个 ehlo
。这似乎不太可能成功。此外,quit
执行 close
,因此您可以在接近尾声时摆脱 ehlo
和 close
调用
您仍然可以使用 SMTP_SSL class 与 smtp 服务器建立加密连接,而无需调用 starttls(更短)。您不需要每次都调用 ehlo,它会在需要时自动完成,并且当连接到默认端口时,创建实例时不必提供一个 SMTP* classes.
msg = MIMEText ('%s - %s' % (msg.text, msg.channel))
msg['To'] = ','.join(receivers)
msg['Subject'] = 'msg.channel'
msg['From'] = 'someone@somedomain.com'
将 SMTP 与 starttls 一起使用:
server = smtplib.SMTP('smtp.gmail.com')
server.starttls()
server.login('user', 'password')
server.sendmail(msg['From'], receivers, msg.as_string())
现在 SMTP_SSL class
server = smtplib.SMTP_SSL('smtp.gmail.com')
server.login('user', 'password')
server.sendmail(msg['From'], receivers, msg.as_string())
最后
server.quit()
all sorted 有了一些想法并尝试了下面的代码
msg = MIMEText ('%s - %s' % (msg.text, msg.channel))
server = smtplib.SMTP('smtp.gmail.com')
server.starttls()
server.login('user','pass')
msg['Subject'] = "msg.channel"
msg['From'] = ('from')
msg['To'] = ('to')
server.sendmail(msg.get('From'),msg["To"],msg.as_string())
server.quit()
所以我删除了 ehlo()、close() 和端口号。现在我必须练习如何将主题更改为 msg.channel,以便每次都更改。
谢谢大家
我是 yagmail
的维护者,这个软件包应该可以让发送电子邮件变得非常容易。
import yagmail
yag = yagmail.SMTP('user','password')
yag.send(to = 'to@gmail.com', subject = 'msg.channel')
当yag
离开作用域时,它会自动关闭。
我还建议您在密钥环中注册一次,这样您就不必在脚本中编写密码了。只需 运行 一次:
yagmail.register('user', 'password')
然后您可以将其缩短为:
SMTP().send('to@gmail.com', 'msg.channel')
您可以使用 pip 或 pip3 安装它(对于 Python 3)。您还可以 read more about it,具有轻松添加附件、内联 images/html、别名等功能
对于 Python 3.6.*
注意:在 gmail 中,只有关闭两步验证才能使用。允许通过低安全应用程序打开 gmail。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from_addr = 'sender-email-id'
to_addr = 'receiver-email-id'
text = 'Hi Friend!!!'
username = 'sender-username'
password = 'password'
msg = MIMEMultipart()
msg['From'] = from_addr
msg['To'] = to_addr
msg['Subject'] = 'Test Mail'
msg.attach(MIMEText(text))
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)
server.sendmail(from_addr,to_addr,msg.as_string())
server.quit()
当我尝试从 Celery(作为 Docker 容器)发送电子邮件时,我遇到了类似的问题。我将 env_file 添加到 worker 并在 docker compose 文件中击败容器。
env_file: ./env/dev/.env
在该文件中我有一个电子邮件配置。
EMAIL_HOST=smtp.gmail.com
EMAIL_HOST_USER=your_mail
EMAIL_HOST_PASSWORD=your_password
EMAIL_PORT=587
我通过删除这一行解决了这个错误:
server.quit()
raise SMTPServerDisconnected('please run connect() first')
如果你有这个错误,我想安装这个:
pip install django-smtp-ssl
这个安装smtp库和ssl协议
它非常适合我