[Turn on line numbering]arg address; var c, lines, code, email, name, m; if (!(| .perms(caller(), 'trusts) |)) (> .perms(sender(), 'trusts) <); // connect address = (> .parse_email_address(address, 'resolv_host) <); c = (> .connect_to_smtp_host(address[3], address[2]) <); // VRFY enabled? catch ~error { [code, lines] = (> .VRFY(c, address[1]) <); if (code == 250) { .QUIT(c); .close_session(c); // munch on it a little if ((m = regexp(lines[1], "^([^<]+)<([^>]+)>"))) { [name, email] = m; } else if ((m = regexp(lines[1], "<([^>]+)>"))) { email = m[1]; name = strsed(lines[1], " *<[^>]+> *", ""); } else { [email, (name ?= "")] = lines; } return [email.trim(), name.trim()]; } } // nope, try RCPT.. catch any { (> .MAIL_FROM(c, $smtp.get_email_address('postmaster)) <); [code, lines] = (> .RCPT_TO(c, address[1]) <); .QUIT(c); .close_session(c); if ((m = regexp(lines[1], "<([^>]+)>"))) email = m[1]; else email = lines[1]; return [email.trim()]; } with { .QUIT(c); .close_session(c); rethrow(error()); }
// Created 13-Oct-1996 as a part of ColdCore, see: @help Credit