def rcpt(cargo): stream = cargo[0] email_data = cargo[1] recipients = [] client_error = False while 1: client_msg = with_stream_read(stream) if smtp_server_debug: print 'Debug:', cargo[1]['ip'], time.strftime( "%a, %d %b %Y %H:%M:%S +0000", time.gmtime()), client_msg.rstrip('\r\n') if client_is_idle(email_data['start']): client_error = True break elif rcpt_pattern.search(client_msg): recipient = get_email_address(client_msg) if recipient is None or not valid_email_address(recipient): client_error = True break else: if recipient not in recipients: recipients.append(recipient) with_stream_write(stream, '250 Ok' + cr_lf) elif data_pattern.search(client_msg): break else: client_error = True break # get the list of email addresses specified in the 'RCPT TO:' portion of the message server_recipients = filter( lambda x: x.split('@')[1].lower() == recipient_domain, recipients) # find the inbox @smtp_server_domain which is valid (i.e., we have an action function or pass-through specified) inbox = domain_recipients_valid( map(lambda x: x.split('@')[0].lower(), server_recipients)) if inbox is None: block_ip_address(email_data['ip']) client_error = True if client_error or len(server_recipients) == 0: # this email was not sent to an inbox that we can respond to # so stop the client with a bad request reply and close the connection with_stream_write(stream, bad_request + cr_lf) return ('done', cargo) else: email_data['inbox'] = inbox email_data['recipients'] = recipients return ('data', (stream, email_data))
def rcpt (cargo): stream = cargo[0] email_data = cargo[1] recipients = [] client_error = False while 1: client_msg = with_stream_read (stream) if smtp_server_debug: print 'Debug:', cargo[1]['ip'], time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()), client_msg.rstrip('\r\n') if client_is_idle(email_data['start']): client_error = True break elif rcpt_pattern.search(client_msg): recipient = get_email_address(client_msg) if recipient is None or not valid_email_address(recipient): client_error = True break else: if recipient not in recipients: recipients.append(recipient) with_stream_write (stream, '250 Ok'+cr_lf) elif data_pattern.search(client_msg): break else: client_error = True break # get the list of email addresses specified in the 'RCPT TO:' portion of the message server_recipients = filter(lambda x: x.split('@')[1].lower() == recipient_domain, recipients) # find the inbox @smtp_server_domain which is valid (i.e., we have an action function or pass-through specified) inbox = domain_recipients_valid(map(lambda x: x.split('@')[0].lower(), server_recipients)) if inbox is None: block_ip_address(email_data['ip']) client_error = True if client_error or len(server_recipients) == 0: # this email was not sent to an inbox that we can respond to # so stop the client with a bad request reply and close the connection with_stream_write (stream, bad_request+cr_lf) return ('done', cargo) else: email_data['inbox'] = inbox email_data['recipients'] = recipients return ('data', (stream, email_data))
def _mail (): stream = cargo[0] client_msg = with_stream_read (stream) log.debug("%s /%s/", cargo[1]['ip'], client_msg.strip()) if mail_pattern.search(client_msg): sender = get_email_address(client_msg) if sender is None or not valid_email_address(sender): with_stream_write (stream, bad_request+cr_lf) return ('done', cargo) else: with_stream_write (stream, '250 Ok'+cr_lf) email_data = cargo[1] email_data['sender'] = sender return ('rcpt', (stream, email_data)) else: with_stream_write (stream, bad_request+cr_lf) return ('done', cargo)
def _mail(): stream = cargo[0] client_msg = with_stream_read(stream) log.debug("%s /%s/", cargo[1]['ip'], client_msg.strip()) if mail_pattern.search(client_msg): sender = get_email_address(client_msg) if sender is None or not valid_email_address(sender): with_stream_write(stream, bad_request + cr_lf) return ('done', cargo) else: with_stream_write(stream, '250 Ok' + cr_lf) email_data = cargo[1] email_data['sender'] = sender return ('rcpt', (stream, email_data)) else: with_stream_write(stream, bad_request + cr_lf) return ('done', cargo)
def _mail (): stream = cargo[0] client_msg = with_stream_read (stream) if smtp_server_debug: print 'Debug:', cargo[1]['ip'], time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()), client_msg.rstrip('\r\n') if mail_pattern.search(client_msg): sender = get_email_address(client_msg) if sender is None or not valid_email_address(sender): with_stream_write (stream, bad_request+cr_lf) return ('done', cargo) else: with_stream_write (stream, '250 Ok'+cr_lf) email_data = cargo[1] email_data['sender'] = sender return ('rcpt', (stream, email_data)) else: with_stream_write (stream, bad_request+cr_lf) return ('done', cargo)
def _mail(): stream = cargo[0] client_msg = with_stream_read(stream) if smtp_server_debug: print 'Debug:', cargo[1]['ip'], time.strftime( "%a, %d %b %Y %H:%M:%S +0000", time.gmtime()), client_msg.rstrip('\r\n') if mail_pattern.search(client_msg): sender = get_email_address(client_msg) if sender is None or not valid_email_address(sender): with_stream_write(stream, bad_request + cr_lf) return ('done', cargo) else: with_stream_write(stream, '250 Ok' + cr_lf) email_data = cargo[1] email_data['sender'] = sender return ('rcpt', (stream, email_data)) else: with_stream_write(stream, bad_request + cr_lf) return ('done', cargo)