所以我用Ubuntu建立了一個GCP虛擬機,我想從那里用python腳本通過我的郵件提供商定期發送報告。smtp埠是587,據我所知,這個埠以前在GCP環境中是關閉的,但現在應該可以使用了。
我的腳本看起來像這樣:
import smtplib,ssl
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import formatdate
from email import encoders
import時間
timestr = time.strftime('(%Y-%m-%d)'/span>)
username='[email protected]'/span>
密碼='secretpw'
send_from = '[email protected]'/span>
send_to = '[email protected]'/span>
body = 'hello'/span>
msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = send_to
msg['Date'] = formatdate(localtime = True)
msg['Subject'] = 'important email'
msg.attach(MIMEText(body, 'plain')
server = smtplib.SMTP('smtp.ioonos.de')
埠 = '587'/span>
smtp = smtplib.SMTP('smtp.ioonos.de')
smtp.ehlo()
smtp.starttls()
smtp.login(username,password)
smtp.sendmail(send_from, send_to.split(', '), msg.as_string()
smtp.quit()
在執行時,機器需要一些時間才會輸出一個超時:
Traceback (most recent call last):
檔案 "test.py", line 25, in <module>
server = smtplib.SMTP('smtp.ioonos.de')
檔案 "/usr/lib/python3.8/smtplib.py", 行255, in __init__
(code, msg) = self.connect(host, port)
檔案 "/usr/lib/python3.8/smtplib.py", 行 339, in connection
self.sock = self._get_socket(host, port, self.timeout)
檔案 "/usr/lib/python3.8/smtplib.py", line 310, in _get_socket
return socket.create_connection((host, port), timeout,
檔案 "/usr/lib/python3.8/socket.py", 行 808, in create_connection
raise err
檔案 "/usr/lib/python3.8/socket.py", line 796, in create_connection
sock.connect(sa)
TimeoutError。[Errno 110] 連接已超時
然而,我可以ping smtp.ionos.de以及telnet smtp.ionos.de 587形成cl,其結果是可以ping和連接。
我還在其他電子郵件提供商(包括gmail)中嘗試了這個方法,結果完全相同。
有誰知道嗎?希望得到幫助,謝謝。
uj5u.com熱心網友回復:
你的代碼有多個問題:
你的代碼有多個問題。
- 連接到服務器兩次。
- 在連接時沒有指定埠號 。
- 沒有創建一個用于加密的 SSL 背景關系 。
在你的代碼中,替換這些行:
server = smtplib.SMTP('smtp.ionos.de')
埠 = '587'/span>
smtp = smtplib.SMTP('smtp.ioonos.de')
smtp.ehlo()
smtp.starttls()
與:
context = ssl.create_default_context()
smtp = smtplib.SMTP('smtp.ionos.de', 587)
smtp.ehlo()
smtp.starttls(context=context)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313413.html
標籤:
上一篇:多樣化的物件的OOP方法
