A. 6個免費的超清壁紙網站,讓你的電腦桌面不再單調
在手機和電腦的使用過程中,許多用戶傾向於對設備界面進行個性化設置,其中電腦桌面的美化尤為重要。為此,我們精心挑選並推薦以下六個提供超清壁紙的免費網站,讓你的電腦桌面煥然一新,告別單調。
1. 彼岸圖網
彼岸圖網專注於4K超清壁紙的提供,擁有細致的分類系統,用戶可以根據個人喜好輕松找到心儀的壁紙。需要注意的是,用戶需注冊登錄後方可下載壁紙,且每日僅限下載一次。
2. WallpaperHub
WallpaperHub是一個多元化的壁紙集散地,提供多種風格的壁紙集合,包括微軟的流暢設計系列。對於Surface用戶,該網站還提供了專門的解析度選項。壁紙下載無需注冊,且無任何下載限制。
3. 極簡壁紙
盡管名為「極簡」,該網站的壁紙風格更偏向於二次元。它提供了許多年輕用戶喜愛的壁紙,同時也有高解析度的1080p及以上壁紙,甚至是8K壁紙,下載完全免費且無限制。
4. Hippopx
Hippopx是一個遵循CC0協議的免費圖庫網站,壁紙圖片可以用於商業用途。網站圖片質量上乘,適合作為電腦桌面壁紙。此外,它還提供了針對不同設備的自動裁剪功能,方便用戶獲取適合手機和平板電腦的壁紙。下載服務無需注冊,免費且無限制。
5. WallpaperAbyss
WallpaperAbyss是一個以游戲和動漫壁紙為主的網站,分類明確,圖片質量高,用戶可以根據需要選擇不同解析度的壁紙。
6. Wallhaven
Wallhaven提供的壁紙帶有強烈的魔幻風格,適合追求酷炫效果的用戶。網站擁有大量高質量壁紙,並且數量持續增長。喜歡這種風格的用戶可以在此找到滿意的壁紙資源。
B. 求助專業莓友:Hub用pop3方式收郵件的問題
SMTP用於發送郵件,如果要收取郵件呢?
收取郵件就是編寫一個MUA作為客戶端,從MDA把郵件獲取到用戶的電腦或者手機上。收取郵件最常用的協議是POP協議,目前版本號是3,俗稱POP3。
Python內置一個poplib模塊,實現了POP3協議,可以直接用來收郵件。
注意到POP3協議收取的不是一個已經可以閱讀的郵件本身,而是郵件的原始文本,這和SMTP協議很像,SMTP發送的也是經過編碼後的一大段文本。
要把POP3收取的文本變成可以閱讀的郵件,還需要用email模塊提供的各種類來解析原始文本,變成可閱讀的郵件對象。
所以,收取郵件分兩步:
第一步:用poplib把郵件的原始文本下載到本地;
第二部:用email解析原始文本,還原為郵件對象。
通過POP3下載郵件
POP3協議本身很簡單,以下面的代碼為例,我們來獲取最新的一封郵件內容:
import poplib
# 輸入郵件地址, 口令和POP3伺服器地址:
email = raw_input('Email: ')
password = raw_input('Password: ')
pop3_server = raw_input('POP3 server: ')
# 連接到POP3伺服器:
server = poplib.POP3(pop3_server)
# 可以打開或關閉調試信息:
# server.set_debuglevel(1)
# 可選:列印POP3伺服器的歡迎文字:
print(server.getwelcome())
# 身份認證:
server.user(email)
server.pass_(password)
# stat()返回郵件數量和佔用空間:
print('Messages: %s. Size: %s' % server.stat())
# list()返回所有郵件的編號:
resp, mails, octets = server.list()
# 可以查看返回的列表類似['1 82923', '2 2184', ...]
print(mails)
# 獲取最新一封郵件, 注意索引號從1開始:
index = len(mails)
resp, lines, octets = server.retr(index)
# lines存儲了郵件的原始文本的每一行,
# 可以獲得整個郵件的原始文本:
msg_content = '\r\n'.join(lines)
# 稍後解析出郵件:
msg = Parser().parsestr(msg_content)
# 可以根據郵件索引號直接從伺服器刪除郵件:
# server.dele(index)
# 關閉連接:
server.quit()
用POP3獲取郵件其實很簡單,要獲取所有郵件,只需要循環使用retr()把每一封郵件內容拿到即可。真正麻煩的是把郵件的原始內容解析為可以閱讀的郵件對象。
解析郵件
解析郵件的過程和上一節構造郵件正好相反,因此,先導入必要的模塊:
import email
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
只需要一行代碼就可以把郵件內容解析為Message對象:
msg = Parser().parsestr(msg_content)
但是這個Message對象本身可能是一個MIMEMultipart對象,即包含嵌套的其他MIMEBase對象,嵌套可能還不止一層。
所以我們要遞歸地列印出Message對象的層次結構:
# indent用於縮進顯示:
def print_info(msg, indent=0):
if indent == 0:
# 郵件的From, To, Subject存在於根對象上:
for header in ['From', 'To', 'Subject']:
value = msg.get(header, '')
if value:
if header=='Subject':
# 需要解碼Subject字元串:
value = decode_str(value)
else:
# 需要解碼Email地址:
hdr, addr = parseaddr(value)
name = decode_str(hdr)
value = u'%s <%s>' % (name, addr)
print('%s%s: %s' % (' ' * indent, header, value))
if (msg.is_multipart()):
# 如果郵件對象是一個MIMEMultipart,
# get_payload()返回list,包含所有的子對象:
parts = msg.get_payload()
for n, part in enumerate(parts):
print('%spart %s' % (' ' * indent, n))
print('%s--------------------' % (' ' * indent))
# 遞歸列印每一個子對象:
print_info(part, indent + 1)
else:
# 郵件對象不是一個MIMEMultipart,
# 就根據content_type判斷:
content_type = msg.get_content_type()
if content_type=='text/plain' or content_type=='text/html':
# 純文本或HTML內容:
content = msg.get_payload(decode=True)
# 要檢測文本編碼:
charset = guess_charset(msg)
if charset:
content = content.decode(charset)
print('%sText: %s' % (' ' * indent, content + '...'))
else:
# 不是文本,作為附件處理:
print('%sAttachment: %s' % (' ' * indent, content_type))
郵件的Subject或者Email中包含的名字都是經過編碼後的str,要正常顯示,就必須decode:
def decode_str(s):
value, charset = decode_header(s)[0]
if charset:
value = value.decode(charset)
return value
decode_header()返回一個list,因為像Cc、Bcc這樣的欄位可能包含多個郵件地址,所以解析出來的會有多個元素。上面的代碼我們偷了個懶,只取了第一個元素。
文本郵件的內容也是str,還需要檢測編碼,否則,非UTF-8編碼的郵件都無法正常顯示:
def guess_charset(msg):
# 先從msg對象獲取編碼:
charset = msg.get_charset()
if charset is None:
# 如果獲取不到,再從Content-Type欄位獲取:
content_type = msg.get('Content-Type', '').lower()
pos = content_type.find('charset=')
if pos >= 0:
charset = content_type[pos + 8:].strip()
return charset
把上面的代碼整理好,我們就可以來試試收取一封郵件。先往自己的郵箱發一封郵件,然後用瀏覽器登錄郵箱,看看郵件收到沒,如果收到了,我們就來用Python程序把它收到本地:
運行程序,結果如下:
+OK Welcome to coremail Mail Pop3 Server (163coms[...])
Messages: 126. Size: 27228317
From: Test <[email protected]>
To: Python愛好者 <[email protected]>
Subject: 用POP3收取郵件
part 0
--------------------
part 0
--------------------
Text: Python可以使用POP3收取郵件……...
part 1
--------------------
Text: Python可以<a href="...">使用POP3</a>收取郵件……...
part 1
--------------------
Attachment: application/octet-stream
我們從列印的結構可以看出,這封郵件是一個MIMEMultipart,它包含兩部分:第一部分又是一個MIMEMultipart,第二部分是一個附件。而內嵌的MIMEMultipart是一個alternative類型,它包含一個純文本格式的MIMEText和一個HTML格式的MIMEText。
小結
用Python的poplib模塊收取郵件分兩步:第一步是用POP3協議把郵件獲取到本地,第二步是用email模塊把原始郵件解析為Message對象,然後,用適當的形式把郵件內容展示給用戶即可。