Method code for $smtp.verify_email_address()

[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

Tlon