错误 SMTP 无法从 gmail 发送电子邮件
Posted
技术标签:
【中文标题】错误 SMTP 无法从 gmail 发送电子邮件【英文标题】:Error SMTP can't send an email from gmail 【发布时间】:2022-01-21 02:55:23 【问题描述】:我目前正在尝试使用 smtp
将电子邮件从我的 gmail 发送到另一个雅虎电子邮件地址。我从我的 Gmail 帐户启用了不太安全的应用程序。我也通过了 Gmail Captcha。我也尝试添加一个端口号(587、2525),但没有成功。我无法让代码工作。我在这里发布了我的代码,然后是错误消息。
奇怪的是,几个月前这对我有用!
import requests
from bs4 import BeautifulSoup
# import lxml
import smtplib
my_email = "MY_EMAIL@gmail.com"
password = "MY_PASSWORD"
URL = "https://www.amazon.com/Instant-Pot-Plus-60-Programmable/dp/B01NBKTPTS/ref=sr_1_1_sspa?crid=34PO9PKK0CUSX" \
"&keywords=instant%2Bpot&qid=1639842722&sprefix=instant%2Caps%2C76&sr=8-1-spons&spLa=ZW5jcnlwdGVkUXVhbGlmaWV" \
"yPUEyUlM1TDQ5N0RQS1VXJmVuY3J5cHRlZElkPUEwNzc4NTk5M0c2VVhTVlE1Q1lBTyZlbmNyeXB0ZWRBZElkPUEwMjE0NzMyNUlTVUg0V1" \
"BYQTZWJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ&th=1 "
TARGET_PRICE = 200
headers =
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/84.0.4147.125 Safari/537.36",
"Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8"
response = requests.get(URL, headers=headers)
website_html = response.text
print(response.status_code)
soup = BeautifulSoup(website_html, "lxml")
price = float(soup.find(id="attach-base-product-price").attrs["value"])
title = soup.find(id="productTitle").get_text()
# sending a notification email
if price <= TARGET_PRICE:
message = f"title is now price"
with smtplib.SMTP("smtp.gmail.com") as connection:
connection.starttls()
result = connection.login(my_email, password)
connection.sendmail(
from_addr=my_email,
to_addrs="SOME_EMAIL@yahoo.com",
msg=f"Subject:Amazon Price Alert!\n\nmessage\nURL"
)
print("done")
错误信息
Traceback (most recent call last):
File "/Users/Charaf/PycharmProjects/Intermediate+/AmazonPriceTracker/main.py", line 45, in <module>
with smtplib.SMTP("smtp.gmail.com") as connection:
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/smtplib.py", line 341, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/smtplib.py", line 312, in _get_socket
return socket.create_connection((host, port), timeout,
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/socket.py", line 843, in create_connection
raise err
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/socket.py", line 831, in create_connection
sock.connect(sa)
TimeoutError: [Errno 60] Operation timed out
【问题讨论】:
【参考方案1】:您是否尝试过使用 Google 应用密码 (https://support.google.com/accounts/answer/185833?hl=en)?我刚刚用我的亚马逊价格检查器对其进行了测试,该检查器非常相似,并且可以在我的 Google 应用密码上运行。
不过这是我通常用来发送邮件的方式-
def Send_Mail(email,password,remail): #Function for sending a mail to the user
server = smtplib.SMTP('smtp.gmail.com',587)
server.ehlo()
server.starttls()
server.ehlo()
server.login(email,password)
body = f"Price Fell Down\n\nCheck -url"
server.sendmail(email,remail,body)
【讨论】:
不幸的是,我用这种方法得到了同样的错误!【参考方案2】:Gmail 默认使用隐式 TLS 连接 (SSL)。
这意味着您不会升级与 starttls()
的 Gmail 连接。相反,您连接到不同的端口; ssl 端口465
。
删除:
server.starttls()
server.ehlo()
..并且只保留一个server.ehlo()
,当然连接到端口465
。
在下面的列表中,您的代码应该适用于 Gmail 和 Rackspace 以外的任何服务。
GMAIL.COM - 隐式 TLS 连接 (SSL) RACKSPACE.COM - 隐式 TLS 连接 (SSL) MAILTRAP.COM - 显式 TLS 连接 (STARTTLS) iCLOUD.COM - 显式 TLS 连接 (STARTTLS) 展望 - 显式 TLS 连接 (STARTTLS) OUTLOOK.COM - 显式 TLS 连接 (STARTTLS) YAHOO.COM - 显式 TLS 连接 (STARTTLS) MAIL.COM - 显式 TLS 连接 (STARTTLS) AOL.COM - 显式 TLS 连接 (STARTTLS) COMCAST.NET - 显式 TLS 连接 (STARTTLS)【讨论】:
以上是关于错误 SMTP 无法从 gmail 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
无法在 codeigniter 中从 gmail 发送电子邮件,SMTP 身份验证错误
为什么我无法从我在GCP中托管的应用使用Gmail SMTP发送电子邮件?
无法从 Laravel 应用程序发送电子邮件:无法与主机 smtp.gmail.com 建立连接 [连接超时 #110]
无法使用smtp.gmail.com从一个特定的Google帐户发送邮件