Method code for $smtp.verify_email_address()

[Turn off line numbering]
  1: arg address;
  2: var c, lines, code, email, name, m;
  3: 
  4: if (!(| .perms(caller(), 'trusts) |))
  5:     (> .perms(sender(), 'trusts) <);
  6: 
  7: // connect
  8: address = (> .parse_email_address(address, 'resolv_host) <);
  9: c = (> .connect_to_smtp_host(address[3], address[2]) <);
 10: 
 11: // VRFY enabled?
 12: catch ~error {
 13:     [code, lines] = (> .VRFY(c, address[1]) <);
 14:     if (code == 250) {
 15:         .QUIT(c);
 16:         .close_session(c);
 17: 
 18:         // munch on it a little
 19:         if ((m = regexp(lines[1], "^([^<]+)<([^>]+)>"))) {
 20:             [name, email] = m;
 21:         } else if ((m = regexp(lines[1], "<([^>]+)>"))) {
 22:             email = m[1];
 23:             name = strsed(lines[1], " *<[^>]+> *", "");
 24:         } else {
 25:             [email, (name ?= "")] = lines;
 26:         }
 27:         return [email.trim(), name.trim()];
 28:     }
 29: }
 30: 
 31: // nope, try RCPT..
 32: catch any {
 33:     (> .MAIL_FROM(c, $smtp.get_email_address('postmaster)) <);
 34:     [code, lines] = (> .RCPT_TO(c, address[1]) <);
 35:     .QUIT(c);
 36:     .close_session(c);
 37:     if ((m = regexp(lines[1], "<([^>]+)>")))
 38:         email = m[1];
 39:     else
 40:         email = lines[1];
 41:     return [email.trim()];
 42: } with {
 43:     .QUIT(c);
 44:     .close_session(c);
 45:     rethrow(error());
 46: }

// Created 13-Oct-1996 as a part of ColdCore, see: @help Credit

Tlon