簡體   English   中英

如何使用 smtplib 在 Python 中驗證電子郵件地址

[英]How to Verify an Email Address in Python Using smtplib

我一直在嘗試驗證用戶在我的程序中輸入的電子郵件地址。 我目前擁有的代碼是:

server = smtplib.SMTP()
server.connect()
server.set_debuglevel(True)
try:
    server.verify(email)
except Exception:
    return False
finally:
    server.quit()

但是,當我運行它時,我得到:

ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

所以我要問的是如何使用 smtp 模塊驗證電子郵件地址? 我想檢查電子郵件地址是否確實存在。

這是驗證電子郵件的簡單方法。 這是來自此鏈接的最少修改代碼。 第一部分將檢查電子郵件地址是否格式正確,第二部分將使用該地址 ping SMTP 服務器並查看它是否返回成功代碼 (250)。 話雖如此,這不是故障安全的——取決於這是如何設置的,有時每封電子郵件都會被返回為有效的。 所以你仍然應該發送一封驗證郵件。

email_address = 'example@example.com'

#Step 1: Check email
#Check using Regex that an email meets minimum requirements, throw an error if not
addressToVerify = email_address
match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addressToVerify)

if match == None:
    print('Bad Syntax in ' + addressToVerify)
    raise ValueError('Bad Syntax')

#Step 2: Getting MX record
#Pull domain name from email address
domain_name = email_address.split('@')[1]

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

#Step 3: ping email server
#check if the email address exists

# Get local server hostname
host = socket.gethostname()

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

# SMTP Conversation
server.connect(mxRecord)
server.helo(host)
server.mail('me@domain.com')
code, message = server.rcpt(str(addressToVerify))
server.quit()

# Assume 250 as Success
if code == 250:
    print('Y')
else:
    print('N')

服務器名稱未與端口一起正確定義。 根據您擁有 SMTP 服務器的方式,您可能需要使用登錄功能。

server = smtplib.SMTP(str(SERVER), int(SMTP_PORT))
server.connect()
server.set_debuglevel(True)
try:
    server.verify(email)
except Exception:
    return False
finally:
    server.quit()

您需要在SMTP構造中指定 smtp 主機(服務器)。 這取決於電子郵件域。 例如,對於 gmail 地址,您需要類似gmail-smtp-in.l.google.com

server.verify ,作為 SMTP VRFYserver.verify可能不是您想要的。 大多數服務器禁用它。

你可能想看看像Real Email這樣的服務,它有 python 指南。 如何在 python 中驗證電子郵件地址

暫無
暫無

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

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