diff --git a/envelopes/conn.py b/envelopes/conn.py index b4c6cd1..4610e11 100644 --- a/envelopes/conn.py +++ b/envelopes/conn.py @@ -79,15 +79,16 @@ def _connect(self, replace_current=False): if self._login: self._conn.login(self._login, self._password or '') - def send(self, envelope): + def send(self, envelope, return_path=None): """Sends an *envelope*.""" if not self.is_connected: self._connect() msg = envelope.to_mime_message() + smtp_from = return_path or msg["From"] to_addrs = [envelope._addrs_to_header([addr]) for addr in envelope._to + envelope._cc + envelope._bcc] - return self._conn.sendmail(msg['From'], to_addrs, msg.as_string()) + return self._conn.sendmail(smtp_from, to_addrs, msg.as_string()) class GMailSMTP(SMTP): diff --git a/tests/test_conn.py b/tests/test_conn.py index c9bd4d9..fe427f9 100644 --- a/tests/test_conn.py +++ b/tests/test_conn.py @@ -139,3 +139,38 @@ def test_send(self): assert call_args[0] == mime_msg['From'] assert call_args[1] == [envelope._addrs_to_header([addr]) for addr in envelope._to + envelope._cc + envelope._bcc] assert call_args[2] != '' + + def test_send(self): + conn = SMTP('localhost') + + msg = self._dummy_message() + envelope = Envelope(**msg) + mime_msg = envelope.to_mime_message() + + conn.send(envelope) + assert conn._conn is not None + assert len(conn._conn._call_stack.get('sendmail', [])) == 1 + + call_args = conn._conn._call_stack['sendmail'][0][0] + assert len(call_args) == 3 + assert call_args[0] == mime_msg['From'] + assert call_args[1] == [envelope._addrs_to_header([addr]) for addr in envelope._to + envelope._cc + envelope._bcc] + assert call_args[2] != '' + + def test_send_with_return_path(self): + conn = SMTP('localhost') + + msg = self._dummy_message() + envelope = Envelope(**msg) + mime_msg = envelope.to_mime_message() + FROM_USED_BY_SMTP = "returnpath@domain.tld" + + conn.send(envelope, FROM_USED_BY_SMTP) + assert conn._conn is not None + assert len(conn._conn._call_stack.get('sendmail', [])) == 1 + + call_args = conn._conn._call_stack['sendmail'][0][0] + assert len(call_args) == 3 + assert call_args[0] == FROM_USED_BY_SMTP + assert call_args[1] == [envelope._addrs_to_header([addr]) for addr in envelope._to + envelope._cc + envelope._bcc] + assert call_args[2] != ''