[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