使用telnet自动化电子邮件验证

时间:2015-08-31 01:42:33

标签: shell unix smtp telnet

我尝试使用以下脚本验证是否存在电子邮件地址:

telnet gmail-smtp-in.l.google.com 25
helo example.com
mail from: <me@example.com>
rcpt to: <somenonexistinguser@gmail.com>

如果我有一个需要验证的电子邮件地址列表,我怎么能自动完成这个过程?我需要根据返回值(550或220)判断它是否有效,然后退出然后转到下一个电子邮件地址。

2 个答案:

答案 0 :(得分:0)

greet-delaysmulti-line smtp replies这样的SMTP怪癖难以使用telnet自动化。我建议您使用您选择的编程语言中符合RFC的SMTP库,例如python的smtplib。请记住,您需要处理的返回代码多于550和220。例如,4xx代码经常发生(灰名单,overquota,......)

但请注意,这不是验证电子邮件地址的可靠方法。许多服务器在SMTP阶段接受其托管域中的任何地址,然后将其退回。 此外,一些邮政局长认为这些SMTP-Probes是滥用的,可能导致黑名单。

答案 1 :(得分:0)

根据您的用例,您可以通过多种方式进行操作。

尝试使用telnet可能遇到的一些问题是IP地址被阻止,并且响应电子邮件的域不同,响应码也不同。

来自外壳的csv

如果您有csv文件,则可以使用real email之类的服务来自动处理该文件。 例如

while IFS='' read -r line || [[ -n "$line" ]]; do
    echo $line, `curl "https://isitarealemail.com/api/email/validate?email=$line" -H 'Authorization: bearer xxx' | jq .status`;
done < emails-input.csv > emails-output.csv

python函数

如果您拥有自动化的工作流程,则可以通过编程方式调用API,例如,使用经过验证的python函数。

import requests

email_address = "foo@bar.com"
response = requests.get("https://isitarealemail.com/api/email/validate",
    params = {'email': email_address})

response.json()['status']
u'valid'

bulk validations with real email

automated validations using python and real email