簡體   English   中英

通過 Python 進行 DNS 驗證電子郵件記錄

[英]DNS Verifying email records via Python

首先......請原諒我在 DNS 協議方面的完全菜鳥。

我試圖使用 python 來驗證電子郵件是否存在(使用此代碼作為基礎)

import re
import smtplib
import dns.resolver

# Address used for SMTP MAIL FROM command  
fromAddress = 'corn@bt.com'

# Simple Regex for syntax checking
regex = '^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$'

# Email address to verify
inputAddress = input('Please enter the emailAddress to verify:')
addressToVerify = str(inputAddress)

# Syntax check
match = re.match(regex, addressToVerify)
if match == None:
    print('Bad Syntax')
    raise ValueError('Bad Syntax')

# Get domain for DNS lookup
splitAddress = addressToVerify.split('@')
domain = str(splitAddress[1])
print('Domain:', domain)

# MX record lookup
records = dns.resolver.query(domain, 'MX')
mxRecord = records[0].exchange
mxRecord = str(mxRecord)


# SMTP lib setup (use debug level for full output)
server = smtplib.SMTP()
server.set_debuglevel(0)

# SMTP Conversation
server.connect(mxRecord)
server.helo(server.local_hostname) ### server.local_hostname(Get local server hostname)
server.mail(fromAddress)
code, message = server.rcpt(str(addressToVerify))
server.quit()

#print(code)
#print(message)

# Assume SMTP response 250 is success
if code == 250:
    print('Success')
else:
    print('Bad')

這在 Digitalocean VPS 服務器上運行良好

但是這段代碼在本地機器上不起作用(超時錯誤)。 所以我認為這是一個端口問題,但是我的服務器上沒有打開端口 25。

所以我取了 server.local_hostname 的字符串值(順便說一下,這不是我的域……而且我還沒有配置 STMP ……而且正如我之前提到的,我沒有打開端口25)並在我的本地機器上運行它,我仍然收到超時錯誤。

1)當涉及到 DNS 協議時,我一定不能理解某些東西......有什么想法嗎? 2) 如果 SMTP 服務器之間發生了一些 DNS 協議,是否可以使用代理服務器來驗證電子郵件?

無法驗證電子郵件地址是否存在。

許多服務器將接受發送到任何地址的郵件並從那里丟棄。 許多地址是其他地址的別名。 當然,沒有什么神奇的 DNS 記錄可以告訴您某個特定的電子郵件地址是否存在。 這只是將垃圾郵件從抓取 DNS 記錄的人那里邀請給垃圾郵件的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM