SMTP.starttls() Windows 10 上的超时错误
SMTP.starttls() TimeoutError on Windows 10
今天我尝试发送电子邮件 python:
import smtplib
EMAIL_HOST = 'smtp.google.com'
EMAIL_PORT = 587
EMAIL_FROM_LOGIN = 'sender@gmail.com'
EMAIL_FROM_PASSWORD = 'password'
MESSAGE = 'Hi!'
EMAIL_TO_LOGIN = 'recipient@gmail.com'
print('starting...')
server = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT)
server.starttls()
print('logging...')
server.login(EMAIL_FROM_LOGIN, EMAIL_FROM_PASSWORD)
print('sending message...')
server.sendmail(EMAIL_FROM_LOGIN, EMAIL_TO_LOGIN, MESSAGE)
此脚本不会比 starting...
打印更进一步。我整天都在搜索这个问题,但只找到类似的东西:
"check that port isn't blocked..."
至少我得到了关于 blocked/disabled/etc 的信息。端口,我没有,是问题的细节。
附加信息:根据我之前发现的一些建议,我检查了 telnet smtp.google.com 587
的输出。
输出是静态的 Connecting to smtp.google.com...
。它会保留 2 分钟,然后打印:
Could not open a connection to this host, on port 587: Connection failed
UPD 1
我尝试手动打开端口,其中 python 脚本已 运行,但没有任何变化...
所以,我的问题是:我该怎么办?我在哪里可以找到那些被阻止的端口,如何 unblock/enable 它们?
在您的 gmail 帐户中启用较低的安全性并修复您的 smtp 地址:'smtp.gmail.com':
我的样本:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
mail_content = 'Sample text'
sender_address = 'xxx@xxx'
sender_pass = 'xxxx'
receiver_address = 'xxx@xxx'
message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = 'Test mail'
message.attach(MIMEText(mail_content, 'plain'))
session = smtplib.SMTP('smtp.gmail.com', 587)
session.starttls()
session.login(sender_address, sender_pass)
session.sendmail(sender_address, receiver_address, message.as_string())
session.quit()
print('Mail Sent')
你检查过你的代码了吗?有 smtp.google.com 而不是 smtp.gmail.com.
执行脚本前
- 首先,确保您已通过将要用于在脚本中发送邮件的邮件登录。
- 第二件重要的事情你必须在你的Less Security App or 2-Step Verification.
现在你可以使用下面的Python3代码也
import smtplib as s
obj = s.SMTP("smtp.gmail.com", 587) #smtp server host and port no. 587
obj.starttls() #tls is a way of encryption
obj.login("sender@gmail.com","password")# login credential email and password by which you want to send mail.
subject = "Write your subject" #Subject of mail
message_body = " Hello Dear...\n Write your message here... "
msg = "Subject:{}\n\n{}".format(subject,message_body) # complete mail subject + message body
list_of_address = ["mail1@gmail.com", "mail2@gmail.com", "mail3@yahoo.com", "mail4@outlook.in"]# list of email address
obj.sendmail("sender@gmail.com", list_of_address, msg)
print("Send Successfully...")
obj.quit()
现在来回答你的第二个问题
我该怎么办?我在哪里可以找到那些被阻止的端口,如何 unblock/enable 它们?
取消阻止端口
警告! 打开或取消阻止端口非常危险,就像破坏防火墙一样。
就看你小心了。
您可以尝试解封以下端口
80、433、443、3478、3479、5060、5062、5222、6250 和 12000-65000。
- 转到控制面板->单击系统和安全->单击Windows防火墙->Select高级设置,然后在左侧面板中select入站规则->右侧-点击入站规则然后select新建规则->Select端口->单击下一步。
- Select TCP 作为应用规则的协议。
- Select 特定本地端口,添加以上所有端口,然后单击下一步。
- Select 允许连接.
- 保留 Domain、Private 和 Public 选中以应用规则适用于所有类型的网络。
- 为规则命名点击完成。
希望你的问题得到解决
今天我尝试发送电子邮件 python:
import smtplib
EMAIL_HOST = 'smtp.google.com'
EMAIL_PORT = 587
EMAIL_FROM_LOGIN = 'sender@gmail.com'
EMAIL_FROM_PASSWORD = 'password'
MESSAGE = 'Hi!'
EMAIL_TO_LOGIN = 'recipient@gmail.com'
print('starting...')
server = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT)
server.starttls()
print('logging...')
server.login(EMAIL_FROM_LOGIN, EMAIL_FROM_PASSWORD)
print('sending message...')
server.sendmail(EMAIL_FROM_LOGIN, EMAIL_TO_LOGIN, MESSAGE)
此脚本不会比 starting...
打印更进一步。我整天都在搜索这个问题,但只找到类似的东西:
"check that port isn't blocked..."
至少我得到了关于 blocked/disabled/etc 的信息。端口,我没有,是问题的细节。
附加信息:根据我之前发现的一些建议,我检查了 telnet smtp.google.com 587
的输出。
输出是静态的 Connecting to smtp.google.com...
。它会保留 2 分钟,然后打印:
Could not open a connection to this host, on port 587: Connection failed
UPD 1
我尝试手动打开端口,其中 python 脚本已 运行,但没有任何变化...
所以,我的问题是:我该怎么办?我在哪里可以找到那些被阻止的端口,如何 unblock/enable 它们?
在您的 gmail 帐户中启用较低的安全性并修复您的 smtp 地址:'smtp.gmail.com':
我的样本:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
mail_content = 'Sample text'
sender_address = 'xxx@xxx'
sender_pass = 'xxxx'
receiver_address = 'xxx@xxx'
message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = 'Test mail'
message.attach(MIMEText(mail_content, 'plain'))
session = smtplib.SMTP('smtp.gmail.com', 587)
session.starttls()
session.login(sender_address, sender_pass)
session.sendmail(sender_address, receiver_address, message.as_string())
session.quit()
print('Mail Sent')
你检查过你的代码了吗?有 smtp.google.com 而不是 smtp.gmail.com.
执行脚本前
- 首先,确保您已通过将要用于在脚本中发送邮件的邮件登录。
- 第二件重要的事情你必须在你的Less Security App or 2-Step Verification.
现在你可以使用下面的Python3代码也
import smtplib as s
obj = s.SMTP("smtp.gmail.com", 587) #smtp server host and port no. 587
obj.starttls() #tls is a way of encryption
obj.login("sender@gmail.com","password")# login credential email and password by which you want to send mail.
subject = "Write your subject" #Subject of mail
message_body = " Hello Dear...\n Write your message here... "
msg = "Subject:{}\n\n{}".format(subject,message_body) # complete mail subject + message body
list_of_address = ["mail1@gmail.com", "mail2@gmail.com", "mail3@yahoo.com", "mail4@outlook.in"]# list of email address
obj.sendmail("sender@gmail.com", list_of_address, msg)
print("Send Successfully...")
obj.quit()
现在来回答你的第二个问题 我该怎么办?我在哪里可以找到那些被阻止的端口,如何 unblock/enable 它们?
取消阻止端口
警告! 打开或取消阻止端口非常危险,就像破坏防火墙一样。 就看你小心了。
您可以尝试解封以下端口 80、433、443、3478、3479、5060、5062、5222、6250 和 12000-65000。
- 转到控制面板->单击系统和安全->单击Windows防火墙->Select高级设置,然后在左侧面板中select入站规则->右侧-点击入站规则然后select新建规则->Select端口->单击下一步。
- Select TCP 作为应用规则的协议。
- Select 特定本地端口,添加以上所有端口,然后单击下一步。
- Select 允许连接.
- 保留 Domain、Private 和 Public 选中以应用规则适用于所有类型的网络。
- 为规则命名点击完成。
希望你的问题得到解决